主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
136 lines
4.0 KiB
Markdown
136 lines
4.0 KiB
Markdown
# 麦克风权限问题解决方案总结
|
||
|
||
## 问题分析
|
||
|
||
根据用户反馈的日志信息,麦克风识别功能遇到以下问题:
|
||
|
||
1. **权限请求已触发**:提示"Kiro想访问麦克风"
|
||
2. **音频源状态异常**:一直显示`IdleState`,无法转换到`ActiveState`
|
||
3. **无音频数据**:虽然程序运行但无法获取音频输入
|
||
|
||
## 根本原因
|
||
|
||
这是macOS系统上Qt应用程序的典型权限问题:
|
||
- macOS的TCC(Transparency, 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:快速修复(推荐)
|
||
```bash
|
||
./fix_microphone_permission.sh
|
||
```
|
||
选择选项1进行权限重置,然后按提示操作。
|
||
|
||
### 方法2:手动设置
|
||
1. 系统设置 → 隐私与安全性 → 麦克风
|
||
2. 添加`cmake-build-debug/qt_speech_simple`程序
|
||
3. 确保权限开关开启
|
||
|
||
### 方法3:完整诊断
|
||
```bash
|
||
./check_audio_permissions.sh
|
||
```
|
||
运行完整的权限和设备诊断。
|
||
|
||
## 验证方法
|
||
|
||
### 1. 检查权限状态
|
||
```bash
|
||
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. **验证结果**:确认权限是否正确授予
|
||
|
||
这套解决方案不仅解决了当前问题,还为未来类似问题提供了完整的工具和文档支持。 |