王琮 王同喜 余華平 向華
摘要:該文針對應用于音樂領(lǐng)域的實時音頻處理方法進行了詳細研究。在本課題中,制作了一個演示模型用于展示音頻處理的過程,完成了使用Android設備對聲音數(shù)據(jù)的采集、處理、分析、降噪等工作。本篇論文簡單地分析了各種窗函數(shù)對傅立葉變換結(jié)果的影響,除此之外,還對時域頻域轉(zhuǎn)換進行了較為詳細的分析,對頻域譜圖進行了詳細的描述,程序?qū)崿F(xiàn)了對鋼琴各個按鍵頻率幅值的提取以及鍵音持續(xù)時間的計算。通過本課題成果,能夠?qū)崿F(xiàn)在Android手機上,通過手機本身獲取音頻數(shù)據(jù)、處理音頻數(shù)據(jù),并得到鋼琴演奏者在一個時間片段內(nèi)按下的鋼琴鍵、鍵音持續(xù)時長等數(shù)據(jù)。這些數(shù)據(jù)在被獲取之后,將交由“評價模型”進行比對評價,得到鋼琴演奏分析的相關(guān)數(shù)據(jù)和結(jié)果。最后,本文對設計中所遇到的難題進行了重點介紹、分析并提出解決辦法,對課題實驗結(jié)果進行定性分析并得出結(jié)論。
關(guān)鍵詞:聲音;時域;頻域;傅立葉變換;FFTW;音頻處理
中圖分類號:TP31? ? ? 文獻標識碼:A? ? ? 文章編號:1009-3044(2019)02-0268-03
近年來,隨著社會的進步,經(jīng)濟的迅猛發(fā)展,全民素質(zhì)的不斷提高,越來越多的家長開始注重孩子早期的音樂教育,繼而產(chǎn)生了一支頗為壯觀的學童大軍。越來越多的家長希望自己的孩子能夠在課余時間放松自己的同時學習一下音樂知識來培養(yǎng)孩子的創(chuàng)造力,訓練其專注能力和情感表現(xiàn)力,增強社會交往能力,打造孩子樂觀向上、健康自信的品格[1]。但往往由于缺乏德才兼?zhèn)涞慕處熁蚣议L本身缺乏專業(yè)知識等現(xiàn)實因素苦于無法對孩子進行很好的指導。
在國內(nèi)音樂教育領(lǐng)域內(nèi),很多非音樂專業(yè)學生在完成中國業(yè)余考級后,面對日趨增長的學業(yè)壓力和工作壓力,基本很少有專業(yè)老師輔導學習的機會,于是在課余時間選擇了通過自學的方式放松自己,但卻往往會出現(xiàn)無法對自己的水平做出正確評估、標準分析以及不知道如何提高演奏能力等問題。
本項目基于以上背景應運而生,志在打造出一款應用在音樂教學、指導領(lǐng)域的手機應用APP,通過系統(tǒng)內(nèi)置樂器演奏水平分析評價系統(tǒng),在線專家實時評價、反饋機制等具體方法來減輕各種樂器教師的教學壓力,指導學生自學,為我國各種樂器教學解決一系列由于師資力量不夠完善而出現(xiàn)的問題。
本文則傾向于樂器演奏水平分析軟件的設計與實現(xiàn)過程中的音頻處理部分,且以鋼琴為例。
現(xiàn)有技術(shù)存在以下缺陷:
1) 當前學習鋼琴過程中,評價一位學生的鋼琴演奏是否存在問題,一般采取由專業(yè)老師在一旁聆聽指導的方法,而由于此種方法需要老師進行一對一輔導,耗費大量人力、時間資源。
2) 應用市場上存在一些針對電子鋼琴的教學應用,而此類應用的使用范圍只能針對電子鋼琴,應用范圍狹窄,而且只能鋼琴按鍵鍵位進行指導,不具備完整的分析評價技術(shù),無法處理鋼琴在演奏過程中的多種問題。
3) 網(wǎng)絡上存在一些對已經(jīng)彈奏完成的錄制音頻處理分析的方法,如劉樂的《鋼琴演奏評價系統(tǒng)研究[2]》,此方法不能夠做到實時處理,無法對學習者進行實時指導,效果較差。
1 主要工作
1.1 主要研究內(nèi)容
傅立葉變換:FFTW ( the Faster Fourier Transform in the West) 是一個快速計算離散傅里葉變換的標準C語言程序集,其由MIT的M.Frigo 和S. Johnson 開發(fā)??捎嬎阋痪S或多維實和復數(shù)據(jù)以及任意規(guī)模的DFT。FFTW 通常比目前其他開源Fourier變換程序都要快,本文使用的版本為fftw-3.3.5。
本文的重點是將時域數(shù)據(jù)經(jīng)過加窗周期延拓之后再利用傅立葉變換實現(xiàn)時域到頻域的轉(zhuǎn)換,對頻域數(shù)據(jù)進行分析處理。
本文研究的內(nèi)容主要有以下幾個方面:
1) 樣本數(shù)據(jù)采集:根據(jù)手機采樣率、采樣位數(shù)、通道數(shù)、最優(yōu)采樣時間確定樣本數(shù)據(jù)。既要保證分辨率又要保證實時性,因此需要研究最佳采樣時間來確定樣本。
2) 加窗與周期延拓:對樣本數(shù)據(jù)加Hanning窗、費杰窗等多種窗函數(shù),并周期延拓,分析不同窗函數(shù)的效果以及延拓方法對傅立葉變換結(jié)果頻域圖的影響。
3) 時域頻域轉(zhuǎn)換:利用FFTW變換庫實現(xiàn)FFT變換。研究FFT結(jié)果的物理意義,學習頻域譜圖的對應關(guān)系。
4) 降噪處理:對頻域數(shù)據(jù)分析,將干擾數(shù)據(jù)去除。降低實驗場合的噪聲對實驗的影響,去除實驗過程中不必要的數(shù)據(jù)。
5) 音頻數(shù)據(jù)分析技術(shù)。學習音頻二進制數(shù)據(jù)的處理技術(shù),通過變換采樣數(shù)據(jù)的數(shù)據(jù)類型分析不同類型的數(shù)據(jù)對實驗結(jié)果的影響。
1.2 主要解決思路
1) 硬件設備對聲音的采樣率,不同硬件是不同的,但每個設備自身都有其固定的值:fs (采樣率) 單位 Hz(赫茲)。除此之外,采樣位數(shù)也很重要,一般設備都具備兩種模式,16bit模式和8bit模式,16bit模式音頻較8bit模式音頻擁有更高的清晰度,采樣結(jié)果更利于數(shù)據(jù)處理與計算,因此課題中主要采用16bit模式。
2) 硬件設備在采樣過程中的擁有一個最短采樣時間:t 單位:s(秒),即硬件設備每t秒采樣一次,由此可以利用t*fs計算出一次采樣得到的樣本數(shù)。
3) 對采集到的采樣樣本進行加Hanning窗:
[Hn=0.5-0.5*cos2πnN-1? ? ? ? (0≤n (1) 其中n為單個樣本,N為窗口大小。由于樣本數(shù)是有限的,可以對加窗后的數(shù)據(jù)進行周期延拓,進而得到理想數(shù)量級的樣本。 4) 使用FFTW變換庫對加窗后的樣本進行實數(shù)到實數(shù)的FFT變換,得到double數(shù)組M,M數(shù)組的長度為L。則由L、fs可以計算出f(Hz)的頻率在數(shù)組M中對應的位置,并得到頻域譜圖。 5) 由于噪聲干擾,在處理頻域譜圖過程中忽略高度較小的頻率進行降噪[3],對具有波峰特征的位置進行處理,得到并記錄該點的頻率,繼而處理所有波峰。對諧波進行舍棄處理,對成比例的鍵音頻率作歸并處理。 2 系統(tǒng)設計 2.1 系統(tǒng)運作流程 系統(tǒng)總體流程圖[4]如圖1所示,首先,由用戶打開手機,程序開始運行,打開麥克風,程序開始采樣獲得采樣數(shù)據(jù),然后程序調(diào)用窗函數(shù)對采樣樣本進行加窗與周期延拓,獲得有效樣本,有效樣本將由JNI組件遞交給FFTW庫進行FFT變換處理,獲得頻譜數(shù)據(jù)由JNI返回給程序,程序需要對此樣本作兩部分處理,首先,界面控件將數(shù)據(jù)進行抽樣繪圖,用于向用戶展示實時狀態(tài),方便人機交互,另一方面,程序啟動線程對數(shù)據(jù)進行分析,獲得按鍵頻率對應的幅值,分析該按鍵是否符合閾值,輸出結(jié)果日志,程序進入下一次采樣與分析,獲得鍵音持續(xù)時間。 由于FFT變換以及數(shù)據(jù)處理都是耗時比較高的操作,因此需要將數(shù)據(jù)歸入一個待處理隊列,當一組數(shù)據(jù)處理完成,另一組數(shù)據(jù)自動加入處理流程,而要平衡數(shù)據(jù)處理與采樣時間,設定一個合適的緩沖區(qū)間是本設計的一個重要環(huán)節(jié)。 2.2 演示模型 在本設計中,需要實現(xiàn)一個演示demo,具體模型如下: 1) 展示模型,一個用于實時展示聲音頻率譜圖的模型,使用JAVA中的Canvas進行繪圖,當系統(tǒng)完成運算時,會得到一個長度為16000的double數(shù)組,將此數(shù)組進行抽樣繪制在一個高600長1000的面板上。由于一維傅立葉變換的結(jié)果是對稱的,所以只需要取前8000個數(shù)據(jù),每8個數(shù)據(jù)進行一次抽樣即可獲得1000個數(shù)據(jù)。 2) 數(shù)據(jù)采樣,Android系統(tǒng)監(jiān)聽麥克風使用RecordAudio完成對音頻流的獲取,使用單通道、8000Hz采樣率,每40ms采樣一次得到320個數(shù)據(jù)。 3) 加窗與周期延拓,當計算機在進行測試信號處理時,不可能對無窮長度的信號進行處理運算,所以會取得有限的時間數(shù)據(jù)片段進行分析,比如在上方獲得的320個數(shù)據(jù),將這些數(shù)據(jù)進行周期延拓處理得到了虛擬的無限長度的信號,然后對此信號進行傅立葉變換處理、分析,但是當實際信號在被截斷的時候,數(shù)據(jù)前后關(guān)聯(lián)性被破壞,頻譜也會因此發(fā)生畸變,原本應該集中在f(0)處的能量被分散到了兩個較寬的頻帶中了,即頻譜的能量泄露現(xiàn)象。而為了減少這種能量泄露,可以采用不同的截取函數(shù)對原始的信號進行截斷,這種截斷函數(shù)就被稱為窗函數(shù)。不同的窗函數(shù)對頻域譜圖的影響是不同的,因為不同的窗函數(shù)產(chǎn)生泄漏的大小是不一樣的,頻率的分辨能力也不一樣,信號的截斷發(fā)生泄露現(xiàn)象,而FFT算法計算頻域又會產(chǎn)生所謂的柵欄效應,理論上講,能量泄露與柵欄效應這兩種誤差都是不能絕對消除的,但可以通過不同的窗函數(shù)對他們進行抑制,比如,矩形窗主瓣變窄,旁瓣變大,頻率識別的精度最高,但幅值識別度最低等。在本設計中,窗函數(shù)的研究與選取是至關(guān)重要的一步。 4) FFT變換,將采樣與周期延拓之后的信號存放在一個長度為16000的double數(shù)組中,通過Java Native提供的接口交給FFTW進行處理并返回一個長度為16001的double數(shù)組,該數(shù)組的第160001個數(shù)據(jù)為這個數(shù)組中的最大值。 5) 繪圖,JAVA程序在得到返回數(shù)據(jù)之后,抽樣繪制頻域圖。 6) 數(shù)據(jù)可用性分析,分析鋼琴頻率各個鍵的頻率在該數(shù)組中的位置,根據(jù)其幅度值是否在閾值范圍內(nèi)判定該值是否應被認可。 7) 按鍵次數(shù)統(tǒng)計獲得按鍵的持續(xù)時間,由于在本算法中,每40ms采樣一次,因此只需要統(tǒng)計一個按鍵響應了多少次,即可確定其持續(xù)時間。其幅度值對應響度。 3 程序測試 3.1 計算機模擬定頻音波測試 在正式測試[5]之前先使用計算機模擬固定頻率的正弦波聲音對程序進行測試,需要使用到軟件【SineGen定頻wav生成器.exe】。測試結(jié)果如下: 1) 模擬鋼琴70號鍵#F(bG)_6音測試3秒,測試結(jié)果如表1所示: 符合要求。 2) 模擬鋼琴85號鍵A_7音測試3秒,測試結(jié)果如表2所示: 符合要求。 3) 模擬鋼琴63號鍵B_5音測試3秒,測試結(jié)果如表3所示: 符合要求。 4) 模擬鋼琴42號鍵D_4音測試3秒,測試結(jié)果如表4所示: 出現(xiàn)6次43號混音,大致符合要求。 結(jié)論:測試程序在計算機模擬定頻測試過程中,因鋼琴最低八度和最高八度聲音振幅太小無法被手機準確監(jiān)聽到,導致結(jié)果出現(xiàn)錯誤,而在其他區(qū)域的鍵均能準確監(jiān)聽到,但是個別鍵易出現(xiàn)混音誤差。 3.2 機械鋼琴測試 使用一首約18次按鍵的曲子對程序進行3次測試,其中一次測試結(jié)果如表5所示。 共監(jiān)聽到16組數(shù)據(jù),結(jié)果基本符合要求。 結(jié)論:在使用機械鋼琴對程序進行測試時,由于涉及機械波諧波處理的部分,技術(shù)不夠成熟,降噪方法不夠優(yōu)秀,導致個別按鍵監(jiān)聽不到或鍵音持續(xù)時間計算不夠精確。但整體來看,基本能夠滿足現(xiàn)階段的需求。 4 總結(jié) 本文提出了移動設備上樂曲演奏分析軟件的音頻實時處理方法,該方法可以運行在絕大多數(shù)手機上,對手機配置的要求不高。同時該方法能夠應用或遷移應用于很多樂器的評價分析模型中。 參考文獻 [1]王瑋.兒童需要什么樣的教育[J].連云港文學·校園美文,2014,(6):60. [2]劉樂.鋼琴演奏評價系統(tǒng)研究[D].清華大學,2005. [3]侯春琳.關(guān)于聲音降噪處理[J].遼寧廣播電視技術(shù),2010,(2):17-18. [4]劉超.程序交互執(zhí)行流程圖及其測試覆蓋準則[J].軟件學報,1998,9(6). [5]鄭人杰,計算機軟件測試技術(shù)[M].清華大學出版社,1992.