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

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

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

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

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.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麦克风权限设置

快速修复(推荐)

# 运行快速修复脚本
./fix_microphone_permission.sh

手动设置权限

  1. 打开"系统设置" → "隐私与安全性" → "麦克风"
  2. 点击"+"按钮添加程序:cmake-build-debug/qt_speech_simple
  3. 确保开关处于开启状态
  4. 重新启动程序

权限诊断

# 运行完整诊断脚本
./check_audio_permissions.sh

重置权限

# 重置所有麦克风权限
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 - 项目结构说明

许可证

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

贡献

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

Description
No description provided
Readme 8.1 MiB
Languages
C++ 65.9%
C 29.3%
Shell 3.9%
CMake 0.9%