基于visual c++6.0的聲音文件操作

基于visual c++6.0的聲音文件操作

ID:8467297

大?。?1.71 KB

頁數(shù):15頁

時間:2018-03-28

基于visual c++6.0的聲音文件操作_第1頁
基于visual c++6.0的聲音文件操作_第2頁
基于visual c++6.0的聲音文件操作_第3頁
基于visual c++6.0的聲音文件操作_第4頁
基于visual c++6.0的聲音文件操作_第5頁
資源描述:

《基于visual c++6.0的聲音文件操作》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、基于VisualC++6.0的聲音文件操作-一、前言當(dāng)前VisualC++相關(guān)的編程資料中,無論是大部頭的參考書,還是一些計算機(jī)雜志,對聲音文件的處理都是泛泛的涉及一下,許多編程愛好者都感到對該部分的內(nèi)容了解不是很透徹,本文希望能夠給剛剛涉及到聲音處理領(lǐng)域的朋友們起到一個引路的作用,幫助他們盡快進(jìn)入聲音處理的更深奧空間。當(dāng)前計算機(jī)系統(tǒng)處理聲音文件有兩種辦法:一是使用現(xiàn)成的軟件,如微軟的錄音機(jī)、SoundForge、CoolEdit等軟件可以實(shí)現(xiàn)對聲音信號進(jìn)行錄音、編輯、播放的處理,但它們的功能是有限的,為了更靈活,更大限度地處理聲音數(shù)據(jù),就不得不使用另外一種方法,既利用微軟提供的多媒

2、體服務(wù),在Windows環(huán)境下自己編寫程序來進(jìn)行聲音處理來實(shí)現(xiàn)一些特定的功能。下面就開始介紹聲音文件的格式和在Windows環(huán)境下使用VisualC++開發(fā)工具進(jìn)行聲音文件編程處理的方法,本文所有的程序代碼都在Windows2000、VisualC++6.0環(huán)境下編譯通過,運(yùn)行正常。二、RIFF文件結(jié)構(gòu)和WAVE文件格式Windows支持兩種RIFF(ResourceInterchangeFileFormat,"資源交互文件格式")格式的音頻文件:MIDI的RMID文件和波形音頻文件格式WAVE文件,其中在計算機(jī)領(lǐng)域最常用的數(shù)字化聲音文件格式是后者,它是微軟專門為Windows系統(tǒng)定

3、義的波形文件格式(WaveformAudio),由于其擴(kuò)展名為"*.wav",因而該類文件也被稱為WAVE文件。為了突出重點(diǎn),有的放矢,本文涉及到的聲音文件所指的就是WAVE文件。常見的WAVE語音文件主要有兩種,分別對應(yīng)于單聲道(11.025KHz采樣率、8Bit的采樣值)和雙聲道(44.1KHz采樣率、16Bit的采樣值)。這里的采樣率是指聲音信號在進(jìn)行"?!鷶?shù)"轉(zhuǎn)換過程中單位時間內(nèi)采樣的次數(shù)。采樣值是指每一次采樣周期內(nèi)聲音模擬信號的積分值。對于單聲道聲音文件,采樣數(shù)據(jù)為八位的短整數(shù)(shortint00H-FFH);而對于雙聲道立體聲聲音文件,每次采樣數(shù)據(jù)為一個16位的整數(shù)(i

4、nt),高八位和低八位分別代表左右兩個聲道。WAVE文件數(shù)據(jù)塊包含以脈沖編碼調(diào)制(PCM)格式表示的樣本。在進(jìn)行聲音編程處理以前,首先讓我們來了解一下RIFF文件和WAVE文件格式。RIFF文件結(jié)構(gòu)可以看作是樹狀結(jié)構(gòu),其基本構(gòu)成是稱為"塊"(Chunk)的單元,每個塊有"標(biāo)志符"、"數(shù)據(jù)大小"及"數(shù)據(jù)"所組成,塊的結(jié)構(gòu)如圖1所示:塊的標(biāo)志符(4BYTES)數(shù)據(jù)大?。?BYTES)數(shù)據(jù)圖一、塊的結(jié)構(gòu)示意圖從上圖可以看出,其中"標(biāo)志符"為4個字符所組成的代碼,如"RIFF","LIST"等,指定塊的標(biāo)志ID;數(shù)據(jù)大小用來指定塊的數(shù)據(jù)域大小,它的尺寸也為4個字符;數(shù)據(jù)用來描述具體的聲音信號

5、,它可以由若干個子塊構(gòu)成,一般情況下塊與塊是平行的,不能相互嵌套,但是有兩種類型的塊可以嵌套子塊,他們是"RIFF"或"LIST"標(biāo)志的塊,其中RIFF塊的級別最高,它可以包括LIST塊。另外,RIFF塊和LIST塊與其他塊不同,RIFF塊的數(shù)據(jù)總是以一個指定文件中數(shù)據(jù)存儲格式的四個字符碼(稱為格式類型)開始,如WAVE文件有一個"WAVE"的格式類型。LIST塊的數(shù)據(jù)總是以一個指定列表內(nèi)容的4個字符碼(稱為列表類型)開始,例如擴(kuò)展名為".AVI"的視頻文件就有一個"strl"的列表類型。RIFF和LIST的塊結(jié)構(gòu)如下:RIFF/LIST標(biāo)志符數(shù)據(jù)1大小數(shù)據(jù)1格式/列表類型數(shù)據(jù)圖二、

6、RIFF/LIST塊結(jié)構(gòu)WAVE文件是非常簡單的一種RIFF文件,它的格式類型為"WAVE"。RIFF塊包含兩個子塊,這兩個子塊的ID分別是"fmt"和"data",其中"fmt"子塊由結(jié)構(gòu)PCMWAVEFORMAT所組成,其子塊的大小就是sizeofof(PCMWAVEFORMAT),數(shù)據(jù)組成就是PCMWAVEFORMAT結(jié)構(gòu)中的數(shù)據(jù)。WAVE文件的結(jié)構(gòu)如下圖三所示:標(biāo)志符(RIFF)數(shù)據(jù)大小格式類型("WAVE")"fmt"Sizeof(PCMWAVEFORMAT)PCMWAVEFORMAT"data"聲音數(shù)據(jù)大小聲音數(shù)據(jù) 圖三、WAVE文件結(jié)構(gòu)圖??PCMWAVEFORMAT結(jié)

7、構(gòu)定義如下:Typedefstruct{WAVEFORMATwf;//波形格式;WORDwBitsPerSample;//WAVE文件的采樣大小;}PCMWAVEFORMAT;WAVEFORMAT結(jié)構(gòu)定義如下:typedefstruct{WORDwFormatag;//編碼格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等WORDnChannls;//聲道數(shù),單聲道為1,雙聲道為2;DWORDnSamplesPerSec;//采樣

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。