在上一篇文章RIFF和WAVE音頻文件格式中對WAV的文件格式做了介紹,本文將使用標(biāo)準(zhǔn)C++庫實現(xiàn)對數(shù)據(jù)為PCM格式的WAV文件的讀寫操作,只使用標(biāo)準(zhǔn)C++庫函數(shù),不依賴于其他的庫。
WAV文件結(jié)構(gòu)
WAV是符合RIFF標(biāo)準(zhǔn)的多媒體文件,其文件結(jié)構(gòu)可以如下:
WAV 文件結(jié)構(gòu) |
---|
RIFF塊 |
WAVE FOURCC |
fmt 塊 |
fact 塊(可選) |
data塊(包含PCM數(shù)據(jù)) |
首先是一個RIFF塊,有塊標(biāo)識RIFF,指明該文件是符合RIFF標(biāo)準(zhǔn)的文件;接著是一個FourCC,WAVE,該文件為WAV文件;fmt塊包含了音頻的一些屬性:采樣率、碼率、聲道等;fact 塊是一個可選塊,不是PCM數(shù)據(jù)格式的需要該塊;最后data塊,則包含了音頻的PCM數(shù)據(jù)。實際上,可以將一個WAV文件看著由兩部分組成:文件頭和PCM數(shù)據(jù),則WAV文件頭各字段的意義如下: