认识数字音频:
数字音频的有关属性:
采样频率(Sample Rate):每秒采集声音的数量,它用赫兹(Hz)来表示。(采样率越高越靠近原声音的波形)
采样精度(Bit Depth):指记录声音的动态范围,它以位(Bit)为单位。(声音的幅度差)
声音通道(Channel):声道数。比如左声道右声道。
帧(Frame):帧记录了一个声音单元,其长度为样本长度(采样位数)和通道数的乘积。
采样量化后的音频最终是一串数字,声音的大小(幅度)会体现在这个每个数字数值大小上;而声音的高低(频率)和声音的音色(Timbre)都和时间维度有关,会体现在数字之间的差异上。
下面是wav文件的格式:
image
wave音频格式的数据以"RIFF"开头,其格式说明如下:
偏移量 大小 名字 说明
0 4 ChunkID "RIFF"的ASCII码0x52494646
4 4 ChunkSize 36 + SubChunk2Size, or more precisely:
4 + (8 + SubChunk1Size) + (8 + SubChunk2Size)表示这个
字段之后的字节数,因为次字段到SubChunk2Size 的字节数是
36,所以也就是ChunkSize=SubChunk2Size + 36
8 4 Format "WAVE"的ASCII码0x57415645
"WAVE"格式有两个下级块组成: "fmt"和"data"
"fmt"描述了声频文件的数据格式:
12 4 Subchunk1ID "fmt"的ASCII码0x666d7420
16 4 Subchunk1Size 第一个下级块大小,PCM为十六
20 2 AudioFormat PCM = 1 (i.e. Linear quantization) Values other than
1 indicate some form of compression.
22 2 NumChannels Mono = 1, Stereo = 2, etc.代表声道数量
24 4 SampleRate 8000, 44100, etc.采样频率
28 4 ByteRate == SampleRate * NumChannels * BitsPerSample/8
32 2 BlockAlign == NumChannels * BitsPerSample/8 代表一个声音样本占用的
字节数(包含所有声道在内)
34 2 BitsPerSample 8 bits = 8, 16 bits = 16, etc.
2 ExtraParamSize if PCM, then doesn't exist
X ExtraParams space for extra parameters
"data"块描述了声频数据及其大小:
36 4 Subchunk2ID "data"的ASCII码0x64617461
40 4 Subchunk2Size == NumSamples * NumChannels * BitsPerSample/8 音频数据
的字节数
44 * Data 音频数据
As an example, here are the opening 72 bytes of a WAVE file with bytes shown as hexadecimal numbers:
举个例子,下面的数据是一个wave文件的前72个字节
52 49 46 46 24 08 00 00 57 41 56 45 66 6d 74 20 10 00 00 00
01 00 02 00 22 56 00 00 88 58 01 00 04 00 10 00 64 61 74 61
00 08 00 00 00 00 00 00 24 17 1e f3 3c 13 3c 14 16 f9 18 f9
34 e7 23 a6 3c f2 24 f2 11 ce 1a 0d
其解析如下:
image
BitsPerSample代表了一个声音样本单个声道的声音数据的位数,16/8=2个字节。
每一个Sample表示一个声音样本,如本例,有两个声道,所以前两个字节为右声道声音数据,后两个字节为左声道声音数据,两个声道合起来为一个声音样本,其大小为4个字节=BlockAlign。
网友评论