apppublic/aidocs/wav.md
2025-10-05 11:23:33 +08:00

118 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 音频格式转换工具文档
## 概述
该模块提供了一个简单的音频处理函数,用于将任意 `.wav` 音频文件转换为 **16kHz 采样率、单声道Mono** 的标准格式。此格式常用于语音识别、语音合成等语音处理任务中,以确保输入音频满足模型要求。
使用了 `pydub` 库进行音频操作,依赖于 `ffmpeg``libav` 作为后端处理引擎。
---
## 依赖库
- `pydub`
- `ffmpeg`(需系统安装)
### 安装方法
```bash
pip install pydub
```
请确保系统中已安装 `ffmpeg`
- **macOS**: `brew install ffmpeg`
- **Ubuntu/Debian**: `sudo apt-get install ffmpeg`
- **Windows**: 下载并添加 `ffmpeg` 到系统环境变量,或通过 [https://ffmpeg.org](https://ffmpeg.org) 安装
---
## 函数说明
### `convert_to_16k_mono(in_wav_path: str, out_wav_path: str) -> None`
将指定路径的 WAV 音频文件转换为 16kHz 采样率、单声道格式,并保存到输出路径。
#### 参数
| 参数名 | 类型 | 说明 |
|----------------|--------|------------------------------|
| `in_wav_path` | `str` | 输入音频文件路径(必须是 WAV 格式) |
| `out_wav_path` | `str` | 输出音频文件保存路径 |
#### 功能
1. 使用 `AudioSegment.from_wav()` 加载输入音频。
2. 将音频采样率设置为 16000 Hz。
3. 将声道数设置为 1单声道
4. 导出处理后的音频为 WAV 格式至指定路径。
#### 示例用法
```python
convert_to_16k_mono("input.wav", "output_16k_mono.wav")
```
#### 注意事项
- 输入文件必须是有效的 `.wav` 文件。
- 输出目录需存在,否则会抛出异常。
- 若输出文件已存在,将被覆盖。
---
## 典型应用场景
- 为 ASR自动语音识别系统准备标准化输入音频。
- 统一不同来源音频的格式以便批量处理。
- 减少音频数据大小(降低采样率和声道数)。
---
## 完整示例代码
```python
from pydub import AudioSegment
def convert_to_16k_mono(in_wav_path, out_wav_path):
"""
将WAV音频转换为16kHz、单声道格式
参数:
in_wav_path (str): 输入音频路径
out_wav_path (str): 输出音频路径
"""
audio = AudioSegment.from_wav(in_wav_path)
audio = audio.set_frame_rate(16000).set_channels(1)
audio.export(out_wav_path, format="wav")
# 使用示例
# convert_to_16k_mono("input.wav", "output_16k_mono.wav")
```
---
## 错误处理建议(扩展功能)
虽然当前版本未包含异常处理,但在生产环境中建议添加如下改进:
```python
import os
from pydub import AudioSegment
def convert_to_16k_mono(in_wav_path, out_wav_path):
if not os.path.exists(in_wav_path):
raise FileNotFoundError(f"输入文件不存在: {in_wav_path}")
try:
audio = AudioSegment.from_wav(in_wav_path)
audio = audio.set_frame_rate(16000).set_channels(1)
audio.export(out_wav_path, format="wav")
except Exception as e:
raise RuntimeError(f"音频转换失败: {e}")
```
---
## 许可与版权
本代码为开源示例,遵循 MIT 风格许可,可用于学习、研究及商业项目(请根据实际依赖库的许可证合规使用)。