基于乐器演奏的乐音识别系统的研究

2011-12-29 00:00:00万景
人民音乐 2011年11期


  一、研究的启发及其意义
  让计算机听懂乐曲并自动生成谱表是我从小的愿望。前不久我仍看到父亲边听录音边记谱,听一段,记一句,有时一句需要听上几遍,才能记下来,这使得他老人家工作劳累,真想用所学的计算机专业知识去帮他解决如此繁杂的事情。另外,在我学习扬琴的过程中,也遇到类似的难题——在网上学习中国音乐学院扬琴教授项祖华和李玲玲的扬琴曲时,被他们谙熟动听的名曲演奏陶醉,希望找到相应的曲谱来练习,但搜来搜去并无结果,于是便开始研究识谱软件。
  酷我MP3伴侣是一款音乐识别软件。它应用音频指纹技术,根据旋律可准确识别歌名、歌手、专辑名等信息。这主要是针对在网上搜索海量的音乐文件,不具备识谱功能。目前,有一款曲谱编辑软件,但它只能识别电子琴这一种有MIDI音乐接口的音频,对MIDI文件可以转换简谱或五线谱。但对于其他乐器(钢琴或琵琶等民族乐器)产生的音频文件,就无法转换。比如从网上下载或录制的乐曲则无法转换并产生相应谱表。笔者将能提供这一功能的系统初步命名为基于乐器演奏的乐音识别系统,并开始了通过计算机程序设计与数据信号处理的学习和研究。
  此项研究对所有音乐创作领域的作曲人士和众多热爱音乐的人有着重大意义,也将随着这项研究的完成而节省大量的精力、时间、财力,从而提高工作效率。所以能够通过使用计算机程序来自动识别演奏或演唱的乐曲并自动完成乐谱创作,将会使音乐人创作效率得到很大提高,并能极大地激发创作灵感,改变目前因为手稿写乐谱的不便而导致创作效率低甚至影响灵感发挥的不良状况。乐音识别这一技术在音乐创作中有很重要的实用价值。
  二、国内外研究现状
  现有的乐音识别系统有很多,如《调音之王》弦乐器体系?穴包括提琴、吉它、古筝、三弦、琵琶、二胡等?雪,乐器声音测试,频谱,声音标准,检测,弦乐器学习的好帮手,是一个完整的自动化的乐音识别系统,但却没有乐谱自动生成功能;再有《乐音3.0》可通过外接MIDI音源、模拟MIDI键盘作曲,但对于除电子琴外的其他乐器演奏的音源,就无法产生相应的乐谱。
  2005年在《乐音识别方法及应用》①一文中提出能使计算机听懂乐器(如钢琴)的演奏并自动谱曲,即根据录入的钢琴演奏曲产生相应的五线谱表,如图1所示。另外,在2009年《乐音音符基频识别》②一文中,通过语音信号的短时能量和过零率来确定语音的端点以及分割音节,进而通过短时自相关函数法来提取基音周期。
  
  在研究乐音识别技术及应用的基础上,笔者提出目前该系统的不足之处:五线谱表中无小节线,也无终止符号,而且无法满足只懂简谱的广大用户的需求,更重要的是,此项研究没有继续完成,也没有投入使用。就此对以上问题展开研究,并用另一种有效可行的方法及算法加以验证,从而进一步改善原有的乐音识别系统。
  目前以乐音音符识别为目的,并完成自动乐曲创作的研究不多,有关乐音处理方面的研究大多局限在乐音的数字采样、滤波、音效处理、编辑等。在音符录入方面,则一般使用MDII键盘简单映射实现,并不涉及研究的乐音音符?穴音高?雪的识别。
  三、乐音识别系统
  基于乐器演奏的乐音识别的过程,是根据乐器演奏音频输入自动产生相应的音乐谱表?穴简谱或五线谱?雪,即通过一系列的信号和数据处理过程将原始音频信息转换成为符号表示的乐谱信息,从而实现乐音识别的功能。
  对乐器演奏信息的获取和处理有多种方法,可以是一个在线录制的乐曲,也可以自己录制。处理的主要目的是从音频文件中提取出表达音乐旋律的特征信号。对信号的处理过程使用时域方法、频域方法或时域频域相结合的处理方法进行音符分割、音高跟踪,得到旋律特征数据序列,再以特定的组织方式将旋律特征序列作为匹配谱表的输入,在提前录制好的单音符数据库中进行旋律特征匹配,从而产生相应的谱表。
  本文的工作面向乐音识别中乐器演奏信号处理,即对乐器演奏音频信号进行处理,获取旋律特征信息,并将旋律信息表示为一种合理的中间格式,可以直接或变换后用于不同的乐音识别系统,进行谱表的构造。
  乐器演奏音频处理方法
  对乐器演奏音频信号的处理方法可以采用一般对语音信号分析处理的方法, 但又有所不同:语音信号处理针对目的的不同,处理的重点与具体采用的方法也不同。我对乐器演奏音频处理的过程分为三个部分:
  1.预处理
  预处理部分包括录音、降噪、整流、低通滤波、计算短时帧能量等操作。一般使用声卡和麦克风进行录音采样来得到数字化的乐器演奏音频数据。乐器发声基频范围依据不同的乐器而不同,基音频串范围最宽的是钢琴,由27.5Hz—4136Hz以内,综合考虑系统所需的数据精度和计算复杂度,确定了预处理程序音频采集格式为22025Hz/8bit/momo,数字化后去除信号直流分量。
  目前,笔者对数字化的音频信息只做简单低通滤波,因为使用的是在线方式将优质的乐器演奏曲子录制了其中5秒的一段作为实验测试的音频数据。
  4e2a4f06fb0fa32ceb669ad68815774b第一步:录音
  可用Windows自带的“录音机”或专门的音频处理软件CoolEdit或Adobe Audition的录制即可。
  第二步:降噪
  在实际应用环境中,作曲人士大多使用现场录制乐器声音或在线录音作为输入数据。一般面对的条件是配置声卡的个人电脑和普通的麦克风,且无法避免环境噪声的干扰。所以,如果是现声录音,必须对输入信号做降噪处理。
  降噪的主要目的是为了有利于后续的音符分割和音高跟踪,可以用音频处理软件Cool Edit或Adobe Audition中的降噪功能简单而有效地对音频信号的噪声进行降噪处理。如果是在线录制的音频,由于质量高,不降噪也可。
  由于我们的关键目的是将乐器的乐音转换为乐谱,而乐音与乐谱的一些特性,决定了对录制的音频文件不需太高的要求,只要没有明显的噪声即可。
  第三步:二次处理
  音频信号进一步处理步骤:①对音频信号全波整流;②对整流信号进行低通滤;③计算短时帧能量。
  选择一个合适的帧长对音频信号进行分帧,得到一个二维矩阵frame(每行对应一帧数据,矩阵行数等于帧数,列数等于帧长)。计算每一个短时能量的公式如下:
  
  %计算门限
  E=sum?穴frame,2?雪/lf;
  T=2?觹?眼sum?穴E?雪/length?穴E?雪?演;
  G=gradient?穴E?雪;
  %计算能量梯度,选取上升快速的点,与高能条件结合,共同确定特征区域。
  Gm=1.5?觹{sum[abs?穴G?雪]/length?穴G?雪};
  2.利用音频特征点的检测实现音符的准确定位
  如何准确、有效地进行音符的准确定位(即音符分割), 是乐音识别系统中最困难,也是最为关键的问题。对于乐器演奏的音符分割的处理相对简化,可以采用语音识别端点检测类似方法。常用的端点检测方法有基于能量、基于能量与过零率、基于信息嫡、基于频域特征等。
  
  根据乐曲的旋律及对语谱图(如图2下半部分所示)的观察和分析,笔者发现:语谱图中表现出所有的音符的音调都表示出深色的纵向条纹。因此可以采用特征点检测的音符分割方法,使用时域、频域与最高能量相结合的方法,既简化计算过程,又可以比较有效而准确地进行音符分割。
  
  本系统中实验所用音频为普通扬琴演奏的一段练习曲(本文称为示范曲)。语谱图的横坐标是时间,纵坐标是频率,坐标点值为语音数据能量。由于是采用二维平面表达三维信息,所以能量值的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。
  首先采用基于能量跟踪的方法作为第一级,由于有效地进行了降噪处理,信号有较高的信噪比。这种情况下,通过计算信号的短时能量,就可以通过能量跟踪找到每个音符语音段的开始及结束时间。有了音符分割的数据,音高跟踪的工作也得以简化并更加有效。第二级的音符分割基于音高跟踪的结果得到,目的是把第一级没有分割开的连奏音符根据音高显著变化特征,即基音频率不同而进一步分割开来,这样,就由两级音符分割得到了每个独立音符的起始和结束时间?穴以帧序号表示?雪,由音高跟踪得到了每个音符的基音频率值。
  ①确定能量门限值
  一段乐音音频中高能的波峰有多个,高能帧通常是高能波峰的标志,也是音符的起点。选择一个合适的门限可以筛选出若干高能帧,即可确定出若干音频信号特征点(即音符的音高)。为使特征点选择方法用于多种音频,门限可取一个相对值:即取平均帧能量的若干倍作为能量门限,N是帧数;倍数β越大,得到的特征点就越少。
  能量门限的取值相当关键,若取得过大,则会漏掉某些弱音,若取得过小,则多出许多同音,这样的话,产生出来的乐谱
  就不理想了。因此结合乐谱中的最小音长,就可以解决。
  
  ②梯度门限选择
  利用帧能量变化的梯度可以确定能量的变化速度。使用梯度门限与能量门限结合可以使选择的重点更稳定。
  
  3.乐谱表示
  计算出两个特征点之间的距离(时间长短),就可以确定前一音符的时值,即音长(如表1所示,本文以90拍为例),将其暂存,再取出特征点所在频率,与音符频率对照表(如表2所示,本文以G调为例)对照,将得到的音符序列的音名和音长按照一定的组织结构将这些数据表示成中间格式,进行
  旋律表达,即可得到谱表。
  示范曲调号、拍号及速度:
  1=G 2/41=90
  四、系统目标
  通过采用基于Matlab的分析、处理、识别技术,并将分析处理识别结果封装成DLL文件,通过VB6.0调用,功能简单、界面直观、可靠性高。最后在用VB设计的应用程序界面上:先打开一个录制好的音频文件,其格式为:22050Hz采样率、16位单声道的Wave波形文件(扩展名为.wav)(其他格式的音频文件由于本系统目前还未扩展其功能,可先通过千千静听等一些音频播放或∑音频编辑软件方便转换),显示播放的声音波形(本文以G调的一段扬琴曲为例,预期结果如图3所示),可以单击“播放”按钮听乐音,单击“转换为乐谱”
  可以转换成相应的乐谱(五线谱与简谱均可)。
  
  下一步研究:本文提出了基于乐器演奏的乐音识别系统的研究方法及算法,并使用Matlab与VB语言结合设计出该系统的前半部分,接下来的工作是:续实现并完成其余功能,不断改善该系统,使之成为一个适合多种调式的、多功能的,适合各种乐器,甚至是基于演唱的乐音都能识别得更完善、更
  健全的自动乐谱生成系统。
  参考文献
  ?眼1?演王素立、高洁、孙新德《Matlab混合编程与工程应用》,北京:清华大学出版社2008年版。
  ?眼2?演缪天瑞《律学》,北京:人民音乐出版社1996年版。
  
  ①徐国庆、杨丹、王彬洁、文俊浩《乐音识别方法及应用》,《计算机应用》2005年第4期,第968—970页。
  ②吴晶晶、孟玲玲《乐音音符基频识别》,《电子测量技术》2009年第4期,第126—128页。
  
  万景 玉溪师范学院信息技术工程学院讲师(责任编辑 荣英涛)