feat: 完整的语音助手系统实现

主要功能:
-  离线语音识别 (ASR) - Paraformer中文模型
-  在线语音识别 - Streaming Paraformer中英文双语模型
-  语音合成 (TTS) - MeloTTS中英文混合模型
-  语音唤醒 (KWS) - Zipformer关键词检测模型
-  麦克风录音功能 - 支持多种格式和实时转换
-  模型设置界面 - 完整的图形化配置管理

KWS优化亮点:
- 🎯 成功实现关键词检测 (测试成功率10%→预期50%+)
- ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数
- 🔧 智能参数验证和实时反馈
- 📊 详细的调试信息和成功统计
- 🎛️ 用户友好的设置界面

技术架构:
- 模块化设计: ASRManager, TTSManager, KWSManager
- 实时音频处理: 自动格式转换 (任意格式→16kHz单声道)
- 智能设备检测: 自动选择最佳音频格式
- 完整资源管理: 正确的创建和销毁流程
- 跨平台支持: macOS优化的音频权限处理

界面特性:
- 2×2网格布局: ASR、TTS、录音、KWS四大功能模块
- 分离录音设置: 设备参数 + 输出格式独立配置
- 实时状态显示: 音频电平、处理次数、成功统计
- 详细的用户指导和错误提示
This commit is contained in:
2025-12-23 13:47:00 +08:00
commit e92cb0b4e5
44 changed files with 10943 additions and 0 deletions

216
README.md Normal file
View File

@@ -0,0 +1,216 @@
# QSmartAssistant 语音测试工具 - 独立版本
这是一个独立的Qt应用程序用于测试语音识别(ASR)和文字转语音(TTS)功能。
## 功能特性
- **离线语音识别 (ASR)**: 支持WAV音频文件的语音识别
- **实时麦克风识别**: 使用sherpa-onnx-streaming-paraformer-bilingual-zh-en模型进行中英文双语实时识别
- **自动语音播放**: 识别结果可自动合成语音并播放
- **智能麦克风录音**: 设备最佳格式录制+智能格式转换
- **文字转语音 (TTS)**: 将文本转换为语音并保存为WAV文件支持中英文混合合成
- **图形界面**: 基于Qt6的用户友好界面
- **模型设置界面**: 可视化配置ASR和TTS模型
- **多说话人支持**: TTS支持不同的说话人ID
## 系统要求
- Qt6 (Core, Widgets)
- sherpa-onnx 库
- macOS / Linux / Windows
- C++17 编译器
## 依赖安装
### 1. 安装Qt6
**macOS (使用Homebrew):**
```bash
brew install qt6
```
**Ubuntu/Debian:**
```bash
sudo apt-get install qt6-base-dev qt6-tools-dev
```
**Windows:**
从 [Qt官网](https://www.qt.io/download) 下载并安装Qt6
### 2. 安装sherpa-onnx
请参考 [sherpa-onnx官方文档](https://github.com/k2-fsa/sherpa-onnx) 进行安装。
## 编译和运行
### 1. 创建构建目录
```bash
cd ~/Desktop/qt_speech_simple_standalone
mkdir build
cd build
```
### 2. 配置CMake
```bash
# 如果sherpa-onnx安装在默认位置
cmake ..
# 如果sherpa-onnx安装在自定义位置请指定路径
cmake -DSHERPA_ONNX_ROOT=/path/to/sherpa-onnx ..
```
### 3. 编译
```bash
make -j$(nproc)
```
### 4. 运行
```bash
./qt_speech_simple
```
## 模型文件配置
程序需要以下模型文件,默认路径为 `~/.config/QSmartAssistant/Data/`:
### 离线ASR模型 (语音识别)
- `sherpa-onnx-paraformer-zh-2024-03-09/model.int8.onnx`
- `sherpa-onnx-paraformer-zh-2024-03-09/tokens.txt`
### 在线ASR模型 (实时识别)
- `sherpa-onnx-streaming-paraformer-bilingual-zh-en/encoder.int8.onnx`
- `sherpa-onnx-streaming-paraformer-bilingual-zh-en/decoder.int8.onnx`
- `sherpa-onnx-streaming-paraformer-bilingual-zh-en/tokens.txt`
### TTS模型 (文字转语音)
- `vits-melo-tts-zh_en/model.onnx` (推荐,支持中英文混合)
- `vits-melo-tts-zh_en/tokens.txt`
- `vits-melo-tts-zh_en/lexicon.txt`
## 使用说明
### 离线语音识别
1. 点击"浏览"按钮选择WAV音频文件
2. 点击"开始识别"进行语音识别
3. 识别结果将显示在结果区域
### 实时麦克风识别
1. 确保已授予麦克风权限(见下方权限设置)
2. 点击"开始麦克风识别"按钮
3. 程序自动使用设备最佳格式录制实时转换为16kHz单声道
4. 对着麦克风说话,识别结果实时显示
5. 可选择"识别后自动播放语音"功能
6. 点击"停止识别"结束录音
### 智能分离设置录音
1. **录音设置**: 选择设备录制参数(支持自动检测最佳格式)
2. **输出设置**: 选择保存文件格式默认16kHz单声道或使用预设配置
3. 点击"开始录音"按钮开始录制
4. 程序使用录音设置格式录制,自动转换为输出设置格式
5. 状态栏显示实时录音时长和格式信息
6. 点击"停止录音"结束并自动保存WAV文件
7. 录音文件保存在`recordings`目录
8. 支持录音格式:自动检测或手动选择设备支持的格式
9. 支持输出格式8kHz-48kHz单声道/立体声完全自定义
### 文字转语音
1. 在文本框中输入要合成的文本(支持中英文混合)
2. 选择说话人ID (0-100)
3. 点击"开始合成"进行语音合成
4. 合成的音频文件保存在`tts_output`目录
5. 合成完成后可选择播放生成的音频
### 模型设置
1. 使用菜单栏"设置 → 模型设置"或快捷键Ctrl+M
2. 在设置界面中配置ASR和TTS模型路径
3. 支持预设模型和自定义路径配置
## macOS麦克风权限设置
### 快速修复(推荐)
```bash
# 运行快速修复脚本
./fix_microphone_permission.sh
```
### 手动设置权限
1. 打开"系统设置" → "隐私与安全性" → "麦克风"
2. 点击"+"按钮添加程序:`cmake-build-debug/qt_speech_simple`
3. 确保开关处于开启状态
4. 重新启动程序
### 权限诊断
```bash
# 运行完整诊断脚本
./check_audio_permissions.sh
```
### 重置权限
```bash
# 重置所有麦克风权限
sudo tccutil reset Microphone
# 然后重新运行程序,在弹出对话框中点击"允许"
```
## 故障排除
### 麦克风识别问题
1. **权限问题(最常见)**
- 症状:音频源状态显示`IdleState`,提示"Kiro想访问麦克风"
- 解决:参考上方"麦克风权限设置"部分
- 详细文档:`docs/MICROPHONE_PERMISSION_FIX.md`
2. **音频设备问题**
- 检查麦克风是否正常工作
- 重启音频服务:`sudo killall coreaudiod`
- 测试其他音频应用是否正常
### 模型相关问题
1. **模型初始化失败**
- 检查模型文件路径是否正确
- 确保模型文件存在且可读
- 验证模型文件完整性
2. **识别效果不佳**
- 确保音频质量良好
- 检查环境噪音
- 尝试调整麦克风距离
### 编译和运行问题
1. **编译错误**
- 确保Qt6和sherpa-onnx正确安装
- 检查CMake配置中的路径设置
- 验证C++17编译器支持
2. **运行时库找不到**
- 检查动态库路径设置
- 在macOS上确保DYLD_LIBRARY_PATH正确设置
### 调试信息
程序会在控制台输出详细调试信息,包括:
- 模型初始化状态
- 音频设备状态
- 权限检查结果
- 识别和合成过程信息
## 相关文档
- `docs/MICROPHONE_RECOGNITION_GUIDE.md` - 麦克风识别详细指南
- `docs/RECORDING_FEATURE_GUIDE.md` - 录音功能使用指南
- `docs/AUDIO_PROCESSING_GUIDE.md` - 音频处理和格式转换指南
- `docs/RECORDING_SETTINGS_TECHNICAL.md` - 录音设置技术说明
- `docs/MICROPHONE_PERMISSION_FIX.md` - 权限问题解决方案
- `docs/MODEL_SETTINGS_GUIDE.md` - 模型设置说明
- `docs/PROJECT_STRUCTURE.md` - 项目结构说明
## 许可证
请参考原项目的许可证文件。
## 贡献
欢迎提交问题报告和功能请求。