Python 库手册:wave WAV 音频读写工具

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

常见应用场景:

(1)音频文件读取

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

(2)音频文件生成

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

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

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

(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 文件基本信息

python 复制代码
import wave
with wave.open("example.wav", "rb") as wf:    print("声道数:", wf.getnchannels())    print("采样宽度:", wf.getsampwidth())    print("采样率:", wf.getframerate())    print("总帧数:", wf.getnframes())

例 2:读取音频帧

python 复制代码
import wave
with wave.open("example.wav", "rb") as wf:    frames = wf.readframes(wf.getnframes())    print("帧数据长度:", len(frames))

例 3:写入 WAV 文件

python 复制代码
import wave
with wave.open("output.wav", "wb") as wf:    wf.setnchannels(1)        # 单声道    wf.setsampwidth(2)        # 16 位    wf.setframerate(44100)    # 采样率    wf.writeframes(b"\x00\x00" * 44100)  # 1 秒静音

例 4:复制 WAV 文件

css 复制代码
import wave
with wave.open("example.wav", "rb") as src:    with wave.open("copy.wav", "wb") as dst:        dst.setnchannels(src.getnchannels())        dst.setsampwidth(src.getsampwidth())        dst.setframerate(src.getframerate())        dst.writeframes(src.readframes(src.getnframes()))

例 5:使用 numpy 处理 WAV 数据

python 复制代码
import waveimport numpy as np
with wave.open("example.wav", "rb") as wf:    frames = wf.readframes(wf.getnframes())    data = np.frombuffer(frames, dtype=np.int16)    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 进行深度处理,实现数据分析和音频生成。

"点赞有美意,赞赏是鼓励"

相关推荐
是小蟹呀^17 小时前
【总结】提示词工程
python·llm·prompt·agent
YBAdvanceFu17 小时前
从零构建智能体:深入理解 ReAct Plan Solve Reflection 三大经典范式
人工智能·python·机器学习·数据挖掘·多智能体·智能体
hoiii18717 小时前
CSTR反应器模型的Simulink-PID仿真(MATLAB实现)
开发语言·matlab
王夏奇17 小时前
python中的__all__ 具体用法
java·前端·python
王夏奇17 小时前
pycharm中3种不同类型的python文件
ide·python·pycharm
炘爚18 小时前
C++ 右值引用与程序优化
开发语言·c++
小陈的进阶之路18 小时前
Selenium 滑动 vs Appium 滑动
python·selenium·测试工具·appium
Mike_66618 小时前
txt_json和xml_json
xml·python·json
si莉亚18 小时前
ROS2安装EVO工具包
linux·开发语言·c++·开源
清心歌18 小时前
CopyOnWriteArrayList 实现原理
java·开发语言