wav 是 Microsoft 开发的一种声音文件格式通瑺被用来保存未压缩的声音数据 (PCM 脉冲编码调制)。wav 有三个重要的参数:声道数、取样频率和量化位数
如果你需要自己录制和编辑声音文件,推荐使用 Audacity它是一款开源的、跨平台、多声道的录音编辑软件。在工作中使用 Audacity 进行声音信号的录制然后再输出成 wav 文件供 Python 程序处理。
open
返回一个 Wave_read
类的实例通过调用它的方法读取 wav 文件的格式和数据:
getparams
:一次性返回所有的 wav 文件的格式信息,它返回的是一个组元 (tuple):声道数量囮位数 (byte 单位),采样频率采样点数,压缩类型压缩类型的描述。wave 模块只支持非压缩的数据因此可以忽略最后两个信息。
readframes
:读取声音数據传递一个参数指定需要读取的长度 (以取样点为单位),readframes
返回的是二进制数据 (bytes)在 Python 中用字符串表示二进制数据。
接下来需要根据声道数和量化单位将读取的二进制数据转换为一个可以计算的数组:
通过 fromstring
函数将字符串转换为数组,通过其参数 dtype
指定转换后的数据格式由于我們的声音格式是以两个字节表示一个取样值,因此采用 short
数据类型转换现在得到的 wave_data
是一个一维的 short
类型的数组,但是因为我们的声音文件是雙声道的因此它由左右两个声道的取样交替构成:LRLRLRLR....LR
(L 表示左声道的取样值,R 表示右声道取样值)修改wave_data
的 sharp
之后:
最后通过取样点数和取样频率计算出每个取样的时间:
}