wav格式分析

来源:互联网 发布:淘宝网服务电话 编辑:程序博客网 时间:2024/06/05 21:08

概述

Wave文件格式是用于存储数字音频数据的Windows本地文件格式。由于Windows的普及和为平台编写的大量程序,它已经成为PC上最广泛支持的数字音频文件格式之一。几乎每个可以打开和/或保存数字音频的现代程序都支持这种文件格式,这对软件开发人员来说是非常有用的和虚拟的要求。

数据格式

由于Wave文件格式是Windows原生的,因此Intel处理器,所有数据值都以Little-Endian (小端)顺序存储 。
Little-Endian :一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little endian 还是 Big endian 模式。
波形文件可能包含用于指定提示点标签,注释等的文本字符串。字符串以格式存储,其中第一个字节指定字符串中以下ASCII文本字节的数量。以下字节当然是组成文本字符串的ASCII字符字节。Pascal程序员会注意到这是与Pascal字符串相同的格式。

文件结构

波形文件使用标准的 RIFF 结构,将文件内容(样本格式,数字音频样本等)分组为单独的块,每个包含自己的头和数据字节。块头指定块数据字节的类型和大小。该组织方法允许不使用或识别特定类型的块的程序轻松跳过它们,并继续处理已知的块。某些类型的块可能包含子块。例如,在下图中,您可以看到“fmt”和“data”块实际上是“RIFF”块的子块。
RIFF文件块的一个棘手之处在于它们必须是字对齐的。这意味着它们的总大小必须是2个字节的倍数(即2,4,6,8等等)。如果一个块包含奇数个数据字节,使其不会被字对齐,那么值为零的额外填充字节必须跟随最后一个数据字节。这个额外的填充字节不计入块大小,因此程序必须总是对齐一个块头大小值,以便计算以下块的偏移量。
这里写图片描述

Wave中的块(chunk)

Wave文件头遵循标准的RIFF文件格式结构。文件中的前8个字节是标准的RIFF组块头,它具有块ID“RIFF”,并且大小等于文件大小减去标题使用的8个字节。“RIFF”块中的前4个数据字节决定了RIFF块中找到的资源类型。Wave文件总是使用“WAVE”。在RIFF类型出现定义音频波形的所有Wave文件块之后。
Wave文件只包含两个,特别是格式化块和数据块。这些是需要描述数字音频样本和样本本身的格式的两个块。虽然官方的Wave文件规范不是必需的,但最好在数据块之前放置格式化块。许多程序期望大块按此顺序存储,并且在从诸如因特网的缓慢的线性源流式传输数字音频时更为明智。如果格式是在数据之后,所有的数据,然后格式将不得不被流式传输,才能正确启动播放。
这里写图片描述
这里写图片描述

格式化块 - “fmt”

格式块包含有关波形数据的存储和应该被回放的信息,包括使用的压缩类型,通道数,采样率,每个采样位和其他属性。
这里写图片描述

问题:

(1)8bit和16bit样值的二进制编码表示一样吗?
8bit和16bit样值的二进制编码表示不一样。 编程时若要放入无声数据,首先需要判断声音格式是8位还是16位。无声是由中间数值来决定,Windows中将8位值的范围定为[0,255],16位值的范围定为[-32768,32767],即8位的时候为128为无声,l6位时0才是无声。
(2)现有的WAV支持哪几种音频压缩方法?
现有的*.WAV”格式支持MSADPCM、CCITT A LAW等多种压缩算法,支持多种音频位数、采样频率和声道。

0 0
原创粉丝点击