【数据压缩】wav格式初学习

来源:互联网 发布:捕鱼达人 h5源码 编辑:程序博客网 时间:2024/05/18 18:47

WAVE文件格式分析

格式图

Offset Size Name Description 0 4 ChunkId 四个字节,分别在ASCII表码中对应这”RIFF” 4 4 ChunkSize 36+SubChunk2Size,即(8~无限)个字节的数据,是这个文件的剩余字节数,除去ChunkSize+ChunkId 8 4 Format 包含ASCII码表中的”WAVE”字母 12 4 Subchunk1ID WAVE的第一个字块,所以这区域对应着”fmt” 16 4 Subchunk1Size 如果文件采用PCM编码,则该子块剩余字节数为16 20 2 AudioFormat 如果文件采用PCM编码 22 2 NumChanels 通道数,单声道为1,双声道为2 24 4 SampleRate 取样率 28 4 ByteRate 传输速率,单位为字节/s。==SampleRate*NumChanels*BitsPerSample/8 32 2 BlockAlign 每个样点所对应的字节数(包含所有通道)。== NumChannels * BitsPerSample/8 34 2 BitsPerSample 每个样点对应的位数 2 ExtraParamSize 这两个参数对应其他编码器 x ExtraParams 这两个参数对应其他编码器 36 4 Subchunk2ID 这是WAVE Chunk的第二个子块,这块区域对应着“data” 40 4 Subchunk2Size 为该子块剩余字节。 44 * Data 声音文件数据

Q:8bit和16bit样值的二进制编码方式表示一样吗?

A:8bit样值储存为unsighed bytes格式 ,取值范围为0-255。16bit样值则被储存为2字节signed integers,取值范围为-32768-32767。
值得一提的是,如果WAV文件通道数为2,左右声道交替储存。如下图棕色区域所示
这里写图片描述

Q:现有的WAV支持哪几种音频压缩方法?

A:
Code      Description
0 (0x0000)   Unknown
1 (0x0001)   PCM/uncompressed
2 (0x0002)   Microsoft ADPCM
6 (0x0006)   ITU G.711 a-law
7 (0x0007)   ITU G.711 µ-law
17 (0x0011)   IMA ADPCM
20 (0x0016)   ITU G.723 ADPCM (Yamaha)
49 (0x0031)   GSM 6.10
64 (0x0040)   ITU G.721 ADPCM
80 (0x0050)   MPEG
65,536 (0xFFFF)  Experimental
code对应着上文数据结构中的AudioFormat字段。

参考:http://blog.csdn.net/stelalala/article/details/17058755


将采样率48khz的wav文件转换成44.1khz

利用matlab读取wav(“Human Legacy人类遗产.wav”)数据,重采样后输出新的wav(“Human Legacy人类遗产_output.wav”)。

matlab代码:

    [x,fs] = audioread('E:\yasuo\wav\Human Legacy人类遗产.wav');    x1 = resample(x,44100,fs);    audiowrite('E:\yasuo\wav\Human Legacy人类遗产_output.wav',x1,44100,'BitsPerSample',24);

48k->44.1k不能直接进行整数倍关系抽样,用resample进行插值再抽样变换。
由于原文件的BitsPerSample在ultraedit中观察为24,在调用audiowrite()函数时指定输出文件的BitPerSample也为24,默认为16。

(代码如有错误请指正)

如下图,文件储存格式字节序为小端字节序。光标处24-27字节对应着SampleRate,hx’BB 80=d’48000。
48捕获.PNG

输出文件16进制查看如下图,对应着重采样后的SampleRate,
hx’AC 44 = 44100。
这里写图片描述

下采样后的音频文件时常没有发生变化,仍未4分58秒
这里写图片描述

0 0