image.png
python wave音频库使用(二)
wave主要作用是操作WAV格式文件。
什么是WAV格式文件?
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。
图片上传中...(image.png-fc53c5-1587727221744-0)
WAV是意义上的无损音乐格式,简单说就是CD里文件的数字化格式。
但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间)。
image.png
每秒钟采集音频数据的次数.
采样频率越高,音频保真度越高。
计算机广泛配置的16位声卡,使用的采样频率通常包括11025Hz、22050Hz、44100Hz和48000Hz四种。
采用11025Hz采样的声音效果相当于电话声音的效果;
采用22050HZ采样的声音效果相当于FM调频广播的效果;
采用44100HZ采样的声音效果相当于CD声音的效果。
image.png
采样值或取样值,是用来衡量声音波动变化的一个参数,也是声卡的分辨率。
它的数值越大,分辨率也就越高,发出声音的能力越强。目前计算机中配置的16位声卡的采样位数包括8位和16位两种。
有单声道和立体声之分。
单声道的声音只能使用一个喇叭发声(有的声卡也将单声道信息处理成两个喇叭同时输出),立体声的WAV可以使两个喇叭都发声(一般左右声道有分工),这样更能感受到音频信息的空间效果。
显然,双声道数据还原特性更接近人们的听力习惯,但采集得到的数据量会增加1倍。
采样频率一般是44.1K,16bit采样精度
WAV格式大小 = 44.1KHz(采样频率) X 16bit(采样位数) X 2(双声道) X 播放时间
WAV格式是没有压缩无损的,MP3格式是按1:12压缩保存的,所以MP3格式大小等于上式的1/12
WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。
RIFF全称为资源互换文件格式(ResourcesInterchange FileFormat),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构。
能以RIFF文件存储的数据包括:
data | res |
---|---|
音频视频交错格式数据 | .AVI |
波形格式数据 | .WAV |
位图格式数据 | .RDI |
MIDI格式数据 | .RMI |
调色板格式 | .PAL |
多媒体电影 | .RMN |
动画光标 | .ANI |
其它RIFF文件 | .BND |
RIFF是由chunk构成的,chunk是RIFF组成的基本单位,每个CHUNK可看作存贮了视频的一帧数据或者是音频的一帧数据,所以下面我们来讨论一下chunk的结构是怎么样的.
image.png
CHUNK的结构如下:
数据 | 说明 |
---|---|
FOURCC | 使用4字节的ASIIC字符标识类型 |
SIZE | 数据的大小 |
DATA | 用于存放数据 |
代码如下:
struct chunk
{
uint32_t id; // 块标志
uint32_t size; // 块大小
uint8_t data[size]; // 块数据
};
偏移地址 | 字节数 | 数据类型 | 内容 |
---|---|---|---|
00H | 4 | char | “RIFF”; RIFF标志 |
04H | 4 | long int | 0x00 01 06 0A(注意数据存储顺序); 文件长度 |
08H | 4 | char | “WAVE”; WAVE标志 |
0CH | 4 | char | “fmt ”; fmt标志,最后一位为空 |
10H | 4 | long int | 0x12; sizeof(PCMWAVEFORMAT) |
14H | 2 | int | 1(WAVE_FORMAT_PCM); 格式类别,1表示为PCM形式的声音数据 |
16H | 2 | int | 2; 通道数,单声道为1,双声道为2 |
18H | 2 | int | 44100; 采样频率(每秒样本数) |
1CH | 4 | long int | 0x10B10000; 每秒数据量;其值为通道数×每秒数据位数×每样本的数据位数/8。播放软件利用此值可以估计缓冲区的大小。 |
20H | 2 | int | 数据块的调整数(按字节算的),其值为通道数×每样本的数据位值/8。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。 |
22H | 2 | int | 每样本的数据位数,表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言,样本大小都一样。 |
50H | 4 | char | “data”; 数据标记符 |
54H | 4 | long int | 0x00 01 05 D8; 语音数据大小 |