WAV文件格式解析

前提知识准备:https://fanzheng.org/archives/36
声音有三要素:音调、响度和音色,波形是怎么反映这三要素的呢?
音调由声波的频率决定,频率越高音调越高。
响度由声波的振幅决定,振幅越高响度越大。
音色是由波形的“形”决定的。

WAV文件格式详解
1 概述

Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。

2 格式解析

WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunkFormat chunkData chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunkCue points chunkPlaylist chunkAssociated data list chunk等。本文将只介绍RIFF chunkFormat chunkData chunk

2.1 RIFF区块
名称偏移地址字节数端序内容
ID0x004Byte大端‘RIFF’ (0x52494646)
Size0x044Byte小端fileSize 8
Type0x084Byte大端‘WAVE’(0x57415645)

以**'RIFF’为标识
Size是整个文件的长度减去
IDSize的长度
Type
WAVE表示后面需要两个子块:Format区块和Data**区块

2.2 FORMAT区块
名称偏移地址字节数端序内容
ID0x004Byte大端'fmt ’ (0x666D7420)
Size0x044Byte小端16
AudioFormat0x082Byte小端音频格式
NumChannels0x0A2Byte小端声道数
SampleRate0x0C4Byte小端采样率
ByteRate0x104Byte小端每秒数据字节数
BlockAlign0x142Byte小端数据块对齐
BitsPerSample0x162Byte小端采样位数

以**'fmt '**为标识
Size         表示该区块数据的长度(不包含ID和Size的长度)
AudioFormat    表示Data区块存储的音频数据的格式,PCM音频数据的值为1
NumChannels   表示音频数据的声道数,1:单声道,2:双声道
SampleRate    表示音频数据的采样率
ByteRate      每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
BlockAlign     每个采样所需的字节数 = NumChannels * BitsPerSample / 8
BitsPerSample   每个采样存储的bit数,8:8bit,16:16bit,32:32bit

2.3 DATA区块
名称偏移地址字节数端序内容
ID0x004Byte大端‘data’ (0x64617461)
Size0x044Byte小端N
Data0x08NByte小端音频数据

以**‘data’**为标识
Size  表示音频数据的长度,N = ByteRate * seconds
Data  音频数据

3 小端存储

WAV文件以小端形式来进行数据存储。
所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

下面解释一下PCM数据在WAV文件中的bit位排列方式

PCM数据类型采样采样
8Bit 单声道声道0声道0
8Bit 双声道声道0声道1
16Bit 单声道声道0低位,声道0高位声道0低位,声道0高位
16Bit 双声道声道0低位,声道0高位声道1低位,声道1高位
4 利用python画出音频波形图

https://github.com/xlxwalex/lab102/blob/master/W8/Python解析Wav文件并绘制波形的方法.pdf

参考:
https://fanzheng.org/archives/37
http://soundfile.sapp.org/doc/WaveFormat/
https://github.com/xlxwalex/lab102/blob/master/W8/Python解析Wav文件并绘制波形的方法.pdf

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值