一种音频频谱动画柔和展现算法制造技术

技术编号:16310613 阅读:32 留言:0更新日期:2017-09-29 04:06
本发明专利技术涉及一种音频频谱动画柔和展现算法,频谱数据传入后,获取左右声道中频率变化最丰富一端的指定数量的频谱数据,形成一组频谱数据,创建或复用速度数组mSpeeds,使用cacheFFTs数组中的频谱数据,与在二次更新频谱数据前插值的次数相除,所述相除计算使用3次,其满足:设计在100ms的更新间隔中,每33毫秒插入频谱动画一次,得到以下参数:频谱数据中新的对应频谱数据,变化所需要的速度;当计算好cacheFFTs数组和速度数组mSpeeds后,启动异步绘制循环调用。本发明专利技术,把频谱数据更新频率间隔与绘制的间隔进行插值匹配,在100毫秒的数据更新间隔中,实现三次绘制,绘制时分段变化频谱数据,实现动画的柔和展现。

A soft presentation algorithm for audio spectrum animation

The invention relates to an audio spectrum display animation soft algorithm, spectrum data after the incoming access channel about frequency changes in the most abundant spectrum data of a specified number of one end of the spectrum, form a set of data, or create an array of mSpeeds multiplexing velocity spectrum data, using cacheFFTs array, and in the two update of spectrum data before interpolation the number of division, the division is calculated using 3 times to satisfy the design: in the 100ms update interval, every 33 milliseconds into a spectrum of animation, the following parameters were obtained: the corresponding spectrum data of new spectrum data, change the required speed; when the calculated cacheFFTs array and mSpeeds array speed after the start of asynchronous rendering call cycle. The present invention, the spectrum data update frequency interval and drawing interval interpolation matching in 100 ms data update interval, the realization of the three changes in the spectrum data segment rendering, rendering and animation show soft.

【技术实现步骤摘要】

本专利技术涉及进度条显示
,具体说是一种音频频谱动画柔和展现算法
技术介绍
在Android中,自定义控件,主要包括两类:第一类,组合自定义控件,是指使用系统提供的各种界面控件,通过自定义封装成包括多个系统控件的自定义控件,代码在内部处理各子控件的交互,简化使用。第二类,自绘制控件,是指通过继承系统提供的各种界面控件,在控件的测量、布局、绘制三个方法中,使用代码进行测量、绘制、处理交互事件的自定义控件。自绘制控件能提供比系统控件更新颖的界面、更丰富的交互方式。频谱动画多在录音或播放音频时展示,通常是通过安卓自带的Visualizer类,获得频谱信息,得到一个byte数组。然后把这个byte数组转换成point数组,最后再根据这个point数组绘制点,就行了。但这种现有频谱动画显示效果缺乏美感,功能单一,人机交互过程有待进一步完善。在播放音频时还会在交互界面给出进度条,并且可以通过拖动进度条实现播放进度的相应控制。进度条通常是在独立的区域进行显示,同样也是功能单一,人机交互过程有待进一步完善。
技术实现思路
针对现有技术中存在的缺陷,本专利技术的目的在于提供一种音频频谱动画柔和展现算法,把频谱数据更新频率间隔与绘制的间隔进行插值匹配,在100毫秒的数据更新间隔中,实现三次绘制,绘制时分段变化频谱数据,实现动画的柔和展现。为达到以上目的,本专利技术采取的技术方案是:一种音频频谱动画柔和展现算法,其特征在于,包括如下步骤:外部播放器回调接口,通过updateVisualizer方法把频谱数据传入,以进行频谱数据更新;使用cacheFFTs数组,分别从传入的频谱数据中,获取左右声道中频率变化最丰富一端的指定数量的频谱数据,在cacheFFTs数组中,把右声道频谱数据追加到左声道频谱数据后面,形成一组频谱数据;判断速度数组mSpeeds是否已存在,如不存在,则创建速度数组mSpeeds,如已存在,则复用速度数组mSpeeds;使用cacheFFTs数组中的频谱数据,与在二次更新频谱数据前插值的次数相除,所述相除计算使用3次,其满足:设计在100ms的更新间隔中,每33毫秒插入频谱动画一次,得到以下参数:频谱数据中新的对应频谱数据,要想从上一次频谱数据,变化到新的频谱数据,所需要的速度,存入速度数组mSpeeds;当计算好cacheFFTs数组和速度数组mSpeeds后,启动异步绘制循环调用。在上述技术方案的基础上,所述频谱数据参数格式为float数组,左右声道的频谱数据,通过fft_left和fft_right二个数组传入。在上述技术方案的基础上,频谱数据传入后,updateVisualizer方法进行以下判断:首先判断当前是否在停止绘制状态下,是在停止绘制状态下,则忽略本次频谱数据更新,然后判断当前是否在暂停动画状态下,是在暂停动画状态下,则忽略本次频谱数据更新,再后判断当前是否在插入柔和绘制频谱变化循环状态下,是在插入柔和绘制频谱变化循环状态下,则忽略本次频谱数据更新。在上述技术方案的基础上,所述指定数量至少为32个。在上述技术方案的基础上,所述异步绘制循环调用使用Runnable进行,通过updateVisualizer方法进行第一次启动调用后,此Runnable会使用速度数组mSpeeds中的各位置速度,去与cacheFFTs数组中的各位置频谱数据,进行相加处理,数据更新后,调用绘制命令,同时判断自已循环次数是否到达,不到达再次异步启动自己定时调用。本专利技术所述的音频频谱动画柔和展现算法,把频谱数据更新频率间隔与绘制的间隔进行插值匹配,在100毫秒的数据更新间隔中,实现三次绘制,绘制时分段变化频谱数据,实现动画的柔和展现。整个方案具有以下优点:1、实现了频谱展现与进度条功能结合统一,具有占用空间小,进度条变化与频谱动画和谐统一的优点。2、频谱动画使用贝赛尔曲线,间隔采样频谱数据,绘制两条贝赛尔曲线,两条曲线通过填充渐变色,使用颜色混合绘制模式,两条线条叠加创建了丰富的频谱展现效果。3、使用自创算法,把频谱的傅里叶变换数组数据,转换为绘制所需要的屏幕坐标数据,再把屏幕坐标数据使用贝赛尔曲线显示出来。4、使用自创算法,把频谱数据更新频率间隔与绘制的间隔进行插值匹配,在100毫秒的数据更新间隔中,实现三次绘制,绘制时分段变化频谱数据,实现动画的柔和展现。5、经过优化数据的计算及图形生成算法,可高效转换频谱数据为曲线图形并定时随数据变化,从而形成随频谱变动的动画效果。附图说明本专利技术有如下附图:图1本专利技术的流程图。具体实施方式以下结合附图对本专利技术作进一步详细说明。如图1所示,本专利技术所述的音频频谱动画柔和展现算法,包括如下步骤:步骤1,基于View控件,自定义新的控件类mProgress,在构造函数处增加初始化方法;其中自定义新的控件类mProgress包括:创建频谱绘制使用的Path对象wavePath,并设置相应参数,所述参数至少包括频谱数组容量等参数,创建频谱变换使用缓存数组对象cacheFFTs,创建两条贝赛尔曲线绘制使用的Paint对象mForePaint1,mForePaint2,创建进度条绘制变量max、min、value,三个变量分别表示进度条最大值、最小值、当前值,所述自定义新的控件类mProgress使用这三个变量的换算值表示播放进度,其中初始化方法包括:初始化按键操作步进单位值,表示按键一次,变化多少;初始化进度条背景绘制用Paint对象lingBgPaint,初始化进度条进度绘制用Paint对象progressPaint,初始化进度条缓冲绘制用Paint对象secondPaint。步骤2,进行频谱数据的接收、变换,准备好频谱绘制用图形对象,启动异步绘制循环调用;具体步骤如下:步骤2.1,外部播放器回调接口,通过updateVisualizer方法把频谱数据传入,以进行频谱数据更新,所述频谱数据参数格式为float数组,左右声道的频谱数据,通过fft_left和fft_right二个数组(频谱数组)传入;步骤2.2,updateVisualizer方法进行以下判断:首先判断当前是否在停止绘制状态下,是在停止绘制状态下,则忽略本次频谱数据更新,然后判断当前是否在暂停动画状态下,是在暂停动画状态下,则忽略本次频谱数据更新,再后判断当前是否在插入柔和绘制频谱变化循环状态下,是在插入柔和绘制频谱变化循环状态下,则忽略本次频谱数据更新,上述三个忽略条件,都是为了提高控件自绘制效率;步骤2.3,上述三个忽略条件都不满足,则:使用cacheFFTs数组,分别从传入的频谱数据(fft_left和fft_right二个数组)中,获取左右声道中频率变化最丰富一端的指定数量的频谱数据,所述指定数量至少为32个,所述fft_left和fft_right二个数组,是外部播放器已经经过转换的512容量数组,但其中只有一半是有效数据(频谱数据),另一半是镜像数据(镜像频谱数据),所以这里根据绘制效果,只取其一端指定数量(32个)频谱数据,例如:左声道数组的取其最后面的32个频谱数据,右声道数组的取其最前面的32个频谱数据;步骤2.4,在cacheFFTs数组中,把右声道频谱数据追加到左声道频谱数据后面,形成一组频谱数本文档来自技高网...
一种音频频谱动画柔和展现算法

【技术保护点】
一种音频频谱动画柔和展现算法,其特征在于,包括如下步骤:外部播放器回调接口,通过updateVisualizer方法把频谱数据传入,以进行频谱数据更新;使用cacheFFTs数组,分别从传入的频谱数据中,获取左右声道中频率变化最丰富一端的指定数量的频谱数据,在cacheFFTs数组中,把右声道频谱数据追加到左声道频谱数据后面,形成一组频谱数据;判断速度数组mSpeeds是否已存在,如不存在,则创建速度数组mSpeeds,如已存在,则复用速度数组mSpeeds;使用cacheFFTs数组中的频谱数据,与在二次更新频谱数据前插值的次数相除,所述相除计算使用3次,其满足:设计在100ms的更新间隔中,每33毫秒插入频谱动画一次,得到以下参数:频谱数据中新的对应频谱数据,要想从上一次频谱数据,变化到新的频谱数据,所需要的速度,存入速度数组mSpeeds;当计算好cacheFFTs数组和速度数组mSpeeds后,启动异步绘制循环调用。

【技术特征摘要】
1.一种音频频谱动画柔和展现算法,其特征在于,包括如下步骤:外部播放器回调接口,通过updateVisualizer方法把频谱数据传入,以进行频谱数据更新;使用cacheFFTs数组,分别从传入的频谱数据中,获取左右声道中频率变化最丰富一端的指定数量的频谱数据,在cacheFFTs数组中,把右声道频谱数据追加到左声道频谱数据后面,形成一组频谱数据;判断速度数组mSpeeds是否已存在,如不存在,则创建速度数组mSpeeds,如已存在,则复用速度数组mSpeeds;使用cacheFFTs数组中的频谱数据,与在二次更新频谱数据前插值的次数相除,所述相除计算使用3次,其满足:设计在100ms的更新间隔中,每33毫秒插入频谱动画一次,得到以下参数:频谱数据中新的对应频谱数据,要想从上一次频谱数据,变化到新的频谱数据,所需要的速度,存入速度数组mSpeeds;当计算好cacheFFTs数组和速度数组mSpeeds后,启动异步绘制循环调用。2.如权利要求1所述的音频频谱动画柔和展现算法,其特征在于:所述频谱数据参数格式为float数...

【专利技术属性】
技术研发人员:纪广兴
申请(专利权)人:北京酷我科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1