RM新时代网站-首页

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

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

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

WAV文件格式詳解

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

1、WAV文件概述

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

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

2、WAV文件格式

WAV符合RIFF文件格式標(biāo)準(zhǔn),可以看作是RIFF文件的一個(gè)具體實(shí)例。既然WAV符合RIFF規(guī)范,其基本的組成單元也是chunk。一個(gè)WAV文件通常有三個(gè)chunk以及一個(gè)可選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

一個(gè)WAV文件,首先是一個(gè)RIFF chunk,其格式類型為'WAVE'。RIFF chunk包括兩個(gè)子chunk,ID分別為 'fmt '和'data',還有一個(gè)可選的Fact chunk。Format chunk用于表示音頻數(shù)據(jù)的屬性,包括編碼方式、聲道數(shù)目、采樣頻率、每個(gè)采樣需要的bit數(shù)等等信息。Fact chunk是一個(gè)可選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

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

3、各個(gè)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 ",最后一個(gè)字符是空格。

Size:4字節(jié),數(shù)據(jù)字段(Data)包含的數(shù)據(jù)大小。如無擴(kuò)展塊,則值為16;有擴(kuò)展塊,則值為= 16 + 2字節(jié)擴(kuò)展塊長(zhǎng)度 + 擴(kuò)展塊內(nèi)容,或者值為18(只有擴(kuò)展塊長(zhǎng)度為2字節(jié),并且擴(kuò)展塊長(zhǎng)度值為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é),每個(gè)采樣點(diǎn)所需的字節(jié)數(shù),其值為:聲道數(shù) * 量化位數(shù) / 8。

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

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

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

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

(3).Fact chunk(可選)

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

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

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

Data:采樣總數(shù)。

(4).Data chunk

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

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

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

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

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

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

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

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

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

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

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

5、Format chunk中的擴(kuò)展塊

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

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

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

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

valid_bits_per_sample:2字節(jié),有效的采樣位數(shù),最大值為block_align * 8??梢允褂酶`活的量化位數(shù),通常音頻sample的量化位數(shù)為8的倍數(shù),但是使用了WAVE_FORMAT_EXTENSIBLE時(shí),量化的位數(shù)由擴(kuò)展塊中的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時(shí),表示使用擴(kuò)展區(qū)中的sub_format來決定音頻的數(shù)據(jù)的編碼方式。在以下幾種情況下必須要使用WAVE_FORMAT_EXTENSIBLE:

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

音頻的采樣聲道大于2。

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

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

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

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

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

對(duì)于Data chunk中的Data字段,也就是音頻數(shù)據(jù)內(nèi)容的存儲(chǔ),根據(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文件實(shí)例分析

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

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

2019-10-21_160033

下表對(duì)文件格式進(jìn)行解讀:

偏移地址 字節(jié)數(shù) 16進(jìn)制源碼 內(nèi)容
00H 4 52 49 46 46 'RIFF'標(biāo)識(shí)符
04H 4 F4 FE 83 01 數(shù)據(jù)長(zhǎng)度:0x0183FEF4(注意順序)
08H 4 57 41 56 45 'WAVE'標(biāo)識(shí)符
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 每個(gè)采樣點(diǎn)所需的字節(jié)數(shù):0x04
22H 2 10 00 量化位數(shù):0x10
24H 4 64 61 74 61 'data'標(biāo)識(shí)符
28H 4 48 FE 83 01 音頻數(shù)據(jù)的長(zhǎng)度:0x0183FE48

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

審核編輯:湯梓紅

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

    關(guān)注

    29

    文章

    2868

    瀏覽量

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

    關(guān)注

    0

    文章

    22

    瀏覽量

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

    關(guān)注

    6

    文章

    940

    瀏覽量

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

    關(guān)注

    1

    文章

    565

    瀏覽量

    24727

原文標(biāo)題:WAV文件格式詳解

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    RIFF文件格式簡(jiǎn)介

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

    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ù)碼相機(jī)伴侶的文件格式

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

    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 ?4831次閱讀
    了解LabVIEW數(shù)據(jù)<b class='flag-5'>文件格式</b>

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

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

    STM32--hex文件格式

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

    常用對(duì)象文件格式

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

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

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