湖南省長沙師范學院初等教育系 陳 麗 羅湘娟 劉 蘇
基于傅里葉變換的兒歌音樂合成研究
湖南省長沙師范學院初等教育系 陳 麗 羅湘娟 劉 蘇
本文探討了傅里葉變換在音樂合成中的應用,揭示了音樂信號是由一系列振幅和頻率不一的正弦波疊加且帶有不同包絡修飾形成的,進而采用曲線擬合來定音樂的包絡。以傅里葉變換來研究兒歌的音樂合成,從數學的角度生動直觀地展示了數學與兒童音樂結合的無窮魅力。
傅里葉變換;音樂合成;包絡
通過廣泛地研究近年來說話人識別中常用的特征參數和建模方法,在處理語音數據時,主要提取基于 Mel 頻率的倒譜系數(MFCC)作為語音的特征參數,高斯混合模型(GMM)作為語音描述的模型。在研究說話人識別和高斯混合模型(GMM)在流行音樂中運用的基礎上,提出用曲線擬合的方法獲得兒童音樂的包絡,然后將得到的音樂信號進行快速傅里葉變換(FFT)計算其頻譜,從而獲得音樂發音的諧波,在MATLAB軟件中用wavplay語句實現傅里葉級數合成音樂的數字信號。
通過觀察發現音樂中伴奏部分和歌唱部分數據的譜分布明顯不同,由于人聲帶的快速振動,歌唱聲音的譜幾乎總是諧波,并且在頻譜的低頻和中頻部分,基頻的整數倍頻率處能量通常較大.與歌唱聲音相比較,伴奏聲音突出的諧波較少,其能量分布范圍也更廣。聲音是氣壓隨著時間t的波動行為,是一種隨著時間t變化的連續信號,音樂是靠聲音發出的,是一系列振幅和頻率不一的正弦波疊加形成的。為了得到波形音頻文件,可以使用音頻轉化軟件將其他格式的音頻轉化成波形音頻,在數學建模領域中,用MATLAB語言wavread讀出音樂,用曲線擬合的方法獲得音樂的包絡,通過傅里葉變換獲得音樂的頻譜圖,分析頻譜圖獲得音樂的諧波,最后實現音樂的合成。
根據《兩只老虎》第一小節的簡譜和十二平均律計算出該小節每個樂音的頻率,在MATLAB中生成幅度為1,抽樣頻率為8kHz的正弦信號表示這些樂音,用sound播放合成的音樂。曲調為C的兩只老虎的簡譜為 |1231|1231|345-|345-|,因此可以得到每個樂音對應的頻率分別1=262.63Hz,2=263.66Hz,3=329.63Hz,4=349.23hZ,5=292Hz。每小節有四拍,一拍的時間是0.5s,因此各樂音的持續時間為1→0.5,2→0.5,3→0.5,1→0.5,1→0.5,2→0.5,3→0.5,1→0.5,3→0.5,4→0.5,5→1,3→0.5,4→0.5,5→1。在MATLAB中編寫以下程序,就可以完成兩只老虎的音樂合成:
clear;clc; fs=8000; f=[262.63 293.66 329.63 262.63 262.63 293.66 329.63 262.63 329.63 349.23 392];time=fs*[1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1/2,1,1/2,1/2,1]; N=length(time);east=zeros(1,N);n=1;for num=1∶N t=1/fs∶1/fs∶time(num)/fs;
G=zeros(1,time(num));G(1∶time(num))=exp(1∶(-1/time(num))∶1/8000);east(n∶n+time(num)-1)=sin(2*pi*f(num)*t).*G(1∶time(num)); n=n+time(num);end sound(east,8000);plot(east);
為了分析wave2proc的基波和諧波,可以對wave2proc進行傅里葉變換,利用MATLAB中快速傅里葉變換函數fft可以看出包絡,但是非常不明顯,因此將抽樣頻率由NFFT=2^nextpow2(length(wave2proc))改為NFFT=8^nextpow2(length(wave2proc)),雖然頻域的抽樣頻率提高了很多,但是得到的包絡依然不精確,這是因為wave2proc是周期函數,要想顯示出離散化程度高的幅值譜,就要增加wave2proc的周期性,即讓wave2proc在時域重復多次后再進行傅里葉變換。利用repmat函數可以將wave2proc在時域重復,再經過傅里葉變換可以看出幅值譜的離散化程度已經非常高了。wave2proc的基頻為329.1Hz,幅值為0.05401,高次諧波幅值分別為:諧波2是0.07676,諧波3是0.04841,諧波4是0.0519,諧波5是0,諧波6是0.005709,諧波7是0.01923,諧波8是0.006741,諧波9是0.007326。 將音頻信號導入后得到的是一個向量,它包含了這段音樂的所有信息,要自動分析這段音樂的音調,就需要將每個音調對應的點進行傅里葉變換得到其幅值譜,在幅值譜上找到第一個幅值較大的極大值點,該點對應的就是該音調的基頻,得到基頻后就可以得到高次諧波的幅值。為了使對每個音調進行傅里葉變換后得到的幅值譜離散程度高,應該將每個音調的數據在時域上重復多次,由于這些點都是直接采集的,沒做處理,因此其重復次數應該足夠大才能體現出較強周期性,本實驗采用重復1000次,若所有點的幅值都小于0.02,那么用0.015作為幅值的限定條件,這樣就將音調基頻確定出來了。為了去頂節拍,可以將確定出的基頻的誤差設為 1Hz,程序確定的基頻為200Hz,那么k次諧波對應的頻率范圍是k*(200-1)到k*(200+1),在這個區間中繼續找幅值的極大值點就是k次諧波對應點。
利用傅里葉變換分析提取了這些音頻信號對應的基頻和各次諧波相對應的幅值,再用wavplay語句對合成音樂進行了播放,合成了完整的一首兒歌。
[1]基于數學建模的數學實驗[M].北京: 中國鐵道出版社,2014.
[2]李麗娟.基于高斯混合模型流行音樂中歌唱部分的智能檢測.小型微型計算機系統,2009.
陳麗(1984-1),女,漢族,湖南長沙人,碩士,助教,主要研究方向:概率論與數理統計】