190 lines
4.5 KiB
Markdown
190 lines
4.5 KiB
Markdown
# 多进程音频录音系统
|
||
|
||
基于进程隔离的音频处理架构,实现零延迟的录音和播放切换。
|
||
|
||
## 🚀 系统特点
|
||
|
||
### 核心优势
|
||
- **多进程架构**: 输入输出进程完全隔离,无需设备重置
|
||
- **零切换延迟**: 彻底解决传统单进程的音频切换问题
|
||
- **实时响应**: 并行处理录音和播放,真正的实时体验
|
||
- **智能检测**: 基于ZCR(零交叉率)的精确语音识别
|
||
- **流式TTS**: 实时音频生成和播放,减少等待时间
|
||
- **角色扮演**: 支持多种AI角色和音色
|
||
|
||
### 技术架构
|
||
```
|
||
主控制进程 ──┐
|
||
├─ 输入进程 (录音 + 语音检测)
|
||
├─ 输出进程 (音频播放)
|
||
└─ 在线AI服务 (STT + LLM + TTS)
|
||
```
|
||
|
||
## 📦 文件结构
|
||
|
||
```
|
||
Local-Voice/
|
||
├── recorder.py # 原始实现 (保留作为参考)
|
||
├── multiprocess_recorder.py # 主程序
|
||
├── audio_processes.py # 音频进程模块
|
||
├── control_system.py # 控制系统模块
|
||
├── config.json # 配置文件
|
||
└── characters/ # 角色配置目录
|
||
├── libai.json # 李白角色
|
||
└── zhubajie.json # 猪八戒角色
|
||
```
|
||
|
||
## 🛠️ 安装和运行
|
||
|
||
### 1. 环境要求
|
||
- Python 3.7+
|
||
- 音频输入设备 (麦克风)
|
||
- 网络连接 (用于在线AI服务)
|
||
|
||
### 2. 安装依赖
|
||
```bash
|
||
pip install pyaudio numpy requests websockets
|
||
```
|
||
|
||
### 3. 设置API密钥
|
||
```bash
|
||
export ARK_API_KEY='your_api_key_here'
|
||
```
|
||
|
||
### 4. 基本运行
|
||
```bash
|
||
# 使用默认角色 (李白)
|
||
python multiprocess_recorder.py
|
||
|
||
# 指定角色
|
||
python multiprocess_recorder.py -c zhubajie
|
||
|
||
# 列出可用角色
|
||
python multiprocess_recorder.py -l
|
||
|
||
# 使用配置文件
|
||
python multiprocess_recorder.py --config config.json
|
||
|
||
# 创建示例配置文件
|
||
python multiprocess_recorder.py --create-config
|
||
```
|
||
|
||
## ⚙️ 配置说明
|
||
|
||
### 主要配置项
|
||
|
||
| 配置项 | 说明 | 默认值 |
|
||
|--------|------|--------|
|
||
| `recording.min_duration` | 最小录音时长(秒) | 2.0 |
|
||
| `recording.max_duration` | 最大录音时长(秒) | 30.0 |
|
||
| `recording.silence_threshold` | 静音检测阈值(秒) | 3.0 |
|
||
| `detection.zcr_min` | ZCR最小值 | 2400 |
|
||
| `detection.zcr_max` | ZCR最大值 | 12000 |
|
||
| `processing.max_tokens` | LLM最大token数 | 50 |
|
||
|
||
### 音频参数
|
||
- 采样率: 16kHz
|
||
- 声道数: 1 (单声道)
|
||
- 位深度: 16位
|
||
- 格式: PCM
|
||
|
||
## 🎭 角色系统
|
||
|
||
### 支持的角色
|
||
- **libai**: 李白 - 文雅诗人风格
|
||
- **zhubajie**: <20>豬八戒 - 幽默风趣风格
|
||
|
||
### 自定义角色
|
||
在 `characters/` 目录创建JSON文件:
|
||
|
||
```json
|
||
{
|
||
"name": "角色名称",
|
||
"description": "角色描述",
|
||
"system_prompt": "系统提示词",
|
||
"voice": "zh_female_wanqudashu_moon_bigtts",
|
||
"max_tokens": 50
|
||
}
|
||
```
|
||
|
||
## 🔧 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **音频设备问题**
|
||
```bash
|
||
# 检查音频设备
|
||
python multiprocess_recorder.py --check-env
|
||
```
|
||
|
||
2. **依赖缺失**
|
||
```bash
|
||
# 重新安装依赖
|
||
pip install --upgrade pyaudio numpy requests websockets
|
||
```
|
||
|
||
3. **网络连接问题**
|
||
- 检查网络连接
|
||
- 确认API密钥正确
|
||
- 检查防火墙设置
|
||
|
||
4. **权限问题**
|
||
```bash
|
||
# Linux系统可能需要音频权限
|
||
sudo usermod -a -G audio $USER
|
||
```
|
||
|
||
### 调试模式
|
||
```bash
|
||
# 启用详细输出
|
||
python multiprocess_recorder.py -v
|
||
```
|
||
|
||
## 📊 性能对比
|
||
|
||
| 指标 | 原始单进程 | 多进程架构 | 改善 |
|
||
|------|-----------|------------|------|
|
||
| 切换延迟 | 1-2秒 | 0秒 | 100% |
|
||
| CPU利用率 | 单核 | 多核 | 提升 |
|
||
| 响应速度 | 较慢 | 实时 | 显著改善 |
|
||
| 稳定性 | 一般 | 优秀 | 大幅提升 |
|
||
|
||
## 🔄 与原版本对比
|
||
|
||
### 原版本 (recorder.py)
|
||
- 单进程处理
|
||
- 需要频繁重置音频设备
|
||
- 录音和播放不能同时进行
|
||
- 切换延迟明显
|
||
|
||
### 新版本 (multiprocess_recorder.py)
|
||
- 多进程架构
|
||
- 输入输出完全隔离
|
||
- 零切换延迟
|
||
- 真正的并行处理
|
||
- 更好的稳定性和扩展性
|
||
|
||
## 📝 开发说明
|
||
|
||
### 架构设计
|
||
- **输入进程**: 专注录音和语音检测
|
||
- **输出进程**: 专注音频播放
|
||
- **主控制进程**: 协调整个系统和AI处理
|
||
|
||
### 进程间通信
|
||
- 使用 `multiprocessing.Queue` 进行安全通信
|
||
- 支持命令控制和事件通知
|
||
- 线程安全的音频数据传输
|
||
|
||
### 状态管理
|
||
- 清晰的状态机设计
|
||
- 完善的错误处理机制
|
||
- 优雅的进程退出流程
|
||
|
||
## 📄 许可证
|
||
|
||
本项目仅供学习和研究使用。
|
||
|
||
## 🤝 贡献
|
||
|
||
欢迎提交Issue和Pull Request来改进这个项目。 |