e92cb0b4e5032fdb474a1122226378096b40ea6d
主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
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):
brew install qt6
Ubuntu/Debian:
sudo apt-get install qt6-base-dev qt6-tools-dev
Windows: 从 Qt官网 下载并安装Qt6
2. 安装sherpa-onnx
请参考 sherpa-onnx官方文档 进行安装。
编译和运行
1. 创建构建目录
cd ~/Desktop/qt_speech_simple_standalone
mkdir build
cd build
2. 配置CMake
# 如果sherpa-onnx安装在默认位置
cmake ..
# 如果sherpa-onnx安装在自定义位置,请指定路径
cmake -DSHERPA_ONNX_ROOT=/path/to/sherpa-onnx ..
3. 编译
make -j$(nproc)
4. 运行
./qt_speech_simple
模型文件配置
程序需要以下模型文件,默认路径为 ~/.config/QSmartAssistant/Data/:
离线ASR模型 (语音识别)
sherpa-onnx-paraformer-zh-2024-03-09/model.int8.onnxsherpa-onnx-paraformer-zh-2024-03-09/tokens.txt
在线ASR模型 (实时识别)
sherpa-onnx-streaming-paraformer-bilingual-zh-en/encoder.int8.onnxsherpa-onnx-streaming-paraformer-bilingual-zh-en/decoder.int8.onnxsherpa-onnx-streaming-paraformer-bilingual-zh-en/tokens.txt
TTS模型 (文字转语音)
vits-melo-tts-zh_en/model.onnx(推荐,支持中英文混合)vits-melo-tts-zh_en/tokens.txtvits-melo-tts-zh_en/lexicon.txt
使用说明
离线语音识别
- 点击"浏览"按钮选择WAV音频文件
- 点击"开始识别"进行语音识别
- 识别结果将显示在结果区域
实时麦克风识别
- 确保已授予麦克风权限(见下方权限设置)
- 点击"开始麦克风识别"按钮
- 程序自动使用设备最佳格式录制,实时转换为16kHz单声道
- 对着麦克风说话,识别结果实时显示
- 可选择"识别后自动播放语音"功能
- 点击"停止识别"结束录音
智能分离设置录音
- 录音设置: 选择设备录制参数(支持自动检测最佳格式)
- 输出设置: 选择保存文件格式(默认16kHz单声道)或使用预设配置
- 点击"开始录音"按钮开始录制
- 程序使用录音设置格式录制,自动转换为输出设置格式
- 状态栏显示实时录音时长和格式信息
- 点击"停止录音"结束并自动保存WAV文件
- 录音文件保存在
recordings目录 - 支持录音格式:自动检测或手动选择设备支持的格式
- 支持输出格式:8kHz-48kHz,单声道/立体声完全自定义
文字转语音
- 在文本框中输入要合成的文本(支持中英文混合)
- 选择说话人ID (0-100)
- 点击"开始合成"进行语音合成
- 合成的音频文件保存在
tts_output目录 - 合成完成后可选择播放生成的音频
模型设置
- 使用菜单栏"设置 → 模型设置"或快捷键Ctrl+M
- 在设置界面中配置ASR和TTS模型路径
- 支持预设模型和自定义路径配置
macOS麦克风权限设置
快速修复(推荐)
# 运行快速修复脚本
./fix_microphone_permission.sh
手动设置权限
- 打开"系统设置" → "隐私与安全性" → "麦克风"
- 点击"+"按钮添加程序:
cmake-build-debug/qt_speech_simple - 确保开关处于开启状态
- 重新启动程序
权限诊断
# 运行完整诊断脚本
./check_audio_permissions.sh
重置权限
# 重置所有麦克风权限
sudo tccutil reset Microphone
# 然后重新运行程序,在弹出对话框中点击"允许"
故障排除
麦克风识别问题
-
权限问题(最常见)
- 症状:音频源状态显示
IdleState,提示"Kiro想访问麦克风" - 解决:参考上方"麦克风权限设置"部分
- 详细文档:
docs/MICROPHONE_PERMISSION_FIX.md
- 症状:音频源状态显示
-
音频设备问题
- 检查麦克风是否正常工作
- 重启音频服务:
sudo killall coreaudiod - 测试其他音频应用是否正常
模型相关问题
-
模型初始化失败
- 检查模型文件路径是否正确
- 确保模型文件存在且可读
- 验证模型文件完整性
-
识别效果不佳
- 确保音频质量良好
- 检查环境噪音
- 尝试调整麦克风距离
编译和运行问题
-
编译错误
- 确保Qt6和sherpa-onnx正确安装
- 检查CMake配置中的路径设置
- 验证C++17编译器支持
-
运行时库找不到
- 检查动态库路径设置
- 在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- 项目结构说明
许可证
请参考原项目的许可证文件。
贡献
欢迎提交问题报告和功能请求。
Description
Languages
C++
65.9%
C
29.3%
Shell
3.9%
CMake
0.9%