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

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

相关推荐
孟健8 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞10 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽12 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程17 小时前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪17 小时前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook17 小时前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田1 天前
使用 pkgutil 实现动态插件系统
python
前端付豪1 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽1 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战1 天前
Pydantic配置管理最佳实践(一)
python