CN107894885A - 一种音频方形频谱生成方法 - Google Patents
一种音频方形频谱生成方法 Download PDFInfo
- Publication number
- CN107894885A CN107894885A CN201711149029.6A CN201711149029A CN107894885A CN 107894885 A CN107894885 A CN 107894885A CN 201711149029 A CN201711149029 A CN 201711149029A CN 107894885 A CN107894885 A CN 107894885A
- Authority
- CN
- China
- Prior art keywords
- frequency spectrum
- audio
- square frequency
- square
- generation method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computing Systems (AREA)
- Electrically Operated Instructional Devices (AREA)
Abstract
本发明涉及一种音频方形频谱生成方法,步骤如下:(1),自定义控件;(2),在自定义控件的构造函数中,设置画笔;(3),在自定义控件的构造函数中,设置绘制方形频谱区域;(4),在自定义控件的构造函数中,确定单个方形频谱的宽高;(5),定义handler变量,用于处理消息,用于循环绘制各单个方形频谱;(6),当开始绘制的时候,在handler的消息处理回调中,获取播放器对象;(7),如果获取播放器对象为空,则对消息做移除操作,不再绘制频谱;如果获取播放器对象非空,则进行绘制频谱处理。本发明,能高效的快速生成音频的频谱,并以方形频谱的形式展现,动画效果顺滑,用户体验好,支持色彩的渐变,富于美感,对系统资源占用少。
Description
技术领域
本发明涉及音频频谱技术领域,具体说是一种音频方形频谱生成方法。
背景技术
在音乐赏析时,为了丰富用户的体验,增强个性化,往往会提供在音乐播放时同步的在屏幕上显示音频频谱的功能。
音频频谱(简称频谱)是将声音的频率图形化,可视的呈现给用户,因此,频谱算音乐可视化的一种,把音乐的实时频谱用一些复杂的算法进行处理,转为画面显示出来,增强视觉上的美感。
在各种音频频谱的显示方案中,方形频谱是其中的方案之一,其横坐标表示播放的时间,频谱高低显示的是声音的大小,但现有技术中没有统一、可靠的方形频谱生成算法,导致方形频谱的生成不够理想,容易出现卡顿的情况,展现方形频谱的动画效果时流畅度不好。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种音频方形频谱生成方法,能高效的快速生成音频的频谱,并以方形频谱的形式展现,动画效果顺滑,用户体验好,支持色彩的渐变,富于美感,对系统资源占用少。
为达到以上目的,本发明采取的技术方案是:
一种音频方形频谱生成方法,其特征在于,包括如下步骤:
步骤1,自定义控件KwAudioVisualizerView,其继承View控件;
步骤2,在自定义控件的构造函数中,设置画笔,用于绘制方形频谱;
步骤3,在自定义控件的构造函数中,设置绘制方形频谱区域;
步骤4,在自定义控件的构造函数中,确定单个方形频谱的宽高;
步骤5,定义handler变量,用于处理消息,用于循环绘制各单个方形频谱;
步骤6,当开始绘制的时候,在handler的消息处理回调中,获取播放器对象;
步骤7,如果获取播放器对象为空,则对消息做移除操作,不再绘制频谱;
如果获取播放器对象非空,则进行绘制频谱处理。
在上述技术方案的基础上,步骤3中,所述设置绘制方形频谱区域具体包括:
区域形状,默认为矩形,
区域坐标值,默认包括左上、左下、右上、右下四个矩形顶点坐标值。
在上述技术方案的基础上,步骤4中,所述确定单个方形频谱的宽高具体包括:
单个方形频谱的宽度,默认宽度值为dip2px(5),
单个方形频谱最大高度,默认最大高度值为dip2px(28)。
在上述技术方案的基础上,步骤7中,所述进行绘制频谱处理具体包括:
解析并获取当前的播放时间,当播放时间不为-1的时候,就执行View的invalidate进行重绘,在onDraw回调中绘制具体的方形频谱。
在上述技术方案的基础上,还包括:
步骤8,执行重绘之后,按照安卓系统的刷新频率间隔的给handler发送消息,handler再重复处理步骤5到步骤8,达到每隔16毫秒重新绘制的效果。
在上述技术方案的基础上,步骤8之后,还包括处理音频数据的如下步骤:
步骤9,获取歌曲播放的总时长;
步骤10,音频数组的每个值对应一个方形频谱,根据音频数组的数组长度和音频总时长,用获取的当前播放时间计算出当前是第几个方形频谱,保存到成员变量curPlayInfo[0]中,在绘制的过程中会使用这个数值;
步骤11,计算在当前方形频谱中播放的比例,乘以方形频谱分配的像素值,就计算出了当前方形频谱中播放的宽度,单位是像素;
步骤12,绘制方形频谱。
在上述技术方案的基础上,所述音频为短音频,
所述短音频是指:音频时长在1到30秒内的音频。
在上述技术方案的基础上,短音频的来源是:
音频资源的精彩亮点进行抽取后形成的短音频,
音频资源进行精加工后形成的短音频,
音频资源进行取舍后形成的短音频,
用户交流互动时的语音进行录制形成的短音频,所述交流互动包括:话题讨论,广播节目播报,在线问答。
在上述技术方案的基础上,所述短音频包括:音频数据和文本数据,音频数据用于解析后通过播音设备呈现给用户,文本数据用于解析后通过显示设备呈现给用户。
本发明所述的音频方形频谱生成方法,能高效的快速生成音频的频谱,并以方形频谱的形式展现,动画效果顺滑,用户体验好,支持色彩的渐变,富于美感,对系统资源占用少。
附图说明
本发明有如下附图:
图1本发明的流程图。
图2展示图片示意图。
图3绘制效果示意图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
本发明所述音频尤其适用于短音频,所述短音频是指:音频时长在1到30秒内的音频,优选音频时长在1到15秒,最优选音频时长在1到7秒。“短音频”合乎当今时代节奏,面对移动互联网用户需求与习惯,短音频更利于用户间的交流与分享。短音频的来源可以是:
音频资源的精彩亮点进行抽取后形成的短音频,
音频资源进行精加工后形成的短音频,
音频资源进行取舍后形成的短音频,
用户交流互动时的语音进行录制形成的短音频,所述交流互动包括:话题讨论,广播节目播报,在线问答。
更进一步,所述短音频包括:音频数据和文本数据,音频数据用于解析后通过播音设备呈现给用户,文本数据用于解析后通过显示设备呈现给用户。
如图1所示,本发明所述的音频方形频谱生成方法,包括如下步骤:
步骤1,自定义控件KwAudioVisualizerView,其继承View控件;
步骤2,在自定义控件的构造函数中,设置画笔,用于绘制方形频谱;
步骤3,在自定义控件的构造函数中,设置绘制方形频谱区域;
具体包括:
区域形状,默认为矩形,
区域坐标值,默认包括左上、左下、右上、右下四个矩形顶点坐标值;在绘制逻辑中,根据四个顶点坐标值形成频谱区域;
步骤4,在自定义控件的构造函数中,确定单个方形频谱的宽高;
具体包括:
单个方形频谱的宽度,默认宽度值为dip2px(5),
单个方形频谱最大高度,默认最大高度值为dip2px(28);
步骤5,定义handler变量,用于处理消息,用于循环绘制各单个方形频谱;
Handler是Android系统提供的一种机制,主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一个部分在消息队列中逐一将消息取出,然后对消息进行处理,也就是发送消息和接收消息不是同步的处理,这种机制通常用来处理相对耗时比较长的操作;
步骤6,当开始绘制的时候,在handler的消息处理回调中,获取播放器对象;
开始时,handler会接收到Android主线程发来的消息,消息其实就是一个通知或者一个事件,可以携带一些变量信息给消息接收方;例如:通过message.what=1类型的消息,以表明此message属于开始操作;
获取播放器对象可以用以下指令:
IjkMediaPlayer mMediaPlayer
=BibiPlayProxy.getIns().getPlayer();
IjkMediaPlayer是媒体播放器类,用来播放音频、视频的第三方框架,BibiPlayProxy.getIns().getPlayer()是代码中封装的获取播放器的工具类,这个不同的项目可以做适合自己的封装;
步骤7,如果获取播放器对象为空,则对消息做移除操作,不再绘制频谱;
如果获取播放器对象非空,则进行绘制频谱处理。
在上述技术方案的基础上,所述进行绘制频谱处理具体包括:
解析并获取当前的播放时间,当播放时间不为-1的时候,就执行View的invalidate进行重绘,在onDraw回调中绘制具体的方形频谱。
在上述技术方案的基础上,还包括:
步骤8,执行重绘之后,按照安卓系统的刷新频率间隔的给handler发送消息,handler再重复处理步骤5到步骤8,达到每隔16毫秒重新绘制的效果。
所述安卓系统的刷新频率为16毫秒,即16毫秒之后再给handler发送消息,这一间隔时间使人眼感觉不到卡顿。
例如:
sendEmptyMessageDelayed(11,16L);
就是利用Android系统的sendEmptyMessageDelayed功能函数,向主线程发送一个消息,11是消息的代码,16L表示16毫秒。
在上述技术方案的基础上,步骤8之后,还包括处理音频数据的如下步骤:
步骤9,获取歌曲播放的总时长;
例如:
IjkMediaPlayer player
=BibiPlayProxy.getIns().getPlayer();
long duration = player.getDuration();
if (duration > 0) {
mAudioDuration = duration / 1000d;
}
其中,IjkMediaPlayer是媒体播放器类,用来播放音频、视频的第三方框架,BibiPlayProxy.getIns().getPlayer()是代码中封装的获取播放器的工具类,这个不同的项目可以做适合自己的封装,player.getDuration()是获取播放器的总的播放时长,duration是毫秒,除以1000就得出单位是秒的时长;
步骤10,音频数组的每个值对应一个方形频谱,根据音频数组的数组长度和音频总时长,用获取的当前播放时间计算出当前是第几个方形频谱,保存到成员变量curPlayInfo[0]中,在绘制的过程中会使用这个数值;
例如:
curPlayInfo[0]=(int)(curPosition * (mWaveformData.length / (1000.0D *mAudioDuration)));
curPlayInfo是保存播放信息的容器,curPlayInfo[0]保存的是当前第一个方形频谱的数据,curPosition是播放的当前时间,mWaveformData是音频数组,保存了音频的数据,mAudioDuration是音频的总时长;
步骤11,计算在当前方形频谱中播放的比例,乘以方形频谱分配的像素值,就计算出了当前方形频谱中播放的宽度,单位是像素;
例如:
curPlayInfo[1] = (int) (((curPosition - d * curPlayInfo[0]) / d) *PIXELS_FOR_PER_DATA_RANGE);
curPlayInfo是保存播放信息的容器,curPlayInfo[1]保存的是在当前方形频谱中的宽度,单位是像素,curPosition是当前播放的时间,d的当前播放的时间和音频总时长的比值,PIXELS_FOR_PER_DATA_RANGE是每个方形频谱的宽度,值为5dp;
步骤12,绘制方形频谱。
在上述技术方案的基础上,步骤12的具体步骤为:
步骤12.1,在handler的handleMessage中会调用View的invalide,使界面重绘,在View的onDraw回调中处理界面绘制逻辑,在onDraw回调种,获取控件KwAudioVisualizerView高度和宽度,计算出一半屏幕包含的方形频谱数据,之所以是一半屏幕,是因为设计中,在方形频谱移动到屏幕一半的时候,整体的方形频谱往屏幕左边移动,达到文中要实现的动画效果;
例如:
int widgetWidth = getWidth() - getPaddingRight() - getPaddingLeft(); //显示宽度
int halfViewWidth = widgetWidth / 2;
getWidth()能获取控件KwAudioVisualizerView的宽度,getPaddingLeft()和getPaddingRight()获取宽度的左右内边距,halfViewWidth是控件KwAudioVisualizerView相对于屏幕的中间的宽度;
步骤12.2,当开始播放的时候,绘制染色部分是从0开始的,当绘制染色的部分达到控件中间点的时候,绘制染色部分不动,也就是左半边绘制染色部分,右边绘制未播放的状态,
绘制未播放的状态的具体方式包括但不限于:展示一张图片,参见图2所示;
步骤12.3,当需要移动的条目数量小于音频数组的时候,循环绘制方形频谱,从左边开始,确定左边的绘制区域,右边就是左边的像素加上方形频谱宽度,底部是控件的最低端,高度是音频数据乘以一个像素的经验值28dp;
步骤12.4,经过步骤12.3,确定了绘制区域,就在view的画布上绘制矩形;移动的频谱数量自增,左边绘制的像素再增加一个方形频谱宽度;
例如:
canvas.drawRect(mTmpRect, paint);
canvas是控件KwAudioVisualizerView的画布,drawRect是Android系统提供的画布的api接口,用来绘制一个区域,mTmpRect是确定的绘制的方形频谱区域,paint是画笔,执行这一行代码就可以绘制出一个方形频谱。
本发明的算法,如图3所示,可以实现以下效果:一开始播放的时候,方形频谱都是灰色的,播放过程中渐渐的覆盖上新的颜色,当渐变颜色到达中部的时候频谱向左滚动,左半边还是深色的,后半部是灰色的。在单个频谱上,绘制也是按照像素渐进绘制的,动画效果顺滑,用户体验好。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (9)
1.一种音频方形频谱生成方法,其特征在于,包括如下步骤:
步骤1,自定义控件KwAudioVisualizerView,其继承View控件;
步骤2,在自定义控件的构造函数中,设置画笔,用于绘制方形频谱;
步骤3,在自定义控件的构造函数中,设置绘制方形频谱区域;
步骤4,在自定义控件的构造函数中,确定单个方形频谱的宽高;
步骤5,定义handler变量,用于处理消息,用于循环绘制各单个方形频谱;
步骤6,当开始绘制的时候,在handler的消息处理回调中,获取播放器对象;
步骤7,如果获取播放器对象为空,则对消息做移除操作,不再绘制频谱;
如果获取播放器对象非空,则进行绘制频谱处理。
2.如权利要求1所述的音频方形频谱生成方法,其特征在于:步骤3中,所述设置绘制方形频谱区域具体包括:
区域形状,默认为矩形,
区域坐标值,默认包括左上、左下、右上、右下四个矩形顶点坐标值。
3.如权利要求1所述的音频方形频谱生成方法,其特征在于:步骤4中,所述确定单个方形频谱的宽高具体包括:
单个方形频谱的宽度,默认宽度值为dip2px(5),
单个方形频谱最大高度,默认最大高度值为dip2px(28)。
4.如权利要求1所述的音频方形频谱生成方法,其特征在于:步骤7中,所述进行绘制频谱处理具体包括:
解析并获取当前的播放时间,当播放时间不为-1的时候,就执行View的invalidate进行重绘,在onDraw回调中绘制具体的方形频谱。
5.如权利要求4所述的音频方形频谱生成方法,其特征在于,还包括:
步骤8,执行重绘之后,按照安卓系统的刷新频率间隔的给handler发送消息,handler再重复处理步骤5到步骤8,达到每隔16毫秒重新绘制的效果。
6.如权利要求5所述的音频方形频谱生成方法,其特征在于,步骤8之后,还包括处理音频数据的如下步骤:
步骤9,获取歌曲播放的总时长;
步骤10,音频数组的每个值对应一个方形频谱,根据音频数组的数组长度和音频总时长,用获取的当前播放时间计算出当前是第几个方形频谱,保存到成员变量curPlayInfo[0]中,在绘制的过程中会使用这个数值;
步骤11,计算在当前方形频谱中播放的比例,乘以方形频谱分配的像素值,就计算出了当前方形频谱中播放的宽度,单位是像素;
步骤12,绘制方形频谱。
7.如权利要求1所述的音频方形频谱生成方法,其特征在于;所述音频为短音频,
所述短音频是指:音频时长在1到30秒内的音频。
8.如权利要求7所述的音频方形频谱生成方法,其特征在于:短音频的来源是:
音频资源的精彩亮点进行抽取后形成的短音频,
音频资源进行精加工后形成的短音频,
音频资源进行取舍后形成的短音频,
用户交流互动时的语音进行录制形成的短音频,所述交流互动包括:话题讨论,广播节目播报,在线问答。
9.如权利要求8所述的音频方形频谱生成方法,其特征在于:所述短音频包括:音频数据和文本数据,音频数据用于解析后通过播音设备呈现给用户,文本数据用于解析后通过显示设备呈现给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711149029.6A CN107894885A (zh) | 2017-11-17 | 2017-11-17 | 一种音频方形频谱生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711149029.6A CN107894885A (zh) | 2017-11-17 | 2017-11-17 | 一种音频方形频谱生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107894885A true CN107894885A (zh) | 2018-04-10 |
Family
ID=61804542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711149029.6A Pending CN107894885A (zh) | 2017-11-17 | 2017-11-17 | 一种音频方形频谱生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107894885A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762860A (zh) * | 2018-04-16 | 2018-11-06 | 北京酷我科技有限公司 | 一种阴影效果的实现方法 |
CN108804104A (zh) * | 2018-07-02 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 安卓系统自定义动画的实现方法、装置、存储介质及终端 |
CN109634701A (zh) * | 2018-11-27 | 2019-04-16 | 浙江万朋教育科技股份有限公司 | 一种基于移动终端音频显示的方法 |
CN113838168A (zh) * | 2021-10-13 | 2021-12-24 | 亿览在线网络技术(北京)有限公司 | 一种粒子特效动画的生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110072442A1 (en) * | 2009-09-22 | 2011-03-24 | International Business Machines Corporation | Event-handler for selecting responsive actions |
CN107291335A (zh) * | 2017-06-30 | 2017-10-24 | 北京酷我科技有限公司 | 一种内容滚动呈现的方法 |
-
2017
- 2017-11-17 CN CN201711149029.6A patent/CN107894885A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110072442A1 (en) * | 2009-09-22 | 2011-03-24 | International Business Machines Corporation | Event-handler for selecting responsive actions |
CN107291335A (zh) * | 2017-06-30 | 2017-10-24 | 北京酷我科技有限公司 | 一种内容滚动呈现的方法 |
Non-Patent Citations (1)
Title |
---|
HE.XJ: ""音频跳动的View--FrequencyView_He.xj-CSDN博客"", 《HTTPS://BLOG.CSDN.NET/A3100293282/ARTICLE/DETAILS/55260016》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762860A (zh) * | 2018-04-16 | 2018-11-06 | 北京酷我科技有限公司 | 一种阴影效果的实现方法 |
CN108762860B (zh) * | 2018-04-16 | 2021-08-03 | 北京酷我科技有限公司 | 一种阴影效果的实现方法 |
CN108804104A (zh) * | 2018-07-02 | 2018-11-13 | 武汉斗鱼网络科技有限公司 | 安卓系统自定义动画的实现方法、装置、存储介质及终端 |
CN109634701A (zh) * | 2018-11-27 | 2019-04-16 | 浙江万朋教育科技股份有限公司 | 一种基于移动终端音频显示的方法 |
CN113838168A (zh) * | 2021-10-13 | 2021-12-24 | 亿览在线网络技术(北京)有限公司 | 一种粒子特效动画的生成方法 |
CN113838168B (zh) * | 2021-10-13 | 2023-10-03 | 亿览在线网络技术(北京)有限公司 | 一种粒子特效动画的生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107894885A (zh) | 一种音频方形频谱生成方法 | |
CN106210855B (zh) | 对象显示方法和装置 | |
CN106878820B (zh) | 直播互动方法及装置 | |
CN105335465B (zh) | 一种展示主播账户的方法和装置 | |
CN107241636A (zh) | 一种虚拟礼物展示方法及装置 | |
CN102054287B (zh) | 面部动画视频生成的方法及装置 | |
CN109587560A (zh) | 视频处理方法、装置、电子设备以及存储介质 | |
CN113099298B (zh) | 虚拟形象的改变方法、装置和终端设备 | |
CN106817596B (zh) | 作用于媒体采集装置的特效处理方法及装置 | |
US8441485B2 (en) | Method and apparatus for generating video animation | |
JPH07328228A (ja) | ゲーム装置 | |
CN104754277B (zh) | 信息处理设备及信息处理方法 | |
CN104113682B (zh) | 一种图像获取方法及电子设备 | |
WO2021169583A1 (zh) | 虚拟现实显示设备及其控制方法 | |
TW201002399A (en) | Image processing device, method for controlling an image processing device, and an information storage medium | |
CN103426194A (zh) | 一种动画表情的制作方法 | |
CN107623622A (zh) | 一种发送语音动画的方法及电子设备 | |
CN106791786A (zh) | 直播方法及装置 | |
CN104615738B (zh) | 一种基于远程同步的移动终端照片分享方法 | |
CN101596362A (zh) | 一种游戏画面显示方法、装置及游戏系统 | |
CN103945140A (zh) | 视频字幕的生成方法及系统 | |
CN106550261A (zh) | 提升视频图像清晰度的展现方法及系统 | |
CN110634174B (zh) | 一种表情动画过渡方法、系统及智能终端 | |
CN112138377A (zh) | 调整游戏app渲染效果的方法及系统 | |
CN105307045A (zh) | 在视频节目上显示互动信息的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180410 |
|
RJ01 | Rejection of invention patent application after publication |