一种音高跟踪和播放方法及其系统的制作方法

文档序号:2829523阅读:270来源:国知局
专利名称:一种音高跟踪和播放方法及其系统的制作方法
技术领域
本发明涉及音高跟踪(Pitch Tracking)技术,尤其涉及在一种音高跟踪和播放系统中进行音符切分与量化的方法背景技术好的音乐不仅可以培育高雅的审美情趣,而且也是缓解压力的一种非常积极的方式,在现代社会中有着重要作用。随着数字音效处理技术的发展,音乐创作和保存方式也不断发展。通常可以听到人们不自觉的哼唱,其实哼唱是一种最自然和最直接的方式去进行音乐创作或音乐查询,这需要将哼唱的信号改编成音乐乐谱并通过一个简易装置进行回放。在一般的哼唱系统中,包括哼唱识别和编曲两大部分,在过去一段时间里主要力量集中在提高哼唱识别的准确度上。
哼唱识别,即捕捉音高信息和节奏变化,离不开音高跟踪技术。音高也可以称作音调或基音频率,表征发浊音时声带振动的频率。浊音指由声带准周期振动发出的声音,可以获得相应的音高;而清音则指声带没有振动发出的声音,没有音高参数。
现有的音高跟踪技术在时域和频域利用统计和非统计信号处理等多种方法实现,但是仍存在以下缺点1)音高跟踪方法结果多以图表、文本等形式表示,没有合适的装置将跟踪结果转换成声音播放;2)音高跟踪装置的音符(Note,如简谱中的“1,2,3,4,5,6,7--do,re,mi,fa,so,la,xi”)切分不够准确,音高识别不够准确;3)音高跟踪算法过于复杂,所占用系统内存较大,往往需要较大的哼唱数据库,并不适用于嵌入式系统。
公开日为2005年4月20日的中国专利申请CN200410049328公开了一种哼唱编曲系统及其方法。主要指将输入的哼唱信号编写为标准乐谱再次呈现出来。但该专利存在以下缺点1)只是将哼唱信号编写为标准乐谱,并不能进行声音播放;2)音高跟踪装置的音符切分不够准确;3)音符切分与识别算法为统计式马可夫模型,且需要数据库参数匹配,算法比较复杂,占用资源高,不能应用于嵌入式系统,使得整个系统应用受限。
公告日为1999年11月16日的美国专利US5986199公开了一种音乐数据声音输入设备,一种体现方式为预置音符从声音输入信号中识别和选择,同时辅助的音符信息(包括音符和音符持续长度等参数)也从声音输入信号中提取,辅助的音符信息用于生成综合引擎参数,该参数修改预置音符,提供合成音符输出。另一种体现方式为音符切分的特征向量用于选择预置文件,该文件系指一种来自乐器预置档案库的特殊乐器文件。根据音符切分,从乐器预置文件中选择预置音符,生成的音符输出与指定的乐器或乐器组相对应。但该专利采用简单峰值检测算法,音符切分不准确。

发明内容
本发明要解决的技术问题在于提供一种音高跟踪和播放方法和系统,可以将跟踪结果直接转换成声音播放,并适宜于嵌入式系统使用。
为了解决上述技术问题,本发明提供了一种音高跟踪和播放系统,包括用于接收输入的声音并对其做采样和分帧处理的语音输入处理模块,用于检测每一语音帧的音高和能量的音高和能量检测模块,用于根据能量检测结果完成音符切分的音符切分模块,以及用于将完成切分的音符转换成乐谱的乐谱转换模块,其特征在于,该系统还包括语音合成模块,用于将转换成的乐谱合成为乐器数字界面文件并进行播放。
进一步地,上述系统还可具有以下特点所述音高和能量检测模块进一步包括预处理单元、归一化互相关函数计算单元、后处理单元和基音频率搜索单元,其中,该预处理单元采用两阶低通滤波器进行滤波。
进一步地,上述系统还可具有以下特点所述互相关函数计算单元进行互相关函数的计算是隔点进行的。
进一步地,上述系统还可具有以下特点所述基音频率搜索单元在搜索时采取隔点搜索,且其搜索范围在20-120之内。
进一步地,上述系统还可具有以下特点所述音符切分模块包括波峰检测模块、主控制模块、音符切分模块、存储模块和双峰值判定模块,其中所述波峰检测模块,用于统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧;所述存储模块用于保存波峰的参数以及浊音段的起始和结束位置;所述双峰值判定模块用于判断第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值是否大于第一阈值,以及第一波峰和第二波峰的峰值位置之间的语音帧个数是否大于第二阈值,如果均是,则返回的判定结果为成功,否则返回失败的判定结果;所述主控制模块用于对能量大于临界值的连续语音帧构成的每一浊音段进行音符切分,进一步包括第一控制单元、第二控制单元和第三控制单元,其中第一控制单元,用于从浊音段的起始位置开始,调用波峰检测模块,如检测不到波峰,则结束该浊音段的处理,否则以检测到的第一个波峰为第一波峰,将该浊音段起始位置及第一波峰的峰值、谷值、峰值位置和谷值位置保存到所述存储模块,触发第二控制单元继续处理;第二控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则将浊音段起始位置输出到音符切分模块,触发第三控制单元继续处理,否则,将该浊音段起始和结束位置输出到音符切分模块;第三控制单元,将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,调用双峰值判定模块,如果返回的判定结果为成功,触发第四控制单元继续处理,否则触发第五控制单元继续处理;第四控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,将第一波峰谷值位置输出到音符切分模块,并用第二波峰的参数覆盖掉保存的第一波峰的相应参数,触发第三控制单元继续处理;否则将第一波峰谷值位置和浊音段结束位置输出到音符切分模块;第五控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,以第一波峰和第二波峰峰值中的大值替换掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的最小值替换掉第一波峰的谷值,第一波峰的峰值位置和谷值位置更新为新的峰值和谷值对应的语音帧,然后触发第三控制单元继续处理;否则将浊音段结束位置输出到音符切分模块;所述音符切分模块用于以浊音段处理过程中输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
相应地,本发明提供的音高跟踪和播放方法,包括以下步骤(a)对输入声音做采样和分帧处理;(b)检测每一语音帧的音高和能量;(c)根据能量检测结果完成音符切分,然后根据检测出的音高将音符切分结果转换成乐谱;(d)将转换得到的乐谱合成为乐器数字界面文件,并进行播放。
进一步地,上述方法还可具有以下特点所述步骤(b)检测语音帧的音高时,进一步分为以下步骤(b1)对分帧处理后的语音信号进行预处理,包括去均值和低通滤波处理,且采用两阶低通滤波器进行滤波;
(b2)将低通滤波后的语音能量与一个阈值进行比较,如高于该阈值,则判断为浊音,转到步骤(b3),否则,执行步骤270;(b3)计算出每帧延迟的浊音信号的归一化互相关函数值ρ(t);(b4)进行后处理,得到相关性最大的ρ(t)及对应的最佳延迟T;(b5)基音频率搜索,即检测相关性最大的ρ(t)所对应的时间延迟的样点t是否在搜索范围内,如果在该范围内,执行步骤(b6),否则,执行步骤(b7);(b6)认为该帧语音为浊音,输出最佳延迟T,再根据时间与频率的关系,由该T可以换算出该帧语音对应的音高值,结束;(b7)认为该帧语音为清音,令音高为0,结束。
进一步地,上述方法还可具有以下特点所述步骤(b3)进行互相关函数值的计算时是隔点进行的。
进一步地,上述方法还可具有以下特点所述步骤(b5)在进行基音频率搜索时采取隔点搜索,且其搜索范围在20-120之内。
进一步地,上述方法还可具有以下特点所述步骤(c)进行音符切分时,对能量大于临界值的连续语音帧构成的每一浊音段,执行以下步骤(c1)以第一个语音帧为该浊音段的起始位置,如检测到波峰,将第一个检测到的波峰作为第一波峰,记录该浊音段起始位置及第一波峰的峰值、谷值、峰值位置和谷值位置,执行下一步,如检测不到波峰,结束;(c2)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则输出浊音段起始位置,执行步骤(c3),否则输出该浊音段起始和结束位置,执行步骤(c6);(c3)将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,判断是否第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值大于第一阈值,且第一波峰和第二波峰的峰值位置之间的语音帧个数大于第二阈值,如果是,执行步骤(c4),否则执行步骤(c5);
(c4)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,输出第一波峰谷值位置,并用第二波峰的参数覆盖掉保存的第一波峰的相应参数,返回步骤(c3),否则,输出第一波峰谷值位置和浊音段结束位置,执行步骤(c6);(c5)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,以第一波峰峰值和第二波峰峰值中的大值覆盖掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的小值覆盖掉第一波峰的谷值,第一波峰的峰值位置和谷值位置更新为新的峰值和谷值对应的语音帧,然后返回步骤(c3),否则,输出该浊音段结束位置,执行步骤(c6);(c6)以输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
其中,所述步骤(a)~(e)进行波峰检测时,是逐一比较相邻两个语音帧的能量大小,统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧,该浊音段起始语音帧或前一能量下降段最后一个语音帧为该波峰的起始位置。
采用本发明方法和系统,可以直接将人声哼唱作为输入,输出即为MIDI曲,这样将无需执行其他转化处理就可以感受音高的变化。本发明还通过对音高检测部分的简化,使得系统内存占用小,可以应用于嵌入式系统。此外,通过在音符切分的过程中,可进行抗干扰、有重点有层次的双峰值检测和引入了更有效的检测参数,可提高音符切分的准确率。


图1是本发明实施例音高跟踪和播放系统的结构框图。
图2是本发明实施例音高跟踪和播放方法的整体流程图。
图3是作为示例的一个音高曲线的示意图。
图4是本发明实施例采用归一化互相关函数的基音检测算法的流程图。
图5是本发明实施例音符切分和转成乐谱所用的能量和音高曲线图。
图6是本发明实施例音符切分的流程图。
图7是本发明实施例音符切分装置的结构框图。
具体实施例方式
本发明应用于PC机及嵌入式系统,主要用于跟踪人声哼唱,例如用“啦”哼唱,也可用于某些电子乐器。系统输入为人声,输出为Midi乐曲,Midi是Musical-instrument-digital-interface(乐器数字界面)的简称,是一种记录乐谱的文件格式。
如图1所示,本实施例的音高跟踪和播放系统包括以下模块语音输入处理模块,用于接收输入的声音并对其做采样和分帧处理,输出到音高和能量检测模块。
音高和能量检测模块,用于检测出每一语音帧的音高和能量,得到输入声音的音高曲线和能量曲线,然后输出到音符切分模块。
音符切分模块,用于根据能量检测结果完成音符切分,输出到乐谱转换模块。
乐谱转换模块,用于将完成切分的音符转换成乐谱,输出到语音合成模块。
语音合成模块,用于将转换成的乐谱合成为MIDI文件并进行播放。
如图2所示,本实施例音高跟踪和播放方法的整体流程包括以下步骤步骤10,对输入声音做采样和分帧处理;可以通过硬件系统的麦克,以8KHz采样率、16bit采集人声哼唱作为输入,也可提高采样率到16KHz。通常,对语音的分析和处理是在短时性的基础上,因此需要对输入的声音做分帧处理。本实施例对输入的声音(8KHz采样率、16bits表示)进行分帧(frames)时,每一帧为20ms。
步骤20,音高和能量检测;音高也称作基音频率,在语音处理领域中音高检测和估计是非常重要的一个问题。目前,音高检测有很多非常成熟的算法实现,主要分为时域、频域以及其他流行方法。
语音信号的特征是随时间变化的,只有在一短时间间隔内保持相对平稳。因此,需要检测出每一语音帧的音高和能量,得到输入声音的音高曲线和能量曲线。
步骤30,音符切分与转成乐谱经过音高检测得到一个音高曲线,图3是一个示例,表示了音高随时间的变化,有的音符单独表示,有的音符连在一起需要切分,音符切分需要结合音高和能量检测结果方可完成。
音高曲线虽然看起来非常直观,但是作为表征丰富的音符变化的参数仍然不足以使人有切身感受,本实施例的系统不仅能够进行音高检测而且能够把处理结果实时的播放出来,使人对自己的音符有了全方位的感受,从而拓宽了其应用领域。例如可以作为有声调语言的对比学习,或通过哼唱检索歌曲,或者智能电子玩具等,这就需要将音符切分结果转换成乐谱播放。
步骤40,利用通常合成技术,将转换得到的乐谱合成为MIDI文件,并进行播放。
对电子乐器的声音也可按上述步骤同样处理。
在上述步骤20中,本实施例的归一化互相关函数(NCCF)的基音检测算法和现有方法基本相同,区别点将在以下步骤中重点介绍,请参照图4,该基音检测算法包括以下步骤步骤210,对分帧处理后的语音信号进行预处理,包括去均值、1000Hz低通滤波处理;步骤220,逐帧进行清浊音判断将低通滤波后的语音能量与一个阈值进行比较,如高于该阈值,则判断为浊音,转到步骤230,否则,执行步骤270;
步骤230,计算归一化互相关函数通过以下公式计算出每帧延迟的浊音信号的归一化互相关函数值ρ(t)ρ(t)=Σn=0N-1s(n)s(n-1)Σn=0N-1s2(n)Σn=0N-1s2(n-t),t∈
]]>其中,s(n)表示语音信号,N为信号帧长,一帧语音是20ms,经过8kHz采样,则N=160,t为时间延迟的样点,t在
范围内分为三个区域,在每个区域内隔点计算ρ(t)值,并比较原始信号和它的延迟信号之间的相似(相关)程度,得出一个最为相似的ρ(t)。三个区域共得到三个ρ(t)值、各自对应的时间延迟的样点以及对应的延迟时间。
步骤240,后处理比较三个ρ(t)值,得到相关性最大的ρ(t)及对应的最佳延迟T;步骤250,基音频率搜索检测相关性最大的ρ(t)所对应的时间延迟的样点t是否在[20,120]范围内,如果在该范围内,执行步骤260,否则,执行步骤270;步骤260,认为该帧语音为浊音,输出最佳延迟T,再根据时间与频率的关系,由该T可以换算出该帧语音对应的音高值。
步骤270,认为该帧语音为清音,令音高为0,结束。
相应地,可以将音高和能量检测模块划分为预处理单元、归一化互相关函数计算单元、后处理单元、基音频率搜索单元和音高输出单元,和现有的单元相比,有以下特点现有的预处理单元采用了5阶椭圆低通滤波器和一个数值滤波器,本实施例将原有的5阶椭圆低通滤波器改为Haar小波基的两阶低通滤波器,截止频率设为1000Hz,并去除数值滤波器,从而大大减少了运算复杂度。
互相关函数计算非常复杂,现有互相关函数计算单元通常是每一点都要计算一次相关函数,而本实施例的该单元是隔点进行相关运算,降低了一半的运算量。
现有的基音频率搜索单元的搜索范围为20-147,本实施例的该单元则将搜索范围缩小到20-120内(也可以更小一点)并采取隔点搜索,减少了高频基音检测误差和减少运算。
音高检测部分是复杂度最大的部分,本实施例通过上述单元的改进,在不影响检测精度的前提下降低了复杂度,从而使得本发明可以应用于嵌入式系统。
上述步骤30中的音符切分是本发明的一个重点,下面将详细介绍。
A,音符切分的目的对于音高曲线需要转化为一个个音符(如简谱“1,2,3,4......”)即乐谱才能进行播放,而只有少数情况是一段音高对应一个音符,多数情况是一段音高对应几个音符,这就需要进行音符切分,才能完成乐谱。
B,音符切分的背景当人采用歌词清唱时,音高曲线变得比较复杂,一方面受到音高变化的影响,另一方面对于音色的变化(或者转音)也会影响音高曲线的起伏变化,加强了切分音符的难度。例如,一首曲子本身有着音高的高低变化,同样的音高采用钢琴和吉他演奏效果并不同,这就是音色不同的影响,同样一首曲子可以通过哼“啦”、“嗒”演唱,也可以通过唱歌词来演唱,后者歌词是变化的,要比前者的音高曲线变化更复杂。本实施例方法主要用于完成前者“啦”、“嗒”演唱的歌曲。
C,现有的音符切分方法音符切分是为了找到一个个音符,又因为每个音符在起始阶段能量较大,然后能量开始下降、维持,直到消失或被下一个音符能量所掩蔽,这就是本系统选择峰值检测算法的原因,如图4所示。
峰值检测是用来检测信号中能量较大的峰值位置,现有的技术有A)小波变换算法,小波变换是传统傅立叶变换的继承和发展,主要应用在信号处理、图像处理、语音处理等多个领域,但是实现比较复杂。
B)简单峰值检测,或者幅度包络检测,通过一阶导数、二阶导数决定一个峰值,此方法虽然简单但抗干扰性能较差。
C)通过峰峰值、半峰值和峰谷值等参数检测峰值,已有应用在音符切分技术上,虽然所得到的结果比较稳定,但对于语音信号中的多峰(信号中的一个峰值周围存在小峰)检测不准。
D)本实施例的音符切分方法本实施例在上述峰值检测C)的基础上进行了改进,主要表现在以下三个方面1)预处理首先将检测出的各个语音帧的能量值依次输入一个一阶低通滤波器进行滤波,过滤掉能量曲线中的毛刺,以提高抗干扰性和检测效果;2)双峰值检测请参照图5,整个能量曲线上有能量大于临界值的语音帧和能量小于临界值的语音帧,在音符切分时只对能量大于临界值的连续语音帧进行处理,文中称其为浊音段,该连续语音帧中第一个和最后一个语音帧即为该浊音段的起始位置和结束位置。在能量曲线上,能量可以用幅度或功率来表征,较佳地,能量的临界值可以取为26dB~30dB,但本发明不限于此。
下面以一个浊音段为例对本实施例的双峰值检测方法进行说明。如图6所示,该流程包括以下步骤步骤300,从浊音段起始位置,即第一个语音帧开始,判断在该浊音段是否检测到第一个波峰,如果是,执行步骤310,否则,直接结束;在整个音符切分的过程中都需要进行波峰检测,因此先介绍一下本实施例采用的波峰检测方法逐一比较语音帧序列中前一个语音帧与后一个语音帧的能量大小关系,统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的语音帧的个数,如果该个数大于设定的阈值(该阈值较佳为5~9,本实施例为7),则认为这些语音帧对应的能量曲线构成一个波峰。该段能量曲线上最大的能量值为该波峰的峰值,该段能量曲线上最后一个语音帧的能量值为该波峰的谷值,峰值和谷值位置分别为峰值和谷值对应的语音帧,波峰的起始位置即为上述浊音段起始语音帧或前一能量下降段最后一个语音帧。
如果能量连续上升段和随后的能量连续下降段涉及的语音帧个数小于等于所述阈值,则认为这些语音帧对应的能量曲线是一个小突波,不对其进行处理。
步骤310,将检测到的第一个波峰作为第一波峰,记录该浊音段起始位置和该第一波峰的相关参数,包括该波峰的峰值、谷值、峰值位置和谷值位置;步骤320,继续检测,判断在检测到能量小于临界值的语音帧之前是否检测出下一波峰,如果否,表示在该浊音段结束前已没有波峰,执行步骤330,如果检测出下一波峰,输出该浊音段起始位置(步骤320a),执行步骤340;步骤330,判定该浊音段对应于一个音符,输出该浊音段的起始位置和结束位置,结束;步骤340,将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,判断第一波峰和第二波峰的峰值能量差比和峰峰间距是否大于预设的阈值,如果是,执行步骤350,否则,执行步骤380;第一波峰和第二波峰的峰值能量差比是这样计算的将第二波峰峰值减去第一波峰谷值的差,除以第一波峰峰值减去第一波峰谷值的差,得到的比值即为该两个波峰的峰值能量差比。当峰值能量差比小于相应阈值时,则认为当前第二波峰是在第一波峰下降段出现的一个小突波,不对应于一个音符。用于和计算出的峰值能量差比比较的阈值较佳为0.1825~0.3125,本实施例取0.1875。
两个波峰的峰峰间距是指两个峰值位置之间的语音帧个数,用于和计算出的该语音帧个数比较的阈值较佳为5~9,本实施例为7。如峰峰间距小于该阈值则表示第二波峰和第一波峰非常接近,不认为第一波峰和第二波峰分别对应于一个单独的音符。
当然,上述两个条件,即峰值能量差比和峰峰间距也可以单独使用,或者采用其它的双峰值检测条件,也能起到滤去过渡成分的功效。
步骤350,继续检测,判断在检测到能量小于临界值的语音帧之前是否检测出下一波峰,如果否,表示在该浊音段结束前已没有波峰,执行步骤360,如果检测出下一波峰,执行步骤370;步骤360,认定第一波峰和第二波峰分别对应于一个音符,输出第一波峰谷值位置和浊音段结束位置,结束;步骤370,认定第一波峰对应于一个音符,输出其谷值位置,同时用第二波峰的各项参数替换掉保存的第一波峰的各项参数,即将原第二波峰作为新的第一波峰,返回步骤340;步骤380,继续检测,判断在检测到能量小于临界值的语音帧之前是否检测出下一波峰,如果否,表示在该浊音段结束前已没有波峰,执行步骤390,如果检测出下一波峰,执行步骤400;步骤390,判定第一波峰对应于一个音符,输出该浊音段的结束位置,结束;步骤400,根据当前记录的第一波峰和第二波峰的参数更新第一波峰的参数,返回步骤340;在更新第一波峰参数时,本实施例是以第一波峰峰值和第二波峰峰值中的大值替换掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的小值替换掉第一波峰的谷值,第一波峰的峰值位置和谷值位置更新为新的峰值和谷值对应的语音帧。
在完成检测或在检测过程中,根据输出的浊音段起始、结束位置和波峰的谷值位置就可以进行音符切分,在一个浊音段上,输出的两个相邻位置即为一个音符的起始和结束位置。
一般情况下,两个峰值之间总有一些过渡成分,包括小突波和平缓下降(属于第一个峰值的延续)、抖动和不规则的上升曲线(属于第二个峰值的起始)等,采用双峰值检测有效地处理了过渡成分,因此提高了传统的峰值检测算法的准确率。
本实施例采用如图7所示的音符切分装置来实现上述音符切分的方法,包括一阶低通滤波器(该单元可选)、波峰检测模块、主控制模块、音符切分模块、存储模块和双峰值判定模块,其中所述一阶低通滤波器,用于对检测出的语音帧序列中各个语音帧的能量进行滤波,所述波峰检测模块和主控制模块基于该滤波后的语音帧能量进行处理;所述波峰检测模块,用于统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧;所述存储模块用于保存波峰的参数以及浊音段的起始和结束位置;所述双峰值判定模块用于判断第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值是否大于第一阈值,以及第一波峰和第二波峰的峰值位置之间的语音帧个数是否大于第二阈值,如果均是,则返回的判定结果为成功,否则返回失败的判定结果;所述主控制模块用于对能量大于临界值的连续语音帧构成的每一浊音段进行音符切分,进一步包括第一控制单元、第二控制单元、第三控制单元、第四控制单元和第五控制单元,其中第一控制单元,用于从浊音段的起始位置开始,调用波峰检测模块,如检测不到波峰,则结束该浊音段的处理,否则以检测到的第一个波峰为第一波峰,将该浊音段起始位置及第一波峰的峰值、谷值、峰值位置和谷值位置保存到所述存储模块,触发第二控制单元继续处理;第二控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则将浊音段起始位置输出到音符切分模块,触发第三控制单元继续处理,否则,将该浊音段起始和结束位置输出到音符切分模块;
第三控制单元,将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,调用双峰值判定模块,如果返回的判定结果为成功,触发第四控制单元继续处理,否则触发第五控制单元继续处理;第四控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,将第一波峰谷值位置输出到音符切分模块,并用第二波峰的参数替换掉保存的第一波峰的相应参数,触发第三控制单元继续处理;否则将第一波峰谷值位置和浊音段结束位置输出到音符切分模块;第五控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,根据第一波峰和第二波峰的参数更新第一波峰的参数(见图6中步骤370),触发第三控制单元继续处理;否则将浊音段结束位置输出到音符切分模块;所述音符切分模块用于以浊音段处理过程中输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
有时波峰之间会的一些小突波,在实施例中是将前一波峰的谷值位置作为该波峰对应音符的结束位置。不过,在其它实施方式中,也可以将后一波峰的起始位置作为前一波峰对应音符的结束位置,这反应的流程上在步骤340要记录第二波峰的起始位置,并在步骤360和步骤370中先用第二波峰的起始位置替换掉第一波峰的谷值位置,再输出该替换后的第一波峰谷值位置。反映在装置上,则第三控制单元还记录第二个波峰的起始位置,而第四控制单元先用第二波峰的起始位置替换掉第一波峰的谷值位置,再输出替换后的该第一波峰的谷值位置。
总体流程中的步骤30还要将切分完的音符转成MIDI乐谱,方法如下众所周知,简谱中每个音阶内的“1,2,3,4,5,6,7--do,re,mi,fa,so,la,xi”都对应了一个频率值,而按照乐理中的十二平均律对应于不同的MIDI值,例如Octave5(八度音阶)Midi Pitch
415.30HZ G5#So5#---MIDI 68440.00HZ A5La5 ---MIDI 69466.16HZ A5#La5#---MIDI 70MIDI乐谱需要音符信息,包括音符的长度和音符的音高均值。
音符的长度,是根据对浊音段进行音符切分时输出的两个相邻位置之间的语音帧个数得到的,这些位置可能是峰值起始位置、谷值位置或浊音段起始、结束位置。
音符的音高均值,是根据对浊音段进行音符切分时输出的两个相邻位置找到对应的音高曲线,计算该段曲线音高的平均值得到的。例如,输出的两个相邻位置为10、35(用语音帧序号表示),P(n)为音高曲线中第n个语音帧的音高值,则该音符的音高均值为Pitch=[P(10)+P(11)+...+P(35)]/(35-10)将音高均值转换为相应的频率fpitch=fx/Pitch,其中fx为采样频率。
因此,首先通过音符的音高得到相应的频率值(或音阶Octave值),然后量化到简谱中的“1,2,3......”,最后通过十二平均律公式MIDI=69+12×log2[(FS/440)×fpitch]即可得到MIDI的音高。例如,系统得到一个音符的音高为430HZ,那么首先将它量化成Octave5中的A5 La5,然后就可以采用事先通过十二平均律公式计算好的MIDI 69表示。
综上所述,本发明可以应用于PC机及嵌入式系统,可以跟踪人声哼唱信号及某些电子乐器,通过时域自相关音高检测(Pitch Detection)算法和基于能量的音符分割使得系统占用资源较少,方法简单,使用方便灵活。
权利要求
1.一种音高跟踪和播放系统,包括用于接收输入的声音并对其做采样和分帧处理的语音输入处理模块,用于检测每一语音帧的音高和能量的音高和能量检测模块,用于根据能量检测结果完成音符切分的音符切分模块,以及用于将完成切分的音符转换成乐谱的乐谱转换模块,其特征在于,该系统还包括语音合成模块,用于将转换成的乐谱合成为乐器数字界面文件并进行播放。
2.如权利要求1所述的音高跟踪和播放系统,其特征在于,所述音高和能量检测模块进一步包括预处理单元、归一化互相关函数计算单元、后处理单元和基音频率搜索单元,其中,该预处理单元采用两阶低通滤波器进行滤波。
3.如权利要求2所述的音高跟踪和播放系统,其特征在于,所述互相关函数计算单元进行互相关函数的计算是隔点进行的。
4.如权利要求2或3所述的音高跟踪和播放系统,其特征在于,所述基音频率搜索单元在搜索时采取隔点搜索,且其搜索范围在20-120之内。
5.如权利要求1所述的音高跟踪和播放系统,其特征在于,所述音符切分模块包括波峰检测模块、主控制模块、音符切分模块、存储模块和双峰值判定模块,其中所述波峰检测模块,用于统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧;所述存储模块用于保存波峰的参数以及浊音段的起始和结束位置;所述双峰值判定模块用于判断第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值是否大于第一阈值,以及第一波峰和第二波峰的峰值位置之间的语音帧个数是否大于第二阈值,如果均是,则返回的判定结果为成功,否则返回失败的判定结果;所述主控制模块用于对能量大于临界值的连续语音帧构成的每一浊音段进行音符切分,进一步包括第一控制单元、第二控制单元和第三控制单元,其中第一控制单元,用于从浊音段的起始位置开始,调用波峰检测模块,如检测不到波峰,则结束该浊音段的处理,否则以检测到的第一个波峰为第一波峰,将该浊音段起始位置及第一波峰的峰值、谷值、峰值位置和谷值位置保存到所述存储模块,触发第二控制单元继续处理;第二控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则将浊音段起始位置输出到音符切分模块,触发第三控制单元继续处理,否则,将该浊音段起始和结束位置输出到音符切分模块;第三控制单元,将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,调用双峰值判定模块,如果返回的判定结果为成功,触发第四控制单元继续处理,否则触发第五控制单元继续处理;第四控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,将第一波峰谷值位置输出到音符切分模块,并用第二波峰的参数覆盖掉保存的第一波峰的相应参数,触发第三控制单元继续处理;否则将第一波峰谷值位置和浊音段结束位置输出到音符切分模块;第五控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,以第一波峰和第二波峰峰值中的大值替换掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的最小值替换掉第一波峰的谷值,第一波峰的峰值位置和谷值位置更新为新的峰值和谷值对应的语音帧,然后触发第三控制单元继续处理;否则将浊音段结束位置输出到音符切分模块;所述音符切分模块用于以浊音段处理过程中输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
6.一种音高跟踪和播放方法,包括以下步骤(a)对输入声音做采样和分帧处理;(b)检测每一语音帧的音高和能量;(c)根据能量检测结果完成音符切分,然后根据检测出的音高将音符切分结果转换成乐谱;(d)将转换得到的乐谱合成为乐器数字界面文件,并进行播放。
7.如权利要求6所述的音高跟踪和播放方法,其特征在于,所述步骤(b)检测语音帧的音高时,进一步分为以下步骤(b1)对分帧处理后的语音信号进行预处理,包括去均值和低通滤波处理,且采用两阶低通滤波器进行滤波;(b2)将预处理后的语音能量与一个阈值进行比较,如高于该阈值,则判断为浊音,转到步骤(b3),否则,执行步骤(b7);(b3)计算出每帧延迟的浊音信号的归一化互相关函数值ρ(t);(b4)进行后处理,得到相关性最大的ρ(t)及对应的最佳延迟T;(b5)基音频率搜索,即检测相关性最大的ρ(t)所对应的时间延迟的样点t是否在搜索范围内,如果在该范围内,执行步骤(b6),否则,执行步骤(b7);(b6)认为该帧语音为浊音,输出最佳延迟T,再根据时间与频率的关系,由该T换算出该帧语音对应的音高值,结束;(b7)认为该帧语音为清音,令音高为0,结束。
8.如权利要求7所述的音高跟踪和播放方法,其特征在于,所述步骤(b3)进行互相关函数值的计算时是隔点进行的。
9.如权利要求7所述的音高跟踪和播放方法,其特征在于,所述步骤(b5)在进行基音频率搜索时采取隔点搜索,且其搜索范围在20-120之内。
10.如权利要求6或8所述的音高跟踪和播放方法,其特征在于,所述步骤(c)进行音符切分时,对能量大于临界值的连续语音帧构成的每一浊音段,执行以下步骤(c1)以第一个语音帧为该浊音段的起始位置,如检测到波峰,将第一个检测到的波峰作为第一波峰,记录该浊音段起始位置及第一波峰的峰值、谷值、峰值位置和谷值位置,执行下一步,如检测不到波峰,结束;(c2)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则输出浊音段起始位置,执行步骤(c3),否则输出该浊音段起始和结束位置,执行步骤(c6);(c3)将检测出的下一波峰作为第二波峰,记录其峰值、谷值、峰值位置和谷值位置,判断是否第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值大于第一阈值,且第一波峰和第二波峰的峰值位置之间的语音帧个数大于第二阈值,如果是,执行步骤(c4),否则执行步骤(c5);(c4)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,输出第一波峰谷值位置,并用第二波峰的参数覆盖掉保存的第一波峰的相应参数,返回步骤(c3),否则,输出第一波峰谷值位置和浊音段结束位置,执行步骤(c6);(c5)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,以第一波峰峰值和第二波峰峰值中的大值覆盖掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的小值覆盖掉第一波峰的谷值,第一波峰的峰值位置和谷值位置更新为新的峰值和谷值对应的语音帧,然后返回步骤(c3),否则,输出该浊音段结束位置,执行步骤(c6);(c6)以输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。其中,所述步骤(a)~(e)进行波峰检测时,是逐一比较相邻两个语音帧的能量大小,统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧,该浊音段起始语音帧或前一能量下降段最后一个语音帧为该波峰的起始位置。
全文摘要
一种音高跟踪和播放方法和系统,包括用于接收输入的声音并对其做采样和分帧处理的语音输入处理模块,用于检测每一语音帧的音高和能量的音高和能量检测模块,用于根据能量检测结果完成音符切分的音符切分模块,以及用于将完成切分的音符转换成乐谱的乐谱转换模块,以及语音合成模块,用于将转换成的乐谱合成为乐器数字界面文件并进行播放。这样可以直接将人声哼唱作为输入,输出即为MIDI曲。进一步地通过在音高检测的预处理时采用两阶低通滤波器进行滤波,隔点进行互相关函数的计算,缩小基音频率的搜索范围等措施,可以使本发明适用于嵌入式系统。
文档编号G10H5/00GK101093661SQ200610086470
公开日2007年12月26日 申请日期2006年6月23日 优先权日2006年6月23日
发明者王贵平 申请人:凌阳科技股份有限公司, 北京北阳电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1