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

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

相关推荐
写代码的【黑咖啡】2 小时前
python的小型实践项目
开发语言·python
EasyDSS2 小时前
视频推流平台EasyDSS无人机推流直播技术在智慧消防场景中的应用
音视频·无人机
zyxczyf1232 小时前
软件工程test
python
阿水实证通2 小时前
DoubleML+FLAML实现双重机器学习超参数的自动调优(python实现路径)
人工智能·python·机器学习·实证分析
lkbhua莱克瓦242 小时前
反射4-反射获取成员变量
java·开发语言·servlet·反射
dawnButterfly2 小时前
C 语言标准、编译器与操作系统的关系
c语言·开发语言·c++
风景的人生2 小时前
一台电脑上可以同时运行多个JVM(Java虚拟机)实例
java·开发语言·jvm
攻城狮之路人甲2 小时前
用pycharm写的程序,点击.py无法运行闪退
ide·python·pycharm
syt_biancheng2 小时前
大规模考试系统性能优化与风险评估
python·功能测试·selenium·性能优化·postman