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 进行深度处理,实现数据分析和音频生成。

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

相关推荐
精彩极了吧1 分钟前
C语言基本语法-自定义类型:结构体&联合体&枚举
c语言·开发语言·枚举·结构体·内存对齐·位段·联合
好家伙VCC27 分钟前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
南极星10051 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言
baidu_247438611 小时前
Android ViewModel定时任务
android·开发语言·javascript
拾荒的小海螺1 小时前
开源项目:LTX2 高效可控的开源视频生成模型
开源·音视频
Dev7z1 小时前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
不能隔夜的咖喱1 小时前
牛客网刷题(2)
java·开发语言·算法
前端玖耀里2 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people2 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源2 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067