专栏首页算法微时光python wave音频库使用(一)

python wave音频库使用(一)

image.png

目录

python wave音频库使用(一) python wave音频库使用(二)

wave

wave主要作用是操作WAV格式文件。

什么是WAV格式文件?

WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。 [图片上传中...(image.png-fc53c5-1587727221744-0)]

WAV是意义上的无损音乐格式,简单说就是CD里文件的数字化格式。

但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大(每分钟的音乐大约需要12兆磁盘空间)。

image.png

WAV音频相关因素

采样频率

每秒钟采集音频数据的次数.

采样频率越高,音频保真度越高。

计算机广泛配置的16位声卡,使用的采样频率通常包括11025Hz、22050Hz、44100Hz和48000Hz四种。

采用11025Hz采样的声音效果相当于电话声音的效果; 采用22050HZ采样的声音效果相当于FM调频广播的效果; 采用44100HZ采样的声音效果相当于CD声音的效果。

image.png

采样位数(振幅采样精度)

采样值或取样值,是用来衡量声音波动变化的一个参数,也是声卡的分辨率。

它的数值越大,分辨率也就越高,发出声音的能力越强。目前计算机中配置的16位声卡的采样位数包括8位和16位两种。

声道数

有单声道和立体声之分。

单声道的声音只能使用一个喇叭发声(有的声卡也将单声道信息处理成两个喇叭同时输出),立体声的WAV可以使两个喇叭都发声(一般左右声道有分工),这样更能感受到音频信息的空间效果。

显然,双声道数据还原特性更接近人们的听力习惯,但采集得到的数据量会增加1倍。

WAV格式大小计算

采样频率一般是44.1K,16bit采样精度

WAV格式大小 = 44.1KHz(采样频率) X 16bit(采样位数) X 2(双声道) X 播放时间

WAV格式是没有压缩无损的,MP3格式是按1:12压缩保存的,所以MP3格式大小等于上式的1/12

wav文件格式

WAVE文件是非常简单的一种RIFF文件,它的格式类型为"WAVE"。

什么是RIFF文件

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; 语音数据大小

参考

百度百科 wav音频文件格式解析【个人笔记】(自用) Python处理wave文件 RIFF文件是什么 RIFF和WAVE音频文件格式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • cmake使用

    CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装编译过程。

    李小白是一只喵
  • autoMake工具使用实例(Hello, World!)

    Makefile的 基本结构不是 很复杂,但当一个程序开发人员开始写Makefile时,经常会怀疑自己写的 是 否符合惯例,而且自己写的 Makefile经常和...

    李小白是一只喵
  • Android Context简介

    从安卓程序的角度来看,Context是什么?其实一个Activity就是一个Context,一个Service也是一个Context。

    李小白是一只喵
  • python支持多继承吗

    大部分面向对象的编程语言(除了C++)都只支持单继承,而不支持多继承,为什么呢?因为多继承不仅增加编程复杂度,而且容易导致莫名其妙的错误。

    砸漏
  • 借开放平台连接时代

    “互联网+”写进2015年的《政府工作报告》,使其一举成为2015年的中国热词;而伴随国家发改委着手“互联网+”行动计划的制定,可以预见,中国社会发展即将进入“...

    Frank
  • 同学,“晒光盘”了!腾讯微校联合AI Lab发起“百校光盘行动”

    10月16日是第40个世界粮食日,上海、深圳等多所高校联合腾讯微校在当天推出了“百校光盘行动”,首次将AI智能识别系统与“光盘行动"相结合,打造了一场“走心”...

    鹅老师
  • 杨辉三角形

    梦_之_旅
  • 享知行·思考:万丈高楼平地起,聊聊基础那些事

    最近在听陈皓(网名左耳朵耗子)的技术专栏,他是一个技术大牛,在亚马逊和阿里担任过架构师,对分布式有非常深入的理解和研究,他不仅技术好,文笔也非常不错,写了很多有...

    用户4361942
  • 堪比魔法水晶球!人工智能变身“占卜师”

    镁客网
  • mongodb分片

    分别在三台机器上面创建 mkdir -pv /data/mongodb/mongos/log mkdir -pv /data/mongodb/config/{d...

    零月

扫码关注云+社区

领取腾讯云代金券