# 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` - 项目结构说明

## 许可证

请参考原项目的许可证文件。

## 贡献

欢迎提交问题报告和功能请求。