武漢理工大學(xué) 袁 帥 熊紹潘 付天純
音樂歷史悠久,是人類情感的重要載體,是人類智慧的結(jié)晶。音樂記譜,是根據(jù)一段音樂寫出其相應(yīng)的樂譜。一般的樂音愛好者將樂譜演奏出音樂不是一件很困難的事情,但是反過來將音樂記錄成對應(yīng)的樂譜卻非常困難。手工音樂記譜,更是需要非常專業(yè)的樂理知識(shí)。基于Android 的自動(dòng)音樂記譜,就是讓移動(dòng)終端具有音樂家的這種記譜能力,而音高估計(jì)是自動(dòng)繪譜研究的核心。
音高估計(jì)有兩個(gè)基本任務(wù),一是對頻率分析并解析成音符,這可由樂理的相關(guān)知識(shí)得到[1],二是估計(jì)樂音的頻率,即基音周期。國內(nèi)有很多學(xué)者在基音周期的提取方面進(jìn)行了研究。高戈等提出了一種基音周期估計(jì)算法,以實(shí)現(xiàn)甚低碼率下的透明質(zhì)量語音編碼[2]。黃海亮等利用人工神經(jīng)網(wǎng)絡(luò)和動(dòng)態(tài)規(guī)劃算法提出了一種高精度的基音提取方案[3]。徐國慶等提出了一種音樂識(shí)別方法,為實(shí)現(xiàn)自動(dòng)作曲系統(tǒng)提供了較高的識(shí)別精度[4]。成新民等通過線性變換等方法將求取“最小谷值點(diǎn)”轉(zhuǎn)換為求取最大值,實(shí)現(xiàn)了精確的基音檢測[5]。翟景瞳等基于自相關(guān)處理和快速傅里葉變換(FFT)提出了一種的改進(jìn)的單音音高識(shí)別算法[6]。夏殿松等進(jìn)一步對平均幅度差函數(shù)(AMDF)和短時(shí)自相關(guān)函數(shù)(ACF)進(jìn)行研究[7]。
本文研究的主要內(nèi)容是,基于Android平臺(tái)的聽曲繪譜的研究及實(shí)現(xiàn),主要包括以下內(nèi)容。第一,選擇合適的音高提取算法,在保證音符識(shí)別效果的前提下,滿足移動(dòng)端的計(jì)算能力;其次,對由頻率轉(zhuǎn)換為音高的算法進(jìn)行研究,生成樂譜數(shù)據(jù);最后,對在Android平臺(tái)的樂譜表示系統(tǒng)進(jìn)行設(shè)計(jì)并實(shí)現(xiàn)聽曲繪譜功能。
聽曲繪譜系統(tǒng)的概念設(shè)計(jì)如圖1所示,音樂采集模塊使用Android的錄音設(shè)備進(jìn)行樂音輸入,并將音頻文件存入存儲(chǔ)器中,特征提取模塊獲取音頻文件,進(jìn)行特征頻率計(jì)算,由樂譜生成模塊進(jìn)行音符映射和小節(jié)劃分,形成樂譜數(shù)據(jù),最后將傳入樂譜顯示模塊中進(jìn)行顯示。同時(shí)樂譜優(yōu)化模塊提供對自動(dòng)生成的樂譜的校正功能,以提高聽曲繪譜系統(tǒng)的實(shí)用性。
圖1 聽曲繪譜系統(tǒng)模塊設(shè)計(jì)
在Android系統(tǒng)上實(shí)現(xiàn)聽曲繪譜的基本流程,主要是錄音采集,基音周期提取,頻率音高映射和樂譜在UI界面顯示,如圖2所示。
圖2 聽曲繪譜系統(tǒng)算法流程圖
在錄音的過程中,將錄音緩存數(shù)據(jù)以四分之一節(jié)拍時(shí)值的長度分發(fā)到圖1中的特征提取模塊,進(jìn)行基音周期提取,然后由樂譜生成模塊進(jìn)行頻率音高映射,判定該四分之一節(jié)拍的音符值,存入樂譜數(shù)據(jù)中。由樂譜顯示模塊進(jìn)行樂譜數(shù)據(jù)的再處理和實(shí)時(shí)顯示新生成的樂譜數(shù)據(jù)。
基音周期提取算法是特征提取模塊的核心,所選取的基音周期提取算法需要進(jìn)行時(shí)間復(fù)雜度和基音周期提取準(zhǔn)確率上的權(quán)衡,以達(dá)到在Android移動(dòng)終端的計(jì)算能力之內(nèi)進(jìn)行準(zhǔn)確的音高判別,進(jìn)而實(shí)現(xiàn)實(shí)時(shí)的樂譜繪制效果。在文獻(xiàn)[8]中提到了短時(shí)平均幅度差函數(shù)基音周期提取法在計(jì)算上要比短時(shí)自相關(guān)函數(shù)法更為簡單,并且也更易于實(shí)現(xiàn)。
設(shè)模塊輸入語音信號(hào)的時(shí)間序列為x(n),首先消去語音信號(hào)的直流分量,再進(jìn)行幅值歸一化處理。在之后的短時(shí)時(shí)域分析中,經(jīng)加窗和分幀處理后得到第幀的語音信號(hào)xi(m),定義xi(m)的短時(shí)平均幅度差函數(shù)Di(k)為:
其中,下標(biāo) i 表示第 i 幀,每幀長度表示為N。對于周期性樂音信號(hào),Di(k)呈現(xiàn)出與樂音周期相一致的周期特性,即在樂音的基音周期的各個(gè)整數(shù)點(diǎn)上達(dá)到谷值。根據(jù)Di(k)的這種特性,可以估計(jì)出樂音信號(hào)的基音周期。
在使用平均幅度差函數(shù)檢測基音周期時(shí),是進(jìn)行谷值點(diǎn)搜尋,而尋求峰值更容易計(jì)算。在文獻(xiàn)[5,8]中,提出了一種通過線性變換(公式)把尋找谷值改為尋找峰值的辦法:
經(jīng)分析可以發(fā)現(xiàn),平均幅度差函數(shù)的周期性都發(fā)生在谷值點(diǎn)的位置上,而且前兩個(gè)谷值相接近,容易在基音周期計(jì)算中誤判為基音周期的倍頻。而在MAMDF中,把谷值變換成峰值,并且前兩個(gè)峰值的大小明顯區(qū)分出來了,可以有效減少誤判。
聲音是由振動(dòng)產(chǎn)生的,聲音的傳播形式是具有一定頻率的聲波。我們所聽到的各種周期性樂音,如鋼琴音、笛音等,在演奏中具有相同的頻率,在樂譜中的表示即為音高。
在音樂的表示系統(tǒng)中,通常使用的是十二平均律,又被稱作“十二等程律”,是把一組音(一個(gè)八度)分成十二個(gè)半音音程的律制,各相鄰兩個(gè)音律之間的頻率之比完全相等,即將八度的音程按頻率等比例地分成十二等份[1]。以A4與A5為例,A4與A5之間的頻率比是1:2,其間被分為12個(gè)半音,每隔半音間的頻率之比都為半音比。可得由A4計(jì)算出任意音高頻率的方程[9]:
根據(jù)將方程進(jìn)行逆運(yùn)算,可得方程:
其中,f1為1939年國際標(biāo)準(zhǔn)協(xié)會(huì)通過的現(xiàn)行的國際標(biāo)準(zhǔn)音高A4=440Hz,f 2為計(jì)算出來的樂音頻率,p為半音比,n為所求的音高與標(biāo)準(zhǔn)音高A4的距離。
我們選擇音樂簡譜[10]作為我們的目標(biāo)樂譜表示系統(tǒng),并對其在Android移動(dòng)終端上的表示進(jìn)行設(shè)計(jì)。
為了能夠?qū)喿V表示進(jìn)行設(shè)計(jì),首先構(gòu)建簡譜表示的簡單模型。在簡譜表示中,對于每個(gè)音符,其具體的音符表示有:,依次代表低音、中音和高音的四分之一拍、二分之一拍、四分之三拍和一拍,這樣設(shè)計(jì)的目的是,便于將按時(shí)間序列進(jìn)行差別得到的音高序列轉(zhuǎn)換成對應(yīng)的樂譜。
將以上音符模型按時(shí)值由短到長,音高由低到高從零開始進(jìn)行編號(hào),形成一套完成的音符映射系統(tǒng),便于樂譜顯示模塊調(diào)用。將由頻率音高映射得出的樂譜數(shù)據(jù)進(jìn)行大調(diào)轉(zhuǎn)換,然后按設(shè)計(jì)的音符映射體系進(jìn)行映射,從音符集合中取出對應(yīng)的音符表示,輸出至Android移動(dòng)終端的屏幕上。
當(dāng)樂譜繪制完成后,根據(jù)用戶設(shè)定的每拍的時(shí)長和每小節(jié)的拍數(shù),進(jìn)行自動(dòng)小節(jié)劃分,添加小節(jié)線,并將連續(xù)相同的音符進(jìn)行合并,按合并后的時(shí)長更新其音符表示,形成完整的樂譜,圖 1中的樂譜優(yōu)化模塊提供對生成的樂譜進(jìn)行音符的增刪改操作,以提取最終輸出樂譜的正確性。
本文研究的主要內(nèi)容是,基于Android平臺(tái)的聽曲繪譜的研究及其實(shí)現(xiàn),主要包括以下內(nèi)容。第一,選擇改進(jìn)的平均幅度差函數(shù)法進(jìn)行基音周期提取,可以在Android移動(dòng)終端的計(jì)算能力之內(nèi),實(shí)時(shí)的進(jìn)行準(zhǔn)確音高判別。第二,對頻率到音高的映射關(guān)系進(jìn)行了總結(jié)。第三,對音樂簡譜進(jìn)行建模表示,并設(shè)計(jì)出一套適合于在Android系統(tǒng)上使用的簡譜表示系統(tǒng)。工作的不足之處在于,所設(shè)計(jì)的簡譜格式并不完備,僅考慮了樂音的音高和時(shí)值,未考慮音樂的節(jié)奏問題,并且只實(shí)現(xiàn)了只有一種樂音存在的自動(dòng)繪譜,而針對多音音樂的自動(dòng)繪譜問題仍有待研究。
[1]李重光.音樂理論基礎(chǔ)[M].人民音樂出版社,2006.
[2]高戈,李明,胡瑞敏.基音周期估計(jì)算法研究[J].聲學(xué)學(xué)報(bào),2003(06)∶540-544.
[3]黃海亮等.一種高精度的基音提取方案[J].計(jì)算機(jī)工程,2004(S1)∶343-345+372.
[4]徐國慶等.樂音識(shí)別方法及應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2005(04)∶968-970.
[5]成新民,曾毓敏,趙力.一種改進(jìn)的AMDF求取語音基音的方法[J].微電子學(xué)與計(jì)算機(jī),2005(11)∶ 164-166+169.
[6]翟景瞳,王玲,杜秀偉.改進(jìn)的音高識(shí)別算法[J].計(jì)算機(jī)工程與應(yīng)用,2009(20)∶228-230+242.
[7]夏殿松,胡淼,洪夏?。环N基于AMDF和ACF的基音周期提取算法研究[J].軍事通信技術(shù), 2009(01)∶27-31.
[8]宋知用.MATLAB在語音信號(hào)分析與合成中的應(yīng)用[M].北京航空航天大學(xué)出版社,2013.
[9]編曲資源,音高與頻率的對應(yīng)關(guān)系,2016.
[10]董麗麗,鄧小峰.讀譜與樂理[M].武漢理工大學(xué)出版社,2007.