本文主要是介绍AVI和WAV文件格式和实例分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、AVI文件分析
二、WAV文件分析
1.WAV格式介绍
2.WAV文件构成
(1)各子块格式分析
(2)data子块数据分布
3.实例分析
一、AVI文件分析
通过AVI文件分析器打开一个AVI文件,可看出音频和视频数据是交织放置的
其两个数据流如下:
// AVIMAINHEADER
public static readonly int AVIF_HASINDEX = 0x00000010; //文件最后是否有索引
public static readonly int AVIF_MUSTUSEINDEX = 0x00000020; //必须使用索引
public static readonly int AVIF_ISINTERLEAVED = 0x00000100; //交错放置
public static readonly int AVIF_TRUSTCKTYPE = 0x00000800; //使用CKtype查找帧
public static readonly int AVIF_WASCAPTUREFILE = 0x00010000; //捕获文件
public static readonly int AVIF_COPYRIGHTED = 0x00020000; //受版权保护
二、WAV文件分析
1.WAV格式介绍
WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字。
2.WAV文件构成
(1)各子块格式分析
WAV文件是属于RIFF结构形式的文件,这种结构是一种树状结构,其最基本的组成单元是chunk(块),而每一个chunk则由辨识码,数据大小,以及数据本身组成,其中辨识码就是RIFF四个字母的ASCII码,共占用4个字节,用十六进制表示就是52 49 46 46;辨识码之后的四个字节,表示除去文件辨识码和它自己之后剩余文件的大小,最后就是文件的数据。
而WAV格式的文件除了前面的文件头之后,还包含三个子块:
- format子块主要用于描述该wav文件的信息,例如,采样率,数据量,编码格式,声道数等,其结构也如RIFF,最开始4个字节表示标识符“fmt”,接着四个字符表示该块大小,后面的18个字节则表示文件的信息,在format子块中WAVEFORMATEX占了18字节,而标准的WAV应该是16字节,只有一些软件生成的文件会在其后面增加两个字节的附加信息;
- fact子块并不是必须的,在标准的WAV文件中没有该子块,只有一些软件转化而来的才会增加该子块,其主要存储关于该文件内容的重要信息;
- data块则主要就是WAV文件真正能播放的声音数据部分。
子块 | 内容 | 字节数 | 端序 | ||
---|---|---|---|---|---|
文件头 | 标识符(RIFF) | 4 Bytes | 大端 | ||
数据大小 | 4 Bytes | 小端 | |||
格式辨识码(WAVE) | 4 Bytes | 大端 | |||
数据 | format子块 | “fmt” | 4 Bytes | 大端 | |
Size(该区块数据长度) | 4 Bytes | 小端 | |||
AudioFormat(音频格式) | 2 Bytes | 小端 | |||
NumChannels(声道数) | 2 Bytes | 小端 | |||
SampleRate(采样率) | 4 Bytes | 小端 | |||
ByteRate(每秒数据字节数) | 4 Bytes | 小端 | |||
BlockAlign(每个采样所需的字节数) | 2 Bytes | 小端 | |||
BitsPerSample(采样位数) | 2 Bytes | 小端 | |||
fact子块 | "fact" | 4 Byte | 大端 | ||
子块大小 | 4 Byte | 小端 | |||
子块数据 | 4 Byte | 小端 | |||
data子块 | “data” | 4 Byte | 大端 | ||
音频数据的长度 | 4 Byte | 小端 | |||
音频数据 | 4 Byte | 小端 |
- 端序:小端:低位在前,高位在后;大端:高位在前,低位在后
- ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
- BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
- BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit
- 音频数据的长度 = ByteRate * seconds
(2)data子块数据分布
- 8bit单声道
采样1 | 采样2 |
数据1 | 数据2 |
- 8bit双声道
采样1 | 采样2 | ||
声道1数据1 | 声道2数据1 | 声道1数据2 | 声道2数据2 |
- 16bit单声道
采样1 | 采样2 | ||
数据1低字节 | 数据1高字节 | 数据2低字节 | 数据2高字节 |
- 16bit双声道
采样1 | |||
声道1数据1低字节 | 声道1数据1高字节 | 声道2数据1低字节 | 声道2数据1高字节 |
采样2 | |||
声道1数据2低字节 | 声道1数据2高字节 | 声道2数据2低字节 | 声道2数据2高字节 |
3.实例分析
- 红色框1: 标识符RIFF(ASCII码)
- 黄色框2:数据大小=876516字节
- 绿色框3:文件类型WAVE(ASCII码)
- 蓝色框4:fmt空
- 紫色框5:fmt子块数据长度=16
- 蓝色线1:音频格式PCM
- 蓝色线2:声道数=2
- 蓝色线3:采样率=48000Hz
- 蓝色线4:每秒数据字节数=192000
- 蓝色线5:每个采样所需的字节数=4
- 蓝色线6:采样位数=16
- 橘色框6:DATA(ASCII码)
- 淡紫色框7:音频数据长度=876480
- 数据部分
参考文献
avi 文件格式解析_lxmnet123的专栏-CSDN博客_avi格式解析
分析WAV音频文件 - 知乎 (zhihu.com)
WAV文件格式解析_刘东的博客-CSDN博客_wav格式
WAV文件格式详解_imxiangzi的专栏-CSDN博客_wav格式
这篇关于AVI和WAV文件格式和实例分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!