1. 程式人生 > >音頻處理 (一) 音頻文件

音頻處理 (一) 音頻文件

rsa formate pad ack -s amp channels p s 可能

音頻文件

音頻文件是對聲音進行數字轉換之後存放的數據文件,了解音頻數據必須先知道幾個重要概念。

1. 采樣:對聲音信息錄入時,行進的最小操作單位,一般一次采樣具有左右2個聲道,每個聲道用1或2個字節來存儲;

這樣采樣的量化位數是8位,或16位(樣本位寬),量化位數越高聲音音質越好;就像11位電話號碼表示的號碼比7位要多得多;

2. 采樣頻率:每秒采樣次數,單位Hz,一般的音頻文件有11.025kHz22.05kHz44.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格式(待續 ...)

音頻處理 (一) 音頻文件