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

View File

@@ -0,0 +1,171 @@
# 模型设置界面更新说明
## 🎯 更新概述
本次更新对QSmartAssistant的模型设置界面进行了重大改进主要包括
1. 将ASR设置分离为离线ASR和在线ASR两个独立标签页
2. 移除了VITS中英文混合模型选项
3. 移除了识别后自动播放语音功能
## 🔄 主要变更
### 1. ASR设置分离
**之前**:单一的"语音识别(ASR)"标签页
**现在**:分为两个独立标签页
#### 离线语音识别标签页
- **用途**:配置用于文件识别的离线模型
- **预设模型**
- Paraformer中文模型
- Whisper多语言模型
- 自定义模型
- **配置项**
- 模型文件(.onnx)
- 词汇表文件(tokens.txt)
#### 在线语音识别标签页
- **用途**:配置用于实时麦克风识别的在线模型
- **预设模型**
- Streaming Paraformer中英文模型
- Streaming Zipformer中英文模型
- 自定义模型
- **配置项**
- 编码器文件(encoder.onnx)
- 词汇表文件(tokens.txt)
### 2. TTS模型选项简化
**移除的选项**
- ❌ VITS中英文混合模型
**保留的选项**
- ✅ MeloTTS中英文混合模型
- ✅ VITS中文模型
- ✅ 自定义模型
**原因**:简化用户选择,专注于稳定可靠的模型选项。
### 3. 移除自动播放功能
**移除的功能**
- ❌ "识别后自动播放语音"复选框
- ❌ 自动合成和播放识别结果的功能
- ❌ synthesizeAndPlayText方法
**原因**
- 简化用户界面
- 减少不必要的功能复杂性
- 用户可以手动选择是否播放合成的语音
## 🏗️ 技术实现
### 代码结构变更
#### ModelSettingsDialog.h
```cpp
// 新增方法
ModelConfig getCurrentOfflineASRConfig() const;
ModelConfig getCurrentOnlineASRConfig() const;
void setCurrentOfflineASRConfig(const ModelConfig& config);
void setCurrentOnlineASRConfig(const ModelConfig& config);
// 新增UI组件
QWidget* offlineAsrTab;
QWidget* onlineAsrTab;
// ... 相关控件
```
#### ModelSettingsDialog.cpp
- 新增 `setupOfflineASRTab()` 方法
- 新增 `setupOnlineASRTab()` 方法
- 更新配置保存和加载逻辑
- 分离离线和在线ASR的验证逻辑
#### SpeechTestMainWindow.h/cpp
- 移除 `autoPlayCheckBox` 控件
- 移除 `synthesizeAndPlayText()` 方法
- 更新模型设置对话框调用
### 配置存储结构
**新的配置分组**
```ini
[OfflineASR]
modelPath=...
tokensPath=...
modelType=...
[OnlineASR]
modelPath=...
tokensPath=...
modelType=...
[TTS]
modelPath=...
tokensPath=...
lexiconPath=...
dictDirPath=...
dataDirPath=...
modelType=...
```
## 🎨 用户体验改进
### 更清晰的功能分离
- 用户可以明确区分离线和在线识别的配置
- 每个标签页专注于特定的使用场景
- 减少配置混淆的可能性
### 简化的界面
- 移除了不常用的自动播放功能
- 减少了TTS模型选项的复杂性
- 更专注的功能设计
### 更好的可扩展性
- 分离的ASR配置为未来添加更多模型类型提供了基础
- 清晰的代码结构便于维护和扩展
## 📋 使用指南
### 配置离线ASR
1. 打开"设置" → "模型设置"
2. 切换到"离线语音识别"标签页
3. 选择预设模型或自定义配置
4. 指定模型文件和词汇表文件路径
### 配置在线ASR
1. 切换到"在线语音识别"标签页
2. 选择适合实时识别的流式模型
3. 配置编码器文件和词汇表文件
### 配置TTS
1. 切换到"语音合成(TTS)"标签页
2. 选择MeloTTS中英文混合或VITS中文模型
3. 配置所需的模型文件和辅助文件
## 🔮 未来规划
### 短期计划
- 实现模型测试功能
- 添加模型自动扫描功能
- 优化模型加载性能
### 长期规划
- 支持更多ASR和TTS模型
- 添加模型性能监控
- 实现云端模型支持
## ✅ 兼容性说明
### 向后兼容
- 现有的配置文件会自动迁移到新的结构
- 旧的ASR配置会同时应用到离线和在线ASR
- 不影响现有的录音和识别功能
### 升级建议
- 建议用户重新配置离线和在线ASR模型
- 检查TTS模型配置是否正确
- 测试各项功能确保正常工作
这次更新使QSmartAssistant的模型配置更加专业和用户友好为后续功能扩展奠定了良好的基础。