Files
QSmartAssistant/docs/MICROPHONE_PERMISSION_SOLUTION.md
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

4.0 KiB
Raw Permalink Blame History

麦克风权限问题解决方案总结

问题分析

根据用户反馈的日志信息,麦克风识别功能遇到以下问题:

  1. 权限请求已触发:提示"Kiro想访问麦克风"
  2. 音频源状态异常:一直显示IdleState,无法转换到ActiveState
  3. 无音频数据:虽然程序运行但无法获取音频输入

根本原因

这是macOS系统上Qt应用程序的典型权限问题

  • macOS的TCCTransparency, Consent, and Control框架要求明确的用户授权
  • Qt程序需要通过系统权限对话框获得麦克风访问权限
  • 即使弹出权限请求,用户也需要在系统设置中手动确认

解决方案

1. 创建的工具和脚本

快速修复脚本 (fix_microphone_permission.sh)

  • 提供交互式权限修复选项
  • 自动重置权限并重启音频服务
  • 引导用户完成权限授予流程

完整诊断脚本 (check_audio_permissions.sh)

  • 检查音频设备状态
  • 诊断TCC权限数据库
  • 测试系统录音功能
  • 提供详细的修复建议

2. 创建的文档

权限修复指南 (docs/MICROPHONE_PERMISSION_FIX.md)

  • 详细的权限问题解决步骤
  • 多种修复方案(手动、自动、重置)
  • 开发者注意事项和最佳实践
  • 系统兼容性说明

更新的使用指南 (docs/MICROPHONE_RECOGNITION_GUIDE.md)

  • 添加了权限问题排查部分
  • 详细的故障排除步骤
  • Qt音频源状态说明

3. 更新的项目文档

README.md

  • 添加了麦克风权限设置部分
  • 完善了故障排除指南
  • 增加了相关文档链接

使用方法

方法1快速修复推荐

./fix_microphone_permission.sh

选择选项1进行权限重置然后按提示操作。

方法2手动设置

  1. 系统设置 → 隐私与安全性 → 麦克风
  2. 添加cmake-build-debug/qt_speech_simple程序
  3. 确保权限开关开启

方法3完整诊断

./check_audio_permissions.sh

运行完整的权限和设备诊断。

验证方法

1. 检查权限状态

sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
"SELECT client, auth_value FROM access WHERE service='kTCCServiceMicrophone';"

2. 观察程序日志

启动程序后查看控制台输出:

  • 音频源状态: ActiveState = 权限正常
  • 音频源状态: IdleState = 权限问题

3. 测试录音功能

点击"开始麦克风识别",观察:

  • 状态栏是否显示实时识别内容
  • 是否有"检测到音频信号"的日志输出

技术细节

Qt音频权限机制

  • Qt使用系统的音频API访问麦克风
  • macOS要求通过TCC框架进行权限管理
  • 权限状态影响QAudioSource的状态转换

音频源状态说明

  • ActiveState: 正常录音,有音频数据流
  • IdleState: 空闲状态,通常表示权限未授予
  • StoppedState: 已停止,正常的结束状态
  • SuspendedState: 暂停状态,可以恢复

权限值含义

  • 0: 拒绝访问
  • 1: 允许访问
  • 2: 允许访问(新版本)

预防措施

开发阶段

  1. 在Info.plist中添加麦克风使用说明
  2. 实现完善的权限状态检查
  3. 提供清晰的用户指导

部署阶段

  1. 提供权限设置文档
  2. 包含自动修复脚本
  3. 测试不同macOS版本的兼容性

后续优化建议

  1. 改进权限检查:在程序启动时主动检查权限状态
  2. 用户引导:添加权限设置的图形化引导界面
  3. 错误处理:更友好的权限错误提示和解决建议
  4. 自动重试:权限授予后自动重新初始化音频源

总结

通过创建完整的权限诊断和修复工具链我们已经解决了macOS上Qt程序的麦克风权限问题。用户现在可以

  1. 快速修复:使用一键修复脚本
  2. 详细诊断:了解具体的权限状态
  3. 手动配置:按照详细指南进行设置
  4. 验证结果:确认权限是否正确授予

这套解决方案不仅解决了当前问题,还为未来类似问题提供了完整的工具和文档支持。