一种播放Hi-Fi音乐时的频谱效果的展示方法与流程

文档序号:14390713阅读:554来源:国知局
一种播放Hi-Fi音乐时的频谱效果的展示方法与流程

本发明涉及音频频谱展示技术领域,具体说是一种播放hi-fi音乐时的频谱效果的展示方法。



背景技术:

随着便携移动设备的性能的不断提升,以及使用者对更高音质的不断追求,越来越多的便携移动设备,诸如:手机、平板电脑、音乐播放器、移动音箱等,都支持高音质的音频播放,各个音乐播放平台也提供更多的无损音乐、高保真音乐等资源,供用户选择、赏析。

hi-fi是英语high-fidelity的缩写,直译为“高保真”,其定义是:与原来的声音高度相似的重放声音。

在播放hi-fi音乐时,有些时候需要相应的提供频谱动画效果(简称频谱效果),以丰富用户的使用体验,但频谱动画的解析、呈现消耗资源较多,流畅度和精确度不是很理想。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种播放hi-fi音乐时的频谱效果的展示方法,在播放hi-fi音乐时,高流畅度、高精确度的同步展现频谱动画,其分贝值更精确,界面绘制效果美观,动画过渡顺畅。

为达到以上目的,本发明采取的技术方案是:

一种播放hi-fi音乐时的频谱效果的展示方法,其特征在于,包括如下步骤:

创建自定义控件cdspectrumview,继承自view类,

调用自定义控件cdspectrumview,依次执行以下绘制步骤,

步骤1,绘制代表频率的横坐标;

步骤2,绘制代表分贝值的纵坐标;

步骤3,绘制频谱;

步骤4,绘制频率和分贝文字;

步骤5,更新频谱;

步骤6,平滑过渡的处理;

步骤7,播放暂停时平滑下落的处理;

步骤8,频谱封闭区域的渐变。

在上述技术方案的基础上,在自定义控件cdspectrumview中,定义绘制文字的画笔,定义频谱线条的画笔。

在上述技术方案的基础上,在onsizechanged回调中,确定控件宽度以及高度,根据高度设置线性渐变lineargradient,将这个设置给频谱画笔。

在上述技术方案的基础上,确定绘制的区域mrect,区域mrect在坐标线的内部,用于在区域mrect内进行频谱绘制。

在上述技术方案的基础上,在ondraw回调中,绘制频谱以及坐标和文字。

在上述技术方案的基础上,在绘制频谱时,底层每100ms更新一次音频数据,

在更新函数updatevisualizer中,采用动态获取和分配内存空间的方式,获取右声道的音频数据,共512个数据点。

在上述技术方案的基础上,在绘制频谱时,为了适配安卓界面的更新频率16ms,实现过渡平滑,采用以下步骤:

记录两次更新的数据差值,

将数据差值除以界面刷新的频率,所得结果存储到临时变量mspeed中,

设定10ms刷新一次界面,过渡的时候不断的在上一个值的基础上不断的累加这个临时变量,即达到平滑过渡的效果。

在上述技术方案的基础上,在绘制坐标时,

对于横坐标,默认横坐标绘制30个点,且每到第5个点的时候,线长增加一倍;

将控件宽度减去左边分贝值的线宽,再除以默认的30个点,得到两条线之间的间距;

对于纵坐标,默认按控件高度绘制22个刻度。

在上述技术方案的基础上,在绘制文字时,

对于横坐标,在每第5个坐标点的下方绘制频率坐标文字;

对于纵坐标,在每第5个坐标点的右侧绘制分贝坐标文字。

在上述技术方案的基础上,当播放暂停的时候,让频谱以一定的速度平滑落下,

通过post一个消息到主线程,消息的内容就是在最后一次绘制频谱的数据的基础上,减去一个值,不断绘制即可,直到频谱数据为0,停止刷新。

本发明所述的播放hi-fi音乐时的频谱效果的展示方法,在播放hi-fi音乐时,高流畅度、高精确度的同步展现频谱动画,其分贝值更精确,可精确展示声音在某一频率下的分贝值,界面绘制效果美观,动画过渡顺畅。

附图说明

本发明有如下附图:

图1本发明的流程图。

图2本发明的实施效果图。

具体实施方式

以下结合附图对本发明作进一步详细说明。

如图1、2所示,本发明所述的播放hi-fi音乐时的频谱效果的展示方法,包括如下步骤:

创建自定义控件cdspectrumview,继承自view类,

调用自定义控件cdspectrumview,依次执行以下绘制步骤,

步骤1,绘制代表频率的横坐标;

步骤2,绘制代表分贝值的纵坐标;

步骤3,绘制频谱;

步骤4,绘制频率和分贝文字;

步骤5,更新频谱;

步骤6,平滑过渡的处理;

步骤7,播放暂停时平滑下落的处理;

步骤8,频谱封闭区域的渐变。

在上述技术方案的基础上,在自定义控件cdspectrumview中,定义绘制文字的画笔,定义频谱线条的画笔。

在上述技术方案的基础上,在onsizechanged回调中,确定控件宽度以及高度,根据高度设置线性渐变lineargradient,将这个设置给频谱画笔。

在上述技术方案的基础上,确定绘制的区域mrect,区域mrect在坐标线的内部,用于在区域mrect内进行频谱绘制。

在上述技术方案的基础上,在ondraw回调中,绘制频谱以及坐标和文字。

在上述技术方案的基础上,在绘制频谱时,底层每100ms更新一次音频数据,

在更新函数updatevisualizer中,采用动态获取和分配内存空间的方式,获取右声道的音频数据,共512个数据点。

在上述技术方案的基础上,在绘制频谱时,为了适配安卓界面的更新频率16ms,实现过渡平滑,采用以下步骤:

记录两次更新的数据差值,

将数据差值除以界面刷新的频率,所得结果存储到临时变量mspeed中,

设定10ms刷新一次界面,过渡的时候不断的在上一个值的基础上不断的累加这个临时变量,即达到平滑过渡的效果。

在上述技术方案的基础上,在绘制频谱时,将数据点保存到mpath路径中,再使用画布绘制路径,

如果上次绘制的mpath不为空,需要重新将其置空,但保存之前的内部结构,优化内存频繁调用下的抖动,然后重新构造路径数据,最后进行绘制。

在上述技术方案的基础上,在绘制坐标时,

对于横坐标,默认横坐标绘制30个点,且每到第5个点的时候,线长增加一倍;

将控件宽度减去左边分贝值的线宽,再除以默认的30个点,得到两条线之间的间距;

对于纵坐标,默认按控件高度绘制22个刻度。

在上述技术方案的基础上,在绘制文字时,

对于横坐标,在每第5个坐标点的下方绘制频率坐标文字;

对于纵坐标,在每第5个坐标点的右侧绘制分贝坐标文字。

在上述技术方案的基础上,当播放暂停的时候,让频谱以一定的速度平滑落下,

通过post一个消息到主线程,消息的内容就是在最后一次绘制频谱的数据的基础上,减去一个值,不断绘制即可,直到频谱数据为0,停止刷新。

本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1