音頻文件 音頻文件是對聲音進行數字轉換之後存放的數據文件,瞭解音頻數據必須先知道幾個重要概念。 1. 採樣:對聲音信息錄入時,行進的最小操作單位,一般一次採樣具有左右2個聲道,每個聲道用1或2個位元組來存儲; 這樣採樣的量化位數是8位,或16位(樣本位寬),量化位數越高聲音音質越好;就像11位電話號碼 ...
音頻文件
音頻文件是對聲音進行數字轉換之後存放的數據文件,瞭解音頻數據必須先知道幾個重要概念。
1. 採樣:對聲音信息錄入時,行進的最小操作單位,一般一次採樣具有左右2個聲道,每個聲道用1或2個位元組來存儲;
這樣採樣的量化位數是8位,或16位(樣本位寬),量化位數越高聲音音質越好;就像11位電話號碼表示的號碼比7位要多得多;
2. 採樣頻率:每秒採樣次數,單位Hz,一般的音頻文件有11.025kHz、22.05kHz、44.10kHz等;顯然,這種模-數信息的轉換,每秒採樣次數越多,聲音就越精確;
3. 碼率:每秒編碼的bit數,單位是kb/s;計算方式:位寬×聲道數×採樣頻率;(單位是bit不是位元組)
4. 聲道數,固定值為1-單聲道,或者2-雙聲道,雙聲道時,每個採樣樣本中包含左聲道、右聲道的音頻數據,因此兩者的數據是交錯排列的;
(一)Wave 格式
WAVE是微軟開發的聲音文件格式,用於保存Windows平臺的音頻信息資源,文件尾碼名*.wav;支持多種壓縮演算法、多種音頻位數、採樣頻率和聲道;
標準的wav文件採用44.1kHz採樣頻率,16位量化位數,聲音文件質量幾與CD相當;Wave格式不對源數據做任何處理,如果源數據是無損的,編碼後的Wav文件也是無損的;如果源數據是有損的,編碼後的Wav文件也是有損的;
1. Wave文件的構成:
RIFF | 標 志 4B | "RIFF" |
數據大小 4B | - | |
格式 4B | "WAVE" | |
fmt | 標誌 4B | "fmt " |
結構體大小 4B | 16/18 | |
結構體 16B/18B | ||
data | 標誌 4B | "data" |
聲音數據大小 4B | - | |
data | - |
2. Wave文件的詳細結構:
// RIFF 標準媒體流文件頭
struct Riff_Header
{
char szRiffId[4]; // 'R','I','F','F'
DWORD dwRiffSize; // Size, 除了這 8 個位元組之外,文件剩餘大小,等於文件總位元組數-8
char szRiffFormat[4]; // 'W','A','V','E'
};
struct Fmt_Block
{
char szFmtId[4]; // 'f', 'm', 't',' '
DWORD dwFmtSize; // Size 為 16 或 18
WORD wFormatTag; // 編碼方式,一般為 0x0001
WORD wChannels; // 聲道數 1--單聲道 2--雙聲道
DWORD dwSamplesPerSec; // 採樣頻率 /Hz
DWORD dwAvgBytesPerSec; // 每秒位元組數
WORD wBlockAlign; // 數據塊對齊單位(每個採樣需要的位元組數)
WORD wBitsPerSample; // 每個採樣需要的 bit
// WORD wBits; // 可能有可能沒有,由dwFmtSize欄位決定
};
//Fact_Block 塊,有些 wav 文件中沒有
struct Fact_Block
{
char szFactId[4]; // 'f','a','c','t'
DWORD dwFactSize; //
};
//數據塊
struct Data_Block
{
char szDataId[4]; //'d','a,','t','a'
DWORD dwDataSize; // 音頻數據大小
//data ...
};
說明:
1. RIFF塊裡面的 dwRiffSize 表示的是整個文件除開頭8個位元組之外的大小,0x24 0xCD 0x01 0x00,即 118,052 Byte,通過文件屬性查得文件大小是118,060Byte;
2. dwFmtSize 為 0x10 0x00 0x00 0x00,即為16;fmt塊的剩餘部分是一個波形信息結構,是微軟定義的:
/* * extended waveform format structure used for all non-PCM formats. this * structure is common to all non-PCM formats. */ typedef struct tWAVEFORMATEX { WORD wFormatTag; /* format type */ WORD nChannels; /* number of channels (i.e. mono, stereo...) */ DWORD nSamplesPerSec; /* sample rate */ DWORD nAvgBytesPerSec; /* for buffer estimation */ WORD nBlockAlign; /* block size of data */ WORD wBitsPerSample; /* number of bits per sample of mono data */ WORD cbSize; /* the count in bytes of the size of */ /* extra information (after cbSize) */ } WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX;WAVEFORMATEX
3. Data塊:dwDataSize表示音頻數據的大小,0x00 0x01 0xCD 0x00,即118,016,略小於118,052,說明文件末有部分無效數據;
(二) MP3格式
MP3格式(待續 ...)