剖析
WAVE是錄音時用的標準的WINDOWS檔案格式,檔案的擴展名為“WAV”,數據本身的格式為PCM或壓縮型,屬於無損音樂格式的一種 。符合RIFF(ResourceInterchangeFileFormat)規範。所有的WAV都有一個檔案頭,這個檔案頭音頻流的編碼參數。
WAV檔案的組成
偏移地址 | 大小 位元組 | 數據塊 類型 | 內容 |
00H~03H | 4 | 4字元 | 資源交換檔案標誌(RIFF) |
04H~07H | 4 | 長整數 | 從下個地址開始到檔案尾的總位元組數 |
08H~0BH | 4 | 4字元 | WAV檔案標誌(WAVE) |
0CH~0FH | 4 | 4字元 | 波形格式標誌(fmt),最後一位空格。 |
10H~13H | 4 | 整數 | 過濾位元組(一般為00000010H),若為00000012H則說明數據頭攜帶附加信息(見“附加信息”)。 |
14H~15H | 2 | 整數 | 格式種類(值為1時,表示數據為線性PCM編碼) |
16H~17H | 2 | 整數 | 通道數,單聲道為1,雙聲道為2 |
18H~1BH | 4 | 長整數 | 採樣頻率 |
1CH~1FH | 4 | 長整數 | 波形數據傳輸速率(每秒平均位元組數) |
20H~21H | 2 | 整數 | DATA數據塊長度,位元組。 |
22H~23H | 2 | 整數 | PCM位寬 |
隨後 2位元組 | 2 | 整數 | 附加信息(可選,由上方過濾位元組確定) |
隨後 | ... | 不定長度字元 | “fact”,該部分是可選部分,一般當WAV檔案是由某些軟體轉換而來時,包含該部分。 若包含該部分: (1)該部分的前4位元組為數據頭,一般為4個字母。 (2)隨後4個位元組表示長度,即除去頭(4位元組)和長度(4位元組)之後,數據本身的長度。 (3)最後的位元組為數據本身。 例如:“66 61 73 74 04 00 00 00F8 2F 14 00” 。 “66 61 73 74”是fact欄位的數據頭,“04 00 00 00”是數據本身的長度,“F8 2F 14 00”是數據本身。 (注意是little-indian位元組順序) |
隨後 4位元組 | 4 | 4字元 | 數據標誌符(data) |
隨後 4位元組 | 4 | 長整型 | DATA總數據長度位元組 |
隨後 | ... | DATA數據塊 |
WAV檔案作為最經典的Windows多媒體音頻格式,套用非常廣泛,它使用三個參數來表示聲音:採樣位數、採樣頻率和聲道數。
聲道
聲道有單聲道和立體聲之分,採樣頻率一般有11025Hz(11kHz)、22050Hz(22kHz)和44100Hz(44kHz)三種。WAV檔案所占容量=(採樣頻率×採樣位數×聲道)×時間/8(1位元組=8bit)。WAV對音頻流的編碼沒有硬性規定,除了PCM之外,還有幾乎所有支持ACM規範的編碼都可以為WAV的音頻流進行編碼。
音頻
音頻視頻交錯格式數據(.AVI)、波形格式數據(.WAV)、點陣圖格式數據(.RDI)、MIDI格式數據(.RMI)、調色板格式(.PAL)、多媒體電影(.RMN)、動畫游標(.ANI)、其它RIFF檔案(.BND)。WAVE檔案可以存儲大量格式的。
RIFF是英文ResourceInterchangeFileFormat的縮寫,每個WAVE檔案的頭四個位元組便是“RIFF”。WAVE檔案由檔案頭和數據體兩大部分組成。其中檔案頭又分為RIFF/WAV檔案標識段和聲音數據格式說明段兩部分。WAVE檔案各部分內容及格式見附表。
常見的聲音檔案主要有兩種,分別對應於單聲道(11.025KHz採樣率、8Bit的採樣值)和雙聲道(44.1KHz採樣率、16Bit的採樣值)。採樣率是指:聲音信號在“模→數”轉換過程中單位時間內採樣的次數。採樣值是指每一次採樣周期內聲音模擬信號的積分值。
對於單聲道聲音檔案,採樣數據為八位的短整數(shortint00H-FFH);而對於雙聲道立體聲聲音檔案,每次採樣數據為一個16位的整數(int),高八位和低八位分別代表左右兩個聲道。
WAVE檔案數據塊包含以脈衝編碼調製(PCM)格式表示的樣本。WAVE檔案是由樣本組織而成的。在單聲道WAVE檔案中,聲道0代表左聲道,聲道1代表右聲道。在多聲道WAVE檔案中,樣本是交替出現的。
WAVE檔案的每個樣本值包含在一個整數i中,i的長度為容納指定樣本長度所需的最小位元組數。首先存儲低有效位元組,表示樣本幅度的位放在i的高有效位上,剩下的位置為0,這樣8位和16位的PCM波形樣本的數據格式。
RIFF是英文ResourceInterchangeFileFormat的縮寫,每個WAVE檔案的頭四個位元組便是“RIFF”。
WAVE檔案是由若干個Chunk組成的。按照在檔案中的出現位置包括:RIFFWAVE,Chunk,FormatChunk,FactChunk(可選),DataChunk。
特點
WAV音頻格式的優點包括:簡單的編/解碼(幾乎直接存儲來自模/數轉換器(ADC)的信號)、普遍的認同/支持以及無損耗存儲。WAV格式的主要缺點是需要音頻存儲空間。對於小的存儲限制或小頻寬套用而言,這可能是一個重要的問題。WAV格式的另外一個潛在缺陷是在32位WAV檔案中的2G限制,這種限制已在為SoundForge開發的W64格式中得到了改善。常見的WAV檔案使用PCM無壓縮編碼,這使WAV檔案的質量極高,體積也出奇大,對於PCMWAV,恐怕也只有無損壓縮的音頻才能和其有相同的質量,平時我們見的什麼mp3,wma(不含wmalossless)和wav的質量都是差很遠的!這點可以通過頻譜看出,即使320kbps的mp3和wav一比,也要自卑了!
支持
Wav格式支持MSADPCM、CCITTALaw、CCITTμLaw和其它壓縮算法,支持多種音頻位數、採樣頻率和聲道,但其缺點是檔案體積較大(一分鐘44kHZ、16bitStereo的WAV檔案約要占用10MB左右的硬碟空間),所以不適合長時間記錄。在Windows中,把聲音檔案存儲到硬碟上的擴展名為WAV。WAV記錄的是聲音的本身,所以它占的硬碟空間大的很。例如:16位的44.1KHZ的立體聲聲音一分鐘要占用大約10MB的容量,和MIDI相比就差的很遠。
轉換
AVI和WAV在檔案結構上是非常相似的,不過AVI多了一個視頻流而已。我們接觸到的AVI有很多種,因此我們經常需要安裝一些Decode才能觀看一些AVI,我們接觸到比較多的DivX就是一種視頻編碼,AVI可以採用DivX編碼來壓縮視頻流,當然也可以使用其他的編碼壓縮。同樣,WAV也可以使用多種音頻編碼來壓縮其音頻流,不過我們常見的都是音頻流被PCM編碼處理的WAV,但這不表示WAV只能使用PCM編碼,MP3編碼同樣也可以運用在WAV中,和AVI一樣,只要安裝好了相應的dDecode,就可以欣賞這些WAV了。在Windows平台下,基於PCM編碼的WAV是被支持得最好的音頻格式,所有音頻軟體都能完美支持,由於本身可以達到較高的音質的要求,因此,WAV也是音樂編輯創作的首選格式,適合保存音樂素材。因此,基於PCM編碼的WAV被作為了一種中介的格式,常常使用在其他編碼的相互轉換之中,例如MP3轉換成WMA。
編解碼器
WAV檔案格式是一種由微軟和IBM聯合開發的用於音頻數字存儲的標準,它採用RIFF檔案格式結構,非常接近於AIFF和IFF格式。多媒體套用中使用了多種數據,包括點陣圖、音頻數據、視頻數據以及外圍設備控制信息等。RIFF為存儲這些類型的數據提供了一種方法,RIFF檔案所包含的數據類型由該檔案的擴展名來標識,能以RIFF檔案存儲的數據包括:#音頻視頻交錯格式數據(.AVI)
#波形格式數據(.WAV)
#點陣圖格式數據(.RDI)
#MIDI格式數據(.RMI)
#調色板格式(.PAL)
#多媒體電影(.RMN)
#動畫游標(.ANI)
#其它RIFF檔案(.BND)
RIFF是一種含有嵌套數據結構的二進制檔案格式,每個數據結構都稱為因一個chunk(塊)。Chunk在RIFF檔案中沒有固定的位置,因而偏移量不能用於定位域值。一個塊中的數據包括數據結構、數據流或其它組塊(稱為子塊)等。
ChunkId由4個ASCII字元組成,用以識別塊中所包含的數據。字元RIFF用於標識RIFF數據塊,間隔空格在右面是不超過4個字元的ID。由於這種檔案結構最初是由Microsoft和IBM為PC機所定義,RIFF檔案是按照little-endian位元組順序寫入的,而採用big-endian位元組順序的檔案則用‘RIFX’作為標誌。
ChunkSize(塊大小)是存儲在ChunkData域中數據的長度,ChunkId與ChunkSize域的大小則不包括在該值內。
ChunkData(塊內容)中所包含的數據是以字(WORD)為單位排列的,如果數據長度是奇數,則在最後添加一個空(NULL)位元組。
子塊(Subchunk)與塊具有相同的結構。一個子塊就是包含在其它塊內部的一個塊,只有RIFF檔案塊‘RIFF’和列表塊‘List’才能含有子塊,所有其它塊僅能含有數據。一個RIFF檔案就是一個RIFF塊,檔案中所有其它塊和子塊均包含在這個塊中。
WAV檔案可以存儲大量格式的數據,通常採用的音頻編碼方式是脈衝編碼調製(PCM)。由於WAV格式源自Windows/Intel環境,因而採用Little-Endian位元組順序進行存儲。
脈衝編碼調製
ClaudeE.Shannon於1948年發表的“通信的數學理論”奠定了現代通信的基礎。同年貝爾實驗室的工程人員開發了PCM技術,雖然在當時是革命性的,但今天脈衝編碼調製被視為是一種非常單純的無損耗編碼格式,音頻在固定間隔內進行採集並量化為頻帶值,其它採用這種編碼方法的套用包括電話和CD。PCM主要有三種方式:標準PCM、差分脈衝編碼調製(DPCM)和自適應DPCM。在標準PCM中,頻帶被量化為線性步長的頻帶,用於存儲絕對量值。在DPCM中存儲的是前後電流值之差,因而存儲量減少了約25%。自適應DPCM改變了DPCM的量化步長,在給定的信噪比(SNR)下可壓縮更多的信息。共同執行過程
在對WAV音頻檔案進行編解碼過程中,最一致的地方包括採樣點和採樣幀的處理和轉換。一個採樣點的值代表了給定時間內的音頻信號,一個採樣幀由適當數量的採樣點組成並能構成音頻信號的多個通道。對於立體聲信號一個採樣幀有兩個採樣點,一個採樣點對應一個聲道。一個採樣幀作為單一的單元傳送到數/模轉換器(DAC),以確保正確的信號能同時傳送到各自的通道中。VB中WAV
綜述
在多媒體軟體的開發設計中,聲音是一個相當重要的多媒體元素,優秀的聲音設計會為多媒體軟體增色不少。而WAV格式的聲音檔案是一種最常用的聲音檔案格式,也最容易得到,比如通過Win95中的“錄音機”程式,利用麥克風就可以非常簡單地錄製WAV檔案。VB是一個相當經典的多媒體開發的工具,在VB中播放WAV檔案的方法主要有這樣幾種。OLE控制項
建一窗體,用滑鼠選擇OLE控制項,在窗體上拖出OLE區域,在圖一的視窗中選擇新建和聲音然後按確定鍵就完成了在視窗中添加OLE控制項。這樣就可以在OLE控制項的ResourceDoc屬性中選擇所要播放的檔案,程式運行時雙擊OLE控制項即可。
在實際的程式設計當中,往往需要單擊某個圖示或按鈕來控制聲音的播放,其實現方法是這樣的:首先將OLE控制項的VISIBLE屬性設定為FALSE,然後在圖示或按鈕的單擊事件中編寫如下的程式:
PrivateSubContol_Click()
OLE1.Action=7
End Sub
MMControl控制項
VB5.0提供了許多設計多媒體的控制項,在PROJECT/COMPENENTS/CONTROLS中選擇MMControls控制項,窗體上就出現了多媒體控制項對象,在這個對象上有不同的圖形功能標識,其名稱從左到右分別是Pre、Next、Play、Pause、Back、Step、Stop、Record、Eject。這個多媒體控制項可以播放多種格式的聲音,播放WAV格式聲音檔案的程式代碼
PrivateSubform_load()
MMControl1.DeviceType="waveaudio"
MMControl1.filename="c:\win95\media\ding.wav"
MMControl1.Command="open"
EndSub'以下是為圖形標識Play事件編寫的代碼
PrivateSubMMControl_playclick(cancelAsInteger)
MMControl1.Command="play"
EndSub
當運行這個程式時,MMControl控制項中的Play鍵被激活,點取此按鈕即可播放ding.wav檔案。
在實際的軟體設計當中,更多的情況是滑鼠點擊按鈕或圖示來控制聲音的播放,其實現方法是這樣的:首先將MMControl控制項的VISIBLE屬性設定為FALSE,然後在圖示或按鈕的單擊事件中編寫如下的程式:
PrivateSubControl1_Click()
MMControl1.Command="play"
EndSub
運行程式時單擊相用的按鈕或圖示,WAV檔案照樣可以播放。用自行設計的按鈕或圖示取代多媒體控制項中的固定按鈕,可設計出更加靈活方便的用戶界面。
VB的API函式
在窗體的DECLARATIONS(聲明)中輸入如下代碼:PrivateDeclareFunctionsndPlaySoundLib"winmm.dll"Alias"sndPlaySoundA"(ByVal_lpszSoundNameAsString,ByValuFlagsAsLong)AsLong
'lpszSoundName是一個字元串變數,表示一個WAV格式的檔案名稱。
'uFlags用於設定播放狀態的各種選項。參數值為0X00時,實現同步播放,參數值為0X01時實現非同步播放。
在命令按鈕的單擊事件中輸入如下代碼:
PrivateSubCommand1_Click()
DimplaysAsLong
plays=sndPlaySound(“E:\WINDOWS\MEDIA\DING.WAV",&H0)
EndSub
運行時單擊命令按鈕即可播放WAV檔案。
音頻和視頻格式
多媒體(音頻/視頻)技術隨著人們不斷增加的需求而進入了資訊時代,並且得到了迅猛發展。大量信息的音視頻數據被廣泛使用。音頻信號的數位化、網路化傳輸與處理成了眾多致力於發展多媒體技術的公司爭相研究的課題。 |