wave 是 Python 标准库中用于读写 WAV(Waveform Audio File Format)音频文件的模块。它提供了对 PCM 编码的无压缩音频文件的访问接口,可以读取音频帧、获取音频参数,也可以创建和写入 WAV 文件。由于 WAV 是常用的音频格式之一,wave 模块在音频处理、信号分析、语音识别等场景中非常实用。

常见应用场景:

(1)音频文件读取

从 WAV 文件中提取音频帧和参数,用于分析或播放。

(2)音频文件生成

将 PCM 数据写入 WAV 文件,生成音频。

(3)音频处理与信号分析

与 、 等结合,实现音频特征提取或数字信号处理。

(4)语音处理

对语音数据进行采样、帧切分、特征分析等。

(5)自动化音频生成工具

生成提示音、告警音或其他简单音效。

◆ ◆

核心概念

1、Wave_read 对象

通过 wave.open(file, "rb") 创建,用于读取 WAV 文件的参数和帧数据。

2、Wave_write 对象

通过 wave.open(file, "wb") 创建,用于写入 WAV 文件。

3、音频参数

nchannels:声道数(1=单声道,2=立体声)

sampwidth:每个采样字节数(如 2 表示 16 位)

framerate:采样率(Hz)

nframes:音频帧总数

comptype / compname:压缩类型,WAV 通常为 "NONE"

4、帧操作

readframes(n):读取 n 帧数据

writeframes(data):写入帧数据

音频帧是二进制数据,可与 struct 或 numpy 结合处理。

◆ ◆

应用举例

例 1:读取 WAV 文件基本信息

    print("总帧数:", wf.getnframes())

例 2:读取音频帧

    print("帧数据长度:", len(frames))

例 3:写入 WAV 文件

    wf.writeframes(b"\x00\x00" * 44100)  # 1 秒静音

例 4:复制 WAV 文件

        dst.writeframes(src.readframes(src.getnframes()))

例 5:使用 numpy 处理 WAV 数据

    print("前 10 个采样值:", data[:10])

◆ ◆

常用 API 与方法

wave.open(filename, mode)

打开 WAV 文件,返回 Wave_read 或 Wave_write 对象。

参数

filename:文件路径。

mode:模式 "rb"(读取)或 "wb"(写入)。

返回:Wave_read / Wave_write 实例。

Wave_read.getnchannels()

获取声道数。

返回:整数(声道数)。

Wave_read.getsampwidth()

获取每个采样字节数。

返回:整数(字节数)。

Wave_read.getframerate()

获取采样率(Hz)。

返回:整数。

Wave_read.getnframes()

获取音频帧总数。

返回:整数。

Wave_read.readframes(n)

读取 n 帧音频数据。

参数

n:读取帧数。

返回:字节对象(frames)。

Wave_write.setnchannels(n)

设置声道数。

参数:整数。

返回:无。

Wave_write.setsampwidth(n)

设置采样宽度(字节数)。

参数:整数。

返回:无。

Wave_write.setframerate(rate)

设置采样率。

参数:整数。

返回:无。

Wave_write.writeframes(data)

写入音频帧。

参数:字节对象。

返回:无。

小结

wave 模块提供了对 WAV 音频文件的读取与写入能力,适用于音频分析、信号处理、语音处理和自动化音效生成。通过 Wave_read 和 Wave_write 对象,可以方便地获取音频参数、操作帧数据,并结合 numpy 或 scipy 进行深度处理,实现数据分析和音频生成。

打开网易新闻 查看精彩图片

点赞有美意,赞赏是鼓励