0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

WAV文件格式詳解

嵌入式那些事 ? 來源:嵌入式那些事 ? 2023-10-21 09:52 ? 次閱讀

1、WAV文件概述

WAV是微軟公司開發(fā)的一種音頻格式文件,用于保存Windows平臺的音頻信息資源,它符合資源互換文件格式(Resource Interchange File Format,RIFF)文件規(guī)范。標準格式化的WAV文件和CD格式一樣,也是44.1K的取樣頻率,16位量化數(shù)字,因此在聲音文件質(zhì)量和CD相差無幾!

WAV通常用來保存PCM格式的原始音頻數(shù)據(jù),所以通常被稱為無損音頻。但是嚴格意義上來講,WAV也可以存儲其它壓縮格式的音頻數(shù)據(jù)。

2、WAV文件格式

WAV符合RIFF文件格式標準,可以看作是RIFF文件的一個具體實例。既然WAV符合RIFF規(guī)范,其基本的組成單元也是chunk。一個WAV文件通常有三個chunk以及一個可選chunk,其在文件中的排列方式依次是:RIFF chunk,F(xiàn)ormat chunk,F(xiàn)act chunk(附加塊,可選),Data chunk。示意圖如下:

e3a6363e-6d8a-11ee-939d-92fbcf53809c.png

2019-10-21_162529

一個WAV文件,首先是一個RIFF chunk,其格式類型為'WAVE'。RIFF chunk包括兩個子chunk,ID分別為 'fmt '和'data',還有一個可選的Fact chunk。Format chunk用于表示音頻數(shù)據(jù)的屬性,包括編碼方式、聲道數(shù)目、采樣頻率、每個采樣需要的bit數(shù)等等信息。Fact chunk是一個可選chunk,一般當(dāng)WAVE文件由某些軟件轉(zhuǎn)化而成就包含F(xiàn)act chunk。Data chunk包含WAVE文件的數(shù)字化波形聲音數(shù)據(jù)。WAVE整體結(jié)構(gòu)如下圖所示:

e3b0fb50-6d8a-11ee-939d-92fbcf53809c.png

2019-10-21_162508

接下來講講各個chunk的具體內(nèi)容。

3、各個chunk的具體內(nèi)容

(1).RIFF chunk

ID:4字節(jié),值為"RIFF"。

Size:4字節(jié),ChunkData字段中數(shù)據(jù)的大小,單位:字節(jié)。

ChunkData:包含F(xiàn)ormType和其他chunk的內(nèi)容。

FormType:4字節(jié),值為"WAVE"。

Data:其他chunk的內(nèi)容。

(2).Format chunk

ID:4字節(jié),值為"fmt ",最后一個字符是空格。

Size:4字節(jié),數(shù)據(jù)字段(Data)包含的數(shù)據(jù)大小。如無擴展塊,則值為16;有擴展塊,則值為= 16 + 2字節(jié)擴展塊長度 + 擴展塊內(nèi)容,或者值為18(只有擴展塊長度為2字節(jié),并且擴展塊長度值為0),單位:字節(jié)。

Data:存放音頻格式、聲道數(shù)、采樣率等信息。

audio_format:2字節(jié),表示音頻數(shù)據(jù)的格式。如值為1,表示使用PCM格式。

channels:2字節(jié),聲道數(shù)。值為1則為單聲道,為2則是雙聲道。

sample_rate:4字節(jié),采樣頻率,主要有22.05KHz,44.1kHz和48KHz等,例如0xAC44表示44100Hz。

bytes_per_sec:4字節(jié),音頻的碼率,每秒播放的字節(jié)數(shù)。其值為:聲道數(shù) * 采樣頻率 * 量化位數(shù) / 8,可以估算出使用緩沖區(qū)的大小。

block_align:2字節(jié),每個采樣點所需的字節(jié)數(shù),其值為:聲道數(shù) * 量化位數(shù) / 8。

bits_per_sample:2字節(jié),量化位數(shù),有16位,24位和32位等。

cbSize:2字節(jié),擴展塊的長度,其值可以為0或者22。

cbContent:0字節(jié)或22字節(jié),擴展塊內(nèi)容,具體介紹在下文提及。

備注:這個區(qū)域只需要關(guān)心channels,sample_rate,bits_per_sample三個參數(shù)就可以了,其它的都是依據(jù)這三個計算出來的。

(3).Fact chunk(可選)

fact chunk為可選的,在大多數(shù)的WAV文件中是不存在的。采用壓縮編碼的WAV文件,必須要有Fact chunk,該塊中只有一個數(shù)據(jù),為每個聲道的采樣總數(shù)。

ID:4字節(jié),值為"fact"。

Size:4字節(jié),數(shù)據(jù)字段的長度,其值最小為4。

Data:采樣總數(shù)。

(4).Data chunk

ID:4字節(jié),值為"data"。

Size:4字節(jié),音頻數(shù)據(jù)的長度。

Data:具體的音頻數(shù)據(jù)內(nèi)容存放在這里。

4、Format chunk中的音頻數(shù)據(jù)格式

在format chunk中,有一個字段audio_format,該字段表示音頻數(shù)據(jù)是以何種方式進行編碼存放的。其可選的取值有:

0x0001:WAVE_FORMAT_PCM,采用PCM格式,此時WAV文件中不包含F(xiàn)act chunk。

0x0002:WAVE_FORMAT_ADPCM,此時WAV文件中包含F(xiàn)act chunk。

0x0006:WAVE_FORMAT_ALAW,此時WAV文件中包含F(xiàn)act chunk。

0x0007:WAVE_FORMAT_MULAW,此時WAV文件中包含F(xiàn)act chunk。

0xFFFE:WAVE_FORMAT_EXTENSIBLE,具體的編碼方式由Format chunk中擴展塊的sub_format字段決定。

備注:一般情況下,我們遇到的WAV文件的音頻數(shù)據(jù)編碼格式是PCM,介紹上述內(nèi)容,只是讓大家多了解下其他的編碼格式的值與名稱,當(dāng)遇到這類編碼時,能夠知道其名稱,從而方便查詢相關(guān)資料

5、Format chunk中的擴展塊

當(dāng)WAV文件使用的不是PCM編碼方式時,就需要擴展格式塊,它是在基本的Format chunk中又添加一段數(shù)據(jù)。該數(shù)據(jù)的前兩個字節(jié),表示的是擴展塊的長度。緊接其后的是擴展塊的數(shù)據(jù)區(qū),含有擴展的格式信息,其具體的長度取決于壓縮編碼的類型。當(dāng)某種編碼方式的擴展塊的數(shù)據(jù)區(qū)長度為0,此時擴展塊只包含了擴展塊長度字段,擴展塊的長度字段還必須保留,只是其值設(shè)置為0。

擴展塊的各個字節(jié)的含義如下:

cbSize:2字節(jié),擴展塊的長度,其值可以為0或者22。

cbContent:0字節(jié)或22字節(jié),擴展塊內(nèi)容。

valid_bits_per_sample:2字節(jié),有效的采樣位數(shù),最大值為block_align * 8??梢允褂酶`活的量化位數(shù),通常音頻sample的量化位數(shù)為8的倍數(shù),但是使用了WAVE_FORMAT_EXTENSIBLE時,量化的位數(shù)由擴展塊中的valid_bits_per_sample來描述,可以小于Format chunk中指定的bits_per_sample。

channle_mask:4字節(jié),聲道掩碼。

sub_format:16字節(jié),數(shù)據(jù)格式碼。

在Format chunk中的audio_format設(shè)置為0xFFFE時,表示使用擴展區(qū)中的sub_format來決定音頻的數(shù)據(jù)的編碼方式。在以下幾種情況下必須要使用WAVE_FORMAT_EXTENSIBLE:

PCM數(shù)據(jù)的量化位數(shù)大于16。

音頻的采樣聲道大于2。

實際的量化位數(shù)不是8的倍數(shù)。

存儲順序和播放順序不一致,需要指定從聲道順序到聲卡播放順序的映射情況。

備注:一般情況下,我們遇到的WAV文件中是不含有擴展塊的。

6、聲音數(shù)據(jù)格式

Data chunk中的Data塊中存放的是音頻的采樣數(shù)據(jù)。每個sample按照采樣的時間順序?qū)懭?,對于使用多個字節(jié)的sample,使用小端模式存放(低位字節(jié)存放在低地址,高位字節(jié)存放在高地址)。對于多聲道的sample采用交叉存放的方式。例如:立體雙聲道的sample存儲順序為:聲道1的第一個sample,聲道2的第一個sample;聲道1的第二個sample,聲道2的第二個sample;依次類推....。

對于Data chunk中的Data字段,也就是音頻數(shù)據(jù)內(nèi)容的存儲,根據(jù)聲道數(shù)和采樣位數(shù)的不同情況,布局如下(每1列代表8 bits):

(1).8 bit單聲道

采樣1 采樣2
數(shù)據(jù)1 數(shù)據(jù)2

(2).8 bit雙聲道

采樣1 采樣2
聲道1數(shù)據(jù)1 聲道2數(shù)據(jù)1 聲道1數(shù)據(jù)2 聲道2數(shù)據(jù)2

(3).16 bit單聲道

采樣1 采樣2
數(shù)據(jù)1低字節(jié) 數(shù)據(jù)1高字節(jié) 數(shù)據(jù)2低字節(jié) 數(shù)據(jù)2高字節(jié)

(4).16 bit雙聲道

聲道1采樣1 聲道2采樣1
聲道1數(shù)據(jù)1低字節(jié) 聲道1數(shù)據(jù)1高字節(jié) 聲道2數(shù)據(jù)1低字節(jié) 聲道2數(shù)據(jù)1高字節(jié)
聲道1采樣2 聲道2采樣2
聲道1數(shù)據(jù)2低字節(jié) 聲道1數(shù)據(jù)2高字節(jié) 聲道2數(shù)據(jù)2低字節(jié) 聲道2數(shù)據(jù)2高字節(jié)

7、WAV文件實例分析

利用winhex工具軟件可以非常方便的以十六進制查看文件,下圖是我用winhex軟件打開一個WAV音頻文件時的部分界面截圖:

e3bb4196-6d8a-11ee-939d-92fbcf53809c.png

2019-10-21_160033

下表對文件格式進行解讀:

偏移地址 字節(jié)數(shù) 16進制源碼 內(nèi)容
00H 4 52 49 46 46 'RIFF'標識符
04H 4 F4 FE 83 01 數(shù)據(jù)長度:0x0183FEF4(注意順序)
08H 4 57 41 56 45 'WAVE'標識符
0CH 4 66 6D 74 20 'fmt ',最后一位為空格
10H 4 10 00 00 00 Format chunk大?。?x10
14H 2 01 00 編碼格式:0x01為PCM
16H 2 02 00 聲道數(shù)目:0x02為雙聲道
18H 4 44 AC 00 00 采樣頻率:0xAC44表示44100Hz
1CH 4 10 B1 02 00 每秒字節(jié)數(shù):0x02B110
20H 2 04 00 每個采樣點所需的字節(jié)數(shù):0x04
22H 2 10 00 量化位數(shù):0x10
24H 4 64 61 74 61 'data'標識符
28H 4 48 FE 83 01 音頻數(shù)據(jù)的長度:0x0183FE48

從偏移量2CH開始就是音頻數(shù)據(jù)了。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 音頻
    +關(guān)注

    關(guān)注

    29

    文章

    2876

    瀏覽量

    81543
  • WAV
    WAV
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    19152
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    942

    瀏覽量

    54826
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    566

    瀏覽量

    24742

原文標題:WAV文件格式詳解

文章出處:【微信號:嵌入式那些事,微信公眾號:嵌入式那些事】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于DWC2的USB驅(qū)動開發(fā)-UAC之WAV-PCM音頻文件格式詳解

    在做UAC,PWM音頻播放的項目,需要解析WAV格式文件,通過UAC發(fā)送,或接收PCM數(shù)據(jù),驅(qū)動喇叭播放。這里對WAV文件格式相關(guān)內(nèi)容進行整理備忘。
    的頭像 發(fā)表于 07-27 09:02 ?2214次閱讀
    基于DWC2的USB驅(qū)動開發(fā)-UAC之<b class='flag-5'>WAV</b>-PCM音頻<b class='flag-5'>文件格式</b><b class='flag-5'>詳解</b>

    RIFF文件格式簡介

    RIFF(Resources Interchange File Format)中文翻譯為資源互換文件格式,是Windows下大部分多媒體文件遵循的一種文件結(jié)構(gòu)。
    的頭像 發(fā)表于 10-07 16:25 ?1738次閱讀
    RIFF<b class='flag-5'>文件格式</b>簡介

    MP3 文件格式資料

    MP3 文件格式資料
    發(fā)表于 04-08 03:37 ?22次下載

    如何光繪輸出AutoCAD文件格式

    教你光繪輸出AutoCAD文件格式
    發(fā)表于 06-07 15:16 ?36次下載

    .mpp文件格式打開軟件下載

    .mpp文件格式打開
    發(fā)表于 07-07 13:14 ?2517次下載

    適用于IPTV大并發(fā)應(yīng)用的文件格式

    分析交互式網(wǎng)絡(luò)電視(IPTV)大并發(fā)應(yīng)用的特性,提出一種適用于IPTV大并發(fā)應(yīng)用的服務(wù)器內(nèi)部文件格式cl4文件格式。該文件格式采用了符合IPTV大并發(fā)應(yīng)用特性的音視頻數(shù)據(jù)交織、媒體數(shù)
    發(fā)表于 04-15 10:02 ?17次下載

    LabVIEW數(shù)據(jù)文件格式的視頻教程

    LabVIEW數(shù)據(jù)文件格式的視頻教程 LabVIEW數(shù)據(jù)文件格式之華山論
    發(fā)表于 03-26 12:16 ?113次下載

    數(shù)碼相機伴侶的文件格式

    數(shù)碼相機伴侶的文件格式              文件格式指的是數(shù)碼相機伴侶獨特的文件系統(tǒng)結(jié)構(gòu)在
    發(fā)表于 12-23 10:05 ?879次閱讀

    GIF圖形文件格式文檔

    GIF圖形文件格式文檔 GIF圖形文件格式文檔 GIF圖形文件格式文檔
    發(fā)表于 05-24 10:53 ?2次下載

    GIF文件格式詳解

    GIF文件格式詳解 GIF文件格式詳解 GIF文件格式詳解
    發(fā)表于 05-24 10:53 ?2次下載

    了解LabVIEW數(shù)據(jù)文件格式

    LabVIEW數(shù)據(jù)文件格式之華山論劍視頻教程
    的頭像 發(fā)表于 06-25 00:13 ?4835次閱讀
    了解LabVIEW數(shù)據(jù)<b class='flag-5'>文件格式</b>

    一招教你快速解析WAV文件格式

    語音的播放出現(xiàn)問題。由于WAV采用PCM編碼,音質(zhì)也十分不錯,于是考慮用STM32對WAV格式音頻文件進行解碼,上周末開始找資料和編程,其中也遇到了不少問題,不過功夫不負有心人,最終還
    的頭像 發(fā)表于 08-01 09:38 ?2.4w次閱讀
    一招教你快速解析<b class='flag-5'>WAV</b><b class='flag-5'>文件格式</b>

    STM32--hex文件格式

    ? ? hex 是 Intel 公司制定的一種使用 ASCII 文本記錄機器碼或常量數(shù)據(jù)的文件格式,它可以燒錄到MCU中,被MCU執(zhí)行的一種文件格式。一個hex文件由多條記錄組成,而每條記錄由5個
    發(fā)表于 12-06 11:21 ?4次下載
    STM32--hex<b class='flag-5'>文件格式</b>

    常用對象文件格式

    電子發(fā)燒友網(wǎng)站提供《常用對象文件格式.pdf》資料免費下載
    發(fā)表于 10-15 09:25 ?0次下載
    常用對象<b class='flag-5'>文件格式</b>

    EPS文件格式如何轉(zhuǎn)換 EPS和SVG文件的區(qū)別

    EPS文件格式轉(zhuǎn)換 EPS(Encapsulated PostScript)是一種用于存儲矢量圖形的文件格式,最初由Adobe公司開發(fā)。由于EPS文件在打印時能夠保持極高的質(zhì)量,并且廣泛被各種
    的頭像 發(fā)表于 11-19 10:31 ?500次閱讀