118 lines
3.2 KiB
Markdown
118 lines
3.2 KiB
Markdown
# 音频格式转换工具文档
|
||
|
||
## 概述
|
||
|
||
该模块提供了一个简单的音频处理函数,用于将任意 `.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 风格许可,可用于学习、研究及商业项目(请根据实际依赖库的许可证合规使用)。 |