移动设备上乐曲演奏分析软件的音频实时处理方法

2019-03-15 13:31王琮王同喜余华平向华
电脑知识与技术 2019年2期
关键词:声音频域时域

王琮 王同喜 余华平 向华

摘要:该文针对应用于音乐领域的实时音频处理方法进行了详细研究。在本课题中,制作了一个演示模型用于展示音频处理的过程,完成了使用Android设备对声音数据的采集、处理、分析、降噪等工作。本篇论文简单地分析了各种窗函数对傅立叶变换结果的影响,除此之外,还对时域频域转换进行了较为详细的分析,对频域谱图进行了详细的描述,程序实现了对钢琴各个按键频率幅值的提取以及键音持续时间的计算。通过本课题成果,能够实现在Android手机上,通过手机本身获取音频数据、处理音频数据,并得到钢琴演奏者在一个时间片段内按下的钢琴键、键音持续时长等数据。这些数据在被获取之后,将交由“评价模型”进行比对评价,得到钢琴演奏分析的相关数据和结果。最后,本文对设计中所遇到的难题进行了重点介绍、分析并提出解决办法,对课题实验结果进行定性分析并得出结论。

关键词:声音;时域;频域;傅立叶变换;FFTW;音频处理

中图分类号:TP31      文献标识码:A      文章编号:1009-3044(2019)02-0268-03

近年来,随着社会的进步,经济的迅猛发展,全民素质的不断提高,越来越多的家长开始注重孩子早期的音乐教育,继而产生了一支颇为壮观的学童大军。越来越多的家长希望自己的孩子能够在课余时间放松自己的同时学习一下音乐知识来培养孩子的创造力,训练其专注能力和情感表现力,增强社会交往能力,打造孩子乐观向上、健康自信的品格[1]。但往往由于缺乏德才兼备的教师或家长本身缺乏专业知识等现实因素苦于无法对孩子进行很好的指导。

在国内音乐教育领域内,很多非音乐专业学生在完成中国业余考级后,面对日趋增长的学业压力和工作压力,基本很少有专业老师辅导学习的机会,于是在课余时间选择了通过自学的方式放松自己,但却往往会出现无法对自己的水平做出正确评估、标准分析以及不知道如何提高演奏能力等问题。

本项目基于以上背景应运而生,志在打造出一款应用在音乐教学、指导领域的手机应用APP,通过系统内置乐器演奏水平分析评价系统,在线专家实时评价、反馈机制等具体方法来减轻各种乐器教师的教学压力,指导学生自学,为我国各种乐器教学解决一系列由于师资力量不够完善而出現的问题。

本文则倾向于乐器演奏水平分析软件的设计与实现过程中的音频处理部分,且以钢琴为例。

现有技术存在以下缺陷:

1) 当前学习钢琴过程中,评价一位学生的钢琴演奏是否存在问题,一般采取由专业老师在一旁聆听指导的方法,而由于此种方法需要老师进行一对一辅导,耗费大量人力、时间资源。

2) 应用市场上存在一些针对电子钢琴的教学应用,而此类应用的使用范围只能针对电子钢琴,应用范围狭窄,而且只能钢琴按键键位进行指导,不具备完整的分析评价技术,无法处理钢琴在演奏过程中的多种问题。

3) 网络上存在一些对已经弹奏完成的录制音频处理分析的方法,如刘乐的《钢琴演奏评价系统研究[2]》,此方法不能够做到实时处理,无法对学习者进行实时指导,效果较差。

1 主要工作

1.1 主要研究内容

傅立叶变换:FFTW ( the Faster Fourier Transform in the West) 是一个快速计算离散傅里叶变换的标准C语言程序集,其由MIT的M.Frigo 和S. Johnson 开发。可计算一维或多维实和复数据以及任意规模的DFT。FFTW 通常比目前其他开源Fourier变换程序都要快,本文使用的版本为fftw-3.3.5。

本文的重点是将时域数据经过加窗周期延拓之后再利用傅立叶变换实现时域到频域的转换,对频域数据进行分析处理。

本文研究的内容主要有以下几个方面:

1) 样本数据采集:根据手机采样率、采样位数、通道数、最优采样时间确定样本数据。既要保证分辨率又要保证实时性,因此需要研究最佳采样时间来确定样本。

2) 加窗与周期延拓:对样本数据加Hanning窗、费杰窗等多种窗函数,并周期延拓,分析不同窗函数的效果以及延拓方法对傅立叶变换结果频域图的影响。

3) 时域频域转换:利用FFTW变换库实现FFT变换。研究FFT结果的物理意义,学习频域谱图的对应关系。

4) 降噪处理:对频域数据分析,将干扰数据去除。降低实验场合的噪声对实验的影响,去除实验过程中不必要的数据。

5) 音频数据分析技术。学习音频二进制数据的处理技术,通过变换采样数据的数据类型分析不同类型的数据对实验结果的影响。

1.2 主要解决思路

1) 硬件设备对声音的采样率,不同硬件是不同的,但每个设备自身都有其固定的值:fs (采样率) 单位 Hz(赫兹)。除此之外,采样位数也很重要,一般设备都具备两种模式,16bit模式和8bit模式,16bit模式音频较8bit模式音频拥有更高的清晰度,采样结果更利于数据处理与计算,因此课题中主要采用16bit模式。

2) 硬件设备在采样过程中的拥有一个最短采样时间:t 单位:s(秒),即硬件设备每t秒采样一次,由此可以利用t*fs计算出一次采样得到的样本数。

3) 对采集到的采样样本进行加Hanning窗:

[Hn=0.5-0.5*cos2πnN-1        (0≤n

(1)

其中n为单个样本,N为窗口大小。由于样本数是有限的,可以对加窗后的数据进行周期延拓,进而得到理想数量级的样本。

4) 使用FFTW变换库对加窗后的样本进行实数到实数的FFT变换,得到double数组M,M数组的长度为L。则由L、fs可以计算出f(Hz)的频率在数组M中对应的位置,并得到频域谱图。

5) 由于噪声干扰,在处理频域谱图过程中忽略高度较小的频率进行降噪[3],对具有波峰特征的位置进行处理,得到并记录该点的频率,继而处理所有波峰。对谐波进行舍弃处理,对成比例的键音频率作归并处理。

2 系统设计

2.1 系统运作流程

系统总体流程图[4]如图1所示,首先,由用户打开手机,程序开始运行,打开麦克风,程序开始采样获得采样数据,然后程序调用窗函数对采样样本进行加窗与周期延拓,获得有效样本,有效样本将由JNI组件递交给FFTW库进行FFT变换处理,获得频谱数据由JNI返回给程序,程序需要对此样本作两部分处理,首先,界面控件将数据进行抽样绘图,用于向用户展示实时状态,方便人机交互,另一方面,程序启动线程对数据进行分析,获得按键频率对应的幅值,分析该按键是否符合阈值,输出结果日志,程序进入下一次采样与分析,获得键音持续时间。

由于FFT变换以及数据处理都是耗时比较高的操作,因此需要将数据归入一个待处理队列,当一组数据处理完成,另一组数据自动加入处理流程,而要平衡数据处理与采样时间,设定一个合适的缓冲区间是本设计的一个重要环节。

2.2 演示模型

在本設计中,需要实现一个演示demo,具体模型如下:

1) 展示模型,一个用于实时展示声音频率谱图的模型,使用JAVA中的Canvas进行绘图,当系统完成运算时,会得到一个长度为16000的double数组,将此数组进行抽样绘制在一个高600长1000的面板上。由于一维傅立叶变换的结果是对称的,所以只需要取前8000个数据,每8个数据进行一次抽样即可获得1000个数据。

2) 数据采样,Android系统监听麦克风使用RecordAudio完成对音频流的获取,使用单通道、8000Hz采样率,每40ms采样一次得到320个数据。

3) 加窗与周期延拓,当计算机在进行测试信号处理时,不可能对无穷长度的信号进行处理运算,所以会取得有限的时间数据片段进行分析,比如在上方获得的320个数据,将这些数据进行周期延拓处理得到了虚拟的无限长度的信号,然后对此信号进行傅立叶变换处理、分析,但是当实际信号在被截断的时候,数据前后关联性被破坏,频谱也会因此发生畸变,原本应该集中在f(0)处的能量被分散到了两个较宽的频带中了,即频谱的能量泄露现象。而为了减少这种能量泄露,可以采用不同的截取函数对原始的信号进行截断,这种截断函数就被称为窗函数。不同的窗函数对频域谱图的影响是不同的,因为不同的窗函数产生泄漏的大小是不一样的,频率的分辨能力也不一样,信号的截断发生泄露现象,而FFT算法计算频域又会产生所谓的栅栏效应,理论上讲,能量泄露与栅栏效应这两种误差都是不能绝对消除的,但可以通过不同的窗函数对他们进行抑制,比如,矩形窗主瓣变窄,旁瓣变大,频率识别的精度最高,但幅值识别度最低等。在本设计中,窗函数的研究与选取是至关重要的一步。

4) FFT变换,将采样与周期延拓之后的信号存放在一个长度为16000的double数组中,通过Java Native提供的接口交给FFTW进行处理并返回一个长度为16001的double数组,该数组的第160001个数据为这个数组中的最大值。

5) 绘图,JAVA程序在得到返回数据之后,抽样绘制频域图。

6) 数据可用性分析,分析钢琴频率各个键的频率在该数组中的位置,根据其幅度值是否在阈值范围内判定该值是否应被认可。

7) 按键次数统计获得按键的持续时间,由于在本算法中,每40ms采样一次,因此只需要统计一个按键响应了多少次,即可确定其持续时间。其幅度值对应响度。

3 程序测试

3.1 计算机模拟定频音波测试

在正式测试[5]之前先使用计算机模拟固定频率的正弦波声音对程序进行测试,需要使用到软件【SineGen定频wav生成器.exe】。测试结果如下:

1) 模拟钢琴70号键#F(bG)_6音测试3秒,测试结果如表1所示:

符合要求。

2) 模拟钢琴85号键A_7音测试3秒,测试结果如表2所示:

符合要求。

3) 模拟钢琴63号键B_5音测试3秒,测试结果如表3所示:

符合要求。

4) 模拟钢琴42号键D_4音测试3秒,测试结果如表4所示:

出现6次43号混音,大致符合要求。

结论:测试程序在计算机模拟定频测试过程中,因钢琴最低八度和最高八度声音振幅太小无法被手机准确监听到,导致结果出现错误,而在其他区域的键均能准确监听到,但是个别键易出现混音误差。

3.2 机械钢琴测试

使用一首约18次按键的曲子对程序进行3次测试,其中一次测试结果如表5所示。

共监听到16组数据,结果基本符合要求。

结论:在使用机械钢琴对程序进行测试时,由于涉及机械波谐波处理的部分,技术不够成熟,降噪方法不够优秀,导致个别按键监听不到或键音持续时间计算不够精确。但整体来看,基本能够满足现阶段的需求。

4 总结

本文提出了移动设备上乐曲演奏分析软件的音频实时处理方法,该方法可以运行在绝大多数手机上,对手机配置的要求不高。同时该方法能够应用或迁移应用于很多乐器的评价分析模型中。

参考文献

[1]王玮.儿童需要什么样的教育[J].连云港文学·校园美文,2014,(6):60.

[2]刘乐.钢琴演奏评价系统研究[D].清华大学,2005.

[3]侯春琳.关于声音降噪处理[J].辽宁广播电视技术,2010,(2):17-18.

[4]刘超.程序交互执行流程图及其测试覆盖准则[J].软件学报,1998,9(6).

[5]郑人杰,计算机软件测试技术[M].清华大学出版社,1992.

猜你喜欢
声音频域时域
大型起重船在规则波中的频域响应分析
基于时域信号的三电平逆变器复合故障诊断
频域稀疏毫米波人体安检成像处理和快速成像稀疏阵列设计
浅析民族男高音的演唱技巧
基于极大似然准则与滚动时域估计的自适应UKF算法
基于改进Radon-Wigner变换的目标和拖曳式诱饵频域分离
基于时域逆滤波的宽带脉冲声生成技术
基于频域伸缩的改进DFT算法
基于时域波形特征的输电线雷击识别