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