摘 要:本文通過(guò)對(duì)聲音文件及音頻和音調(diào)音量的量化分析,傅立葉變換,對(duì)聲音、音頻、音調(diào)、音量的量化處理,編程實(shí)現(xiàn)了一種聲音文件圖形化過(guò)程。
關(guān)鍵詞:音頻;音調(diào);圖形
中圖分類號(hào):TP391.41
現(xiàn)實(shí)世界中,聲音是看不見(jiàn)摸不到的。它是一種在空氣中傳播的無(wú)形波,對(duì)聲波波形進(jìn)行采樣后,利用模擬數(shù)字的轉(zhuǎn)換技術(shù),對(duì)形成的聲音文件進(jìn)行分析量化,就可以在屏幕上實(shí)時(shí)地畫(huà)出其形狀。這個(gè)完整的過(guò)程是一個(gè)復(fù)雜的過(guò)程,本文就這種過(guò)程的實(shí)現(xiàn)中的一個(gè)環(huán)節(jié)進(jìn)行分析,闡述一個(gè)簡(jiǎn)單的聲音的圖形化描述,并利用編程語(yǔ)言給出了示例的計(jì)算機(jī)程序?qū)崿F(xiàn)。
聲音文件的圖形化描述,其本質(zhì)上是以圖形化的方式來(lái)還原聲音文件所記錄的原始采集信號(hào)。而圖形化波形顯示卻是以圖形化的方式還原聲音文件所記錄的聲音信號(hào)。
聲音文件一般分為:音頻、音調(diào)和音量等。如何對(duì)這些進(jìn)行量化描述,是一個(gè)要解決的問(wèn)題。
1 聲音文件的結(jié)構(gòu)及音頻音調(diào)分析
聲音文件中記錄聲音原始信息,因此,理論上任何可以還原聲音的文件都可以作為圖形顯示的信息源。聲音的記錄方式有多種形式,最簡(jiǎn)單而又最能保持聲音本色的方法是直接記錄波形。
1.1 音調(diào)
基頻(fundamental frequency),指當(dāng)發(fā)聲體由于震動(dòng)而發(fā)出聲音時(shí),聲音一般可以分解為許多單純的正弦波,也就是說(shuō)所有的自然聲音基本都是由許多頻率不同的正弦波組成的,其中頻率最低的正弦波即為基音,而其他頻率較高的正弦波則為泛音。
音調(diào)(pitch)在音樂(lè)領(lǐng)域里指的是人類心理對(duì)音符基本頻率的感受。
基頻與音調(diào)存在一個(gè)轉(zhuǎn)換關(guān)系:
1.2 聲音的量化PCM(PulseCode Modulation)
在數(shù)字信號(hào)處理中,量化是指將信號(hào)的連續(xù)取值(或者大量可能的離散取值)近似為有限多個(gè)(或較少的)離散值的過(guò)程。量化主要應(yīng)用于從連續(xù)信號(hào)到數(shù)字信號(hào)的轉(zhuǎn)換中。連續(xù)信號(hào)經(jīng)過(guò)采樣成為離散信號(hào),離散信號(hào)經(jīng)過(guò)量化即成為數(shù)字信號(hào)。注意離散信號(hào)并不需要經(jīng)過(guò)量化的過(guò)程。信號(hào)的采樣和量化通常都是由ADC實(shí)現(xiàn)的。
CD音頻信號(hào)就是按照44110Hz的頻率采樣,按16位元量化為有著65536(=2^{16})個(gè)可能取值的數(shù)字信號(hào)。
聲音的量化就是將模擬聲音的波形轉(zhuǎn)換為數(shù)字,采樣值的二進(jìn)制位數(shù)決定了量化的精度。量化的過(guò)程就是先將整個(gè)幅度劃分成有限個(gè)小幅度(量化階距)的集合,把落入某個(gè)階距內(nèi)的樣值歸為一類,并賦予相同的量化值。
音頻文件中存儲(chǔ)的一般都是壓縮過(guò)的PCM數(shù)據(jù),經(jīng)過(guò)解碼后就變成了可處理的PCM數(shù)據(jù)。
1.3 傅立葉變換
傅里葉變換是一種線性的積分變換,通常在將信號(hào)在時(shí)域和頻域之間變換時(shí)使用。就聲音音調(diào)識(shí)別來(lái)說(shuō),傅立葉變換可以將以時(shí)間為自變量的振幅函數(shù)vol(t)變換到以頻率為自變量的振幅函數(shù)vol(f)。
1.4 音調(diào)的識(shí)別流程
規(guī)定一個(gè)Δt,假設(shè)在Δt時(shí)間段內(nèi),音調(diào)是不變的.對(duì)vol(t)進(jìn)行分割,分成[0,Δt],[Δt,2Δt] … [t-Δt,t]多個(gè)區(qū)間.分別對(duì)vol(t)的多個(gè)區(qū)間進(jìn)行傅立葉變換,得出頻率分布譜,找到最大振幅對(duì)應(yīng)的頻率(一般情況下音量最大的頻率即為基本頻率)。更好的方法則是利用基本頻率與音調(diào)變換關(guān)系,對(duì)得出來(lái)的頻率進(jìn)行變換,得到的pitch(t),即為聲音的音調(diào)在變化譜線。
這種變形的傅立葉變換即為短時(shí)傅立葉變換能夠觀察出信號(hào)瞬時(shí)頻率的信息。
2 編程實(shí)現(xiàn)圖形化過(guò)程
function pitch()
//讀取音頻文件
[stream, sample_rate] = audioread('test.wma');
// 處理左邊聲道
stream_left = stream(1:length(stream),1);
//假定4096個(gè)取樣點(diǎn)內(nèi),音調(diào)不變。大約0.1s
frame_size = 4096;
//獲取音頻幀數(shù)
frame_count = floor(length(stream_left) / frame_size);
pitch = zeros(1, frame_count);
for i = 1 : frame_count
//區(qū)間
pbeg = (i - 1) * frame_size + 1;
pend = i * frame_size;
stream_sub = stream_left(pbeg : pend);
fft_result = fft(stream_sub, frame_size);
[~, frequency] = max(abs(fft_result));
pitch(i) = ceil(69 + 12 * log(frequency * sample_rate /frame_size / 440) / log(2));
end
pitch = medfilt1(pitch, 8);
plot(1 : frame_count, pitch);
end
其中,test.wma是用系統(tǒng)自帶錄音工具錄的一段do re mi fa so la xi do的哼唱。
運(yùn)行結(jié)果如下圖1:
圖1
參考文獻(xiàn):
[1]趙文博,張生,孫國(guó)強(qiáng),等.WAV音頻分句的算法設(shè)計(jì)[J].微計(jì)算機(jī)信,2011(27):204-205.
[2]李敏.音頻文件格式wave的轉(zhuǎn)換[J].電腦知識(shí)與技術(shù),2005(08):73-75.
[3]鄭宇軍.C#面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].北京:人民郵電出版社,2009:316-319.
作者簡(jiǎn)介:許含坤(1970.08-),福建霞浦人,工程師,現(xiàn)主要從事計(jì)算機(jī)軟件教學(xué)及科研工作,研究方向:面向?qū)ο?、?shù)據(jù)庫(kù)、NET平臺(tái)應(yīng)用開(kāi)發(fā)等計(jì)算機(jī)相關(guān)技術(shù)。
作者單位:福建信息職業(yè)技術(shù)學(xué)院計(jì)算機(jī)工程系,福州 350003