发明内容
本发明要解决的技术问题在于提供一种音符切分方法及其装置,可以更准确地完成音符切分。
为了解决上述技术问题,本发明提供了一种音符切分方法,先对输入声音做采样和分帧处理,并检测出语音帧序列中各个语音帧的能量,对能量大于临界值的连续语音帧构成的每一浊音段,执行以下步骤:
(a)以第一个语音帧为该浊音段的起始位置,如检测到波峰,将第一个检测到的波峰作为第一波峰,记录该浊音段起始位置及第一波峰的包含谷值位置的参数,执行下一步,如检测不到波峰,结束;
(b)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则输出浊音段起始位置,执行步骤(c),否则输出该浊音段起始和结束位置,执行步骤(f);
(c)将检测出的下一波峰作为第二波峰,记录其包含谷值位置的参数,判断该第一波峰和第二波峰是否满足双峰值检测的条件,如果是,执行步骤(d),否则执行步骤(e);
(d)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,输出第一波峰谷值位置,并用第二波峰的参数替换掉保存的第一波峰的相应参数,返回步骤(c),否则,输出第一波峰谷值位置和浊音段结束位置,执行步骤(f);
(e)继续检测,如在检测到能量小于临界值的语音帧之前检测出下一波峰,根据第一波峰和第二波峰的参数更新第一波峰的参数,返回步骤(c),否则,输出该浊音段结束位置,执行步骤(f);
(f)以输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
进一步地,上述音符切分方法还可具有以下特点:所述步骤(c)中的双峰值检测条件是指至少满足下列两条件之一:1)第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值大于第一阈值,此时记录的第一波峰和第二波峰的参数还包括峰值和谷值;2)该双峰值检测条件是指:第一波峰和第二波峰的峰值位置之间的语音帧个数大于第二阈值,此时记录的第一波峰和第二波峰的参数还包括峰值位置。
进一步地,上述音符切分方法还可具有以下特点:在检测出语音帧序列中各个语音帧的能量后,先依次输入一个一阶低通滤波器进行滤波,再利用该低通滤波器输出的能量值进行音符切分。
进一步地,上述音符切分方法还可具有以下特点:所述能量的临界值为26dB~30dB。
进一步地,上述音符切分方法还可具有以下特点:所述步骤(a)~(e)进行波峰检测时,是逐一比较相邻两个语音帧的能量大小,统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线 上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧,该浊音段起始语音帧或前一能量下降段最后一个语音帧为该波峰的起始位置。
进一步地,上述音符切分方法还可具有以下特点:所述第一阈值为0.1825~0.3125,所述第二阈值和第三阈值为5~9。
进一步地,上述音符切分方法还可具有以下特点:所述步骤(c)中还记录第二个波峰的起始位置,所述步骤(d)先用第二波峰的起始位置替换掉第一波峰的谷值位置,再输出替换后的该第一波峰的谷值位置。
进一步地,上述音符切分方法还可具有以下特点:所述步骤(e)中,根据第一波峰和第二波峰的参数更新第一波峰的参数时,是以第一波峰峰值和第二波峰峰值中的大值替换掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的小值替换掉第一波峰的谷值,第一波峰的峰值位置和谷值位置为新的峰值和谷值对应的语音帧。
本发明提供的音符切分装置包括:波峰检测模块、主控制模块、音符切分模块、存储模块和双峰值判定模块,其中:
所述波峰检测模块,用于统计从浊音段起始语音帧或前一能量下降段最后一个语音帧开始的能量连续上升段和随后的能量连续下降段所涉及的能量大于临界值的语音帧的个数,如该个数大于第三阈值,则判定这些语音帧对应的一段能量曲线构成一个波峰,该段曲线上最大的能量值为该波峰的峰值,该段曲线上最后一个语音帧的能量值为该波峰的谷值,该波峰的峰值和谷值位置分别为该峰值和该谷值对应的语音帧;
所述存储模块用于保存波峰的参数以及浊音段的起始和结束位置;
所述双峰值判定模块用于判断第一波峰和第二波峰是否满足双峰值检测的条件,如果是,返回成功的判定结果,否则返回失败的判定结果;
所述主控制模块用于对能量大于临界值的连续语音帧构成的每一浊音段进行音符切分,进一步包括第一控制单元、第二控制单元、第三控制单元、 第四控制单元和第五控制单元,其中:
第一控制单元,用于从浊音段的起始位置开始,调用波峰检测模块,如检测不到波峰,则结束该浊音段的处理,否则以检测到的第一个波峰为第一波峰,将该浊音段起始位置及第一波峰的包含谷值位置的参数保存到所述存储模块,触发第二控制单元继续处理;
第二控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,则将浊音段起始位置输出到音符切分模块,触发第三控制单元继续处理,否则,将该浊音段起始和结束位置输出到音符切分模块;
第三控制单元,将检测出的下一波峰作为第二波峰,记录其包含谷值位置的参数,调用双峰值判定模块,如果返回的判定结果为成功,触发第四控制单元继续处理,否则触发第五控制单元继续处理;
第四控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,将第一波峰谷值位置输出到音符切分模块,并用第二波峰的参数替换掉保存的第一波峰的相应参数,触发第三控制单元继续处理;否则将第一波峰谷值位置和浊音段结束位置输出到音符切分模块;
第五控制单元,用于调用波峰检测模块,如在检测到能量小于临界值的语音帧之前检测出下一波峰,根据第一波峰和第二波峰的参数更新第一波峰的参数,触发第三控制单元继续处理;否则将浊音段结束位置输出到音符切分模块;
所述音符切分模块用于以每一浊音段处理过程中输出的两个相邻位置为一个音符的起始和结束位置,完成对该浊音段的音符切分。
进一步地,上述音符切分装置还可具有以下特点:所述双峰值判定模块判断第一波峰和第二波峰是否满足双峰值检测的条件时,是判断第一波峰和第二波峰是否至少满足下列两条件之一:1)第二波峰峰值与第一波峰谷值之差和第一波峰的峰值与谷值之差的比值是否大于第一阈值,此时所述第一控制单元和第三控制单元分别记录的第一波峰和第二波峰的参数还包括峰值和谷值;2)所述双峰值判定模块是判断第一波峰和第二波峰的峰值位置 之间的语音帧个数是否大于第二阈值,此时,所述第一控制单元和第三控制单元分别记录的第一波峰和第二波峰的参数还包括峰值位置。
进一步地,上述音符切分装置还可具有以下特点:还包括一个一阶低通滤波器,用于对检测出的语音帧序列中各个语音帧的能量进行滤波,所述波峰检测模块和主控制模块基于该滤波后的语音帧能量进行处理。
进一步地,上述音符切分装置还可具有以下特点:所述第三控制单元还记录第二个波峰的起始位置,所述第四控制单元先用第二波峰的起始位置替换掉第一波峰的谷值位置,再输出替换后的该第一波峰的谷值位置。
进一步地,上述音符切分装置还可具有以下特点:所述第五控制单元根据第一波峰和第二波峰的参数更新第一波峰的参数时,是以第一波峰峰值和第二波峰峰值中的大值替换掉第一波峰的峰值,以该大的峰值后的一个谷值或两个谷值中的小值替换掉第一波峰的谷值,第一波峰的峰值位置和谷值位置为新的峰值和谷值对应的语音帧。
进一步地,上述音符切分装置还可具有以下特点:所述第一阈值为0.1825~0.3125,所述第二阈值和第三阈值为5~9。
由上可知,本发明在音符切分的过程中,进行抗干扰、有重点有层次的双峰值检测和引入了更有效的检测参数,提高了音符切分的准确率,为下一步转化为乐谱奠定了重要的基础。本发明切分音符结果准确,使用灵活,且操作简单。
具体实施方式
本发明应用于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):
其中,s(n)表示语音信号,N为信号帧长,一帧语音是20ms,经过8kHz采样,则N=160,t为时间延迟的样点,t在[0,N-1]范围内分为三个区域,在每个区域内隔点计算ρ(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 68
440.00HZ A5La5 ---MIDI 69
466.16HZ A5#La5# ---MIDI 70
MIDI乐谱需要音符信息,包括音符的长度和音符的音高均值。
音符的长度,是根据对浊音段进行音符切分时输出的两个相邻位置之间的语音帧个数得到的,这些位置可能是峰值起始位置、谷值位置或浊音段起始、结束位置。
音符的音高均值,是根据对浊音段进行音符切分时输出的两个相邻位置找到对应的音高曲线,计算该段曲线音高的平均值得到的。例如,输出的两个相邻位置为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中的A5La5,然后就可以采用事先通过十二平均律公式计算好的MIDI69表示。
综上所述,本发明可以应用于PC机及嵌入式系统,可以跟踪人声哼唱信号及某些电子乐器,通过时域自相关音高检测(Pitch Detection)算法和基于能量的音符分割使得系统占用资源较少,方法简单,使用方便灵活。