多媒體技術(shù)近年來(lái)發(fā)展很快,,較好品質(zhì)的聲卡可以提供16位的立體聲及44KHZ的播放錄制能力,它不僅可以提供原音逼真的取樣,,其合成的音質(zhì)也十分理想,,有的聲卡還加入了數(shù)字信號(hào)處理器,可編程控制的DSP具有強(qiáng)大的運(yùn)算能力,,它可以用來(lái)作聲音信息的壓縮和一些特殊效果的處理,。具有此功能的聲卡提供的WAV文件提供的語(yǔ)音信息可以滿足語(yǔ)音特征識(shí)別的要求。 1.1 RIFF文件和WAV文件格式 在Windows環(huán)境下,,大部分的多媒體文件都依循著一種結(jié)構(gòu)來(lái)存放信息,,這種結(jié)構(gòu)稱為"資源互換文件格式"(Resources lnterchange File Format),,簡(jiǎn)稱RIFF,。例如聲音的WAV文件、視頻的AVI文件等等均是由此結(jié)構(gòu)衍生出來(lái)的,。RIFF可以看做是一種樹狀結(jié)構(gòu),,其基本構(gòu)成單位為chunk,猶如樹狀結(jié)構(gòu)中的節(jié)點(diǎn),,每個(gè)chunk由"辨別碼",、"數(shù)據(jù)大小"及"數(shù)據(jù)"所組成。 辨別碼由4個(gè)ASCII碼所構(gòu)成,,數(shù)據(jù)大小則標(biāo)示出緊跟其后數(shù)據(jù)的長(zhǎng)度(單位為Byte),,而數(shù)據(jù)大小本身也用掉4個(gè)Byte,所以事實(shí)上一個(gè)chunk的長(zhǎng)度為數(shù)據(jù)大小加8,。一般而言,,chunk本身并不允許內(nèi)部再包含chunk,但有兩種例外,,分別為以"RIFF"及"LIST"為辨別碼的chunk,。而針對(duì)此兩種chunk,RIFF又從原先的"數(shù)據(jù)"中切出4個(gè)Byte,。 此4個(gè)Byte稱為"格式辨別碼",,然而RIFF又規(guī)定文件中僅能有一個(gè)以"RIFF"為辨別碼的chunk,。 只要依循此一結(jié)構(gòu)的文件,我們均稱之為RIFF檔,。此種結(jié)構(gòu)提供了一種系統(tǒng)化的分類,。如果和MS一DOS文件系統(tǒng)作比較,"RIFF"chunk就好比是一臺(tái)硬盤的根目錄,,其格式辨別碼便是此硬盤的邏輯代碼(C:或D:),,而"LIST"chunk即為其下的子目錄,其他的chunk則為一般的文件,。至于在RIFF文件的處理方面,,微軟提供了相關(guān)的函數(shù)。視窗下的各種多媒體文件格式就如同在磁盤機(jī)下規(guī)定僅能放怎樣的目錄,,而在該目錄下僅能放何種數(shù)據(jù),。 WAV為WAVEFORM(波形)的縮寫。在聲音文件的結(jié)構(gòu)中,,"RIFF"的格式辨別碼為"WAVE",。整個(gè)文件由兩個(gè)chunk所組成:辨別碼"fmt "(注意,后面有一個(gè)空格)及"data",。 在"fmt "的chunk下包含了一個(gè)PCMWAVEFORMAT數(shù)據(jù)結(jié)構(gòu),,其定義如下: typedef struct pcmwaveformat - tag { WAVEFORMAT wf ; WORD wBitsPerSample,; } PCMWAVEFORMAT,; typedef struct waveformat - tag { WORD wFormatTag ; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesperSec; WORD nBlockAlign; } WAVEFORMAT; 其意義分別為: wFormatTag:記錄著此聲音的格式代號(hào),,例如WAVE_FORMAT_PCM,,WAVE_F0RAM_ADPCM等等。 nChannels:記錄聲音的頻道數(shù),。 nSamp1esPerSec:記錄每秒取樣數(shù),。 nAvgBytesPerSec:記錄每秒的數(shù)據(jù)量。 nBlockA1ign:記錄區(qū)塊的對(duì)齊單位,。 wBitsPerSample:記錄每個(gè)取樣所需的位元數(shù),。 "data"Chunk包含真正的聲音數(shù)據(jù)。Window目前僅提供WAVE_FORMAT_PCM一種數(shù)據(jù)格式,,所代表的意義是脈派編碼調(diào)變(Pu1se Code Modulation),。針對(duì)此格式,Windows定義了在"data"的chunk中數(shù)據(jù)的存放情形,,圖2中列出了四種不同頻道數(shù)及取樣所需的位元數(shù)以及位元位置的安排,。 "RIFF" 頻道0 頻道0 頻道0 頻道0 xxxx nChannels=1,wBitsPerSample=8 "WAVE" 頻0(左) 頻道1(右) 頻道0(左) 頻道1 (右) "fmt " nChannels=2,wBitsPerSample=8 sizeof(PCMWAVEFORMAT) struct of PCMWAVEFORMAT 頻道0(低位) 頻道0(高位) 頻道0(低位)頻道0(高位) "data" nChannels=1,wBitsPerSample=16 xxxx 頻道0(低位) 頻道0(高位) 頻道0(低位)頻道0(高位) (低位) (高位) (低位) (高位) wave form data nChannels=2,wBitsPerSample=16 圖1 WAV文件結(jié)構(gòu) 圖2 PCM文件中位元安排方式 第一排表示單聲道8位元,第二排表示雙聲道8位元,,第三排表示單聲道16位元,,第四排表示雙聲道16位元,。8位元代表音量大小由8個(gè)位元所表示,16位元?jiǎng)t代表音量大小由16個(gè)位元所表示,。理論上8位元可以表示0~255,,16位元可表示0~65536,不過(guò)windows卻定16位元其值的范圍從-32168~32167,。此外尚有一點(diǎn)要注意的是,,0并不一定代表無(wú)聲,而是由中間的數(shù)值來(lái)決定,,也就是在8位元時(shí)為128,,16位元時(shí)為0才是無(wú)聲。所以,,若程序設(shè)計(jì)時(shí)需放入無(wú)聲的數(shù)據(jù),,糯特別注意聲音格式是16或是8位元,以放入適當(dāng)?shù)闹怠? 1.2 WAV文件信息的具體應(yīng)用 WAV文件中包括了對(duì)原始聲音的高速率采樣,,并且以WAVE_PCM_FORMAT脈派編碼調(diào)變格式,,我們可以在VISUAL C++程序中實(shí)現(xiàn),在讀出WAVEHDR文件頭之后,,下面就是原始聲音的高速率采樣信息,,我們可以對(duì)它作多方面的信息處理。 1.2.1 波形顯示,。 我們可以以時(shí)域-幅度的方式顯示出原始聲音的波形,,這是最簡(jiǎn)單同時(shí)也是最直接的信息處理方式。在時(shí)域范圍內(nèi),,我們可以觀察該信號(hào)波形是否連續(xù),,中間是否有跳變等,。 1.2.2頻譜顯示 我們可以以頻域-幅度的方式顯示出原始聲音的頻譜,,在對(duì)原始信號(hào)經(jīng)過(guò)FFT變換之后,可以得到該信號(hào)的頻譜,,進(jìn)而得到該信號(hào)的能量集中帶,,分布特征,譜對(duì)稱系數(shù)等等,。 1.2.3 用于語(yǔ)音信號(hào)識(shí)別 講話者的個(gè)體識(shí)別是語(yǔ)音信號(hào)處理的一個(gè)重要內(nèi)容,,但它的一個(gè)前提條件是必須提供語(yǔ)音信號(hào)的數(shù)字波形,通常的方法是將原始的語(yǔ)音信號(hào)進(jìn)行放大,、抗混疊濾波,、A/D采樣、數(shù)值編碼,,最終得到語(yǔ)音信號(hào)的數(shù)字波形,,通常多采用硬件處理,,費(fèi)時(shí)費(fèi)力,如果我們借助非常成熟的聲卡技術(shù),,將WAV文件打開,,就非常方便地得到語(yǔ)音信號(hào)的數(shù)字波形,為下一步進(jìn)行語(yǔ)音信號(hào)識(shí)別提供良好的前端預(yù)處理,。 |
|