Files
QSmartAssistant/scripts/check_audio_permissions.sh
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

123 lines
4.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
echo "=== macOS 麦克风权限诊断和修复工具 ==="
echo "当前时间: $(date)"
echo "用户: $(whoami)"
echo ""
# 1. 检查音频设备
echo "📱 1. 音频设备检查"
echo "----------------------------------------"
system_profiler SPAudioDataType | grep -E "(MacBook Pro|Built-in|Microphone)" || echo "未找到内置麦克风设备"
echo ""
# 2. 检查麦克风权限状态
echo "🔐 2. 麦克风权限状态检查"
echo "----------------------------------------"
# 尝试读取TCC数据库
if [ -f ~/Library/Application\ Support/com.apple.TCC/TCC.db ]; then
echo "TCC数据库存在检查权限记录..."
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
"SELECT client, auth_value, auth_reason FROM access WHERE service='kTCCServiceMicrophone';" 2>/dev/null | \
while IFS='|' read -r client auth_value auth_reason; do
if [ ! -z "$client" ]; then
status="未知"
case $auth_value in
0) status="拒绝" ;;
1) status="允许" ;;
2) status="允许" ;;
3) status="限制" ;;
esac
echo "应用: $client -> 权限: $status ($auth_value)"
fi
done
else
echo "TCC数据库不存在或无法访问"
fi
echo ""
# 3. 测试系统音频录制能力
echo "🎤 3. 系统音频录制测试"
echo "----------------------------------------"
if command -v sox >/dev/null 2>&1; then
echo "使用sox进行录制测试..."
timeout 2s rec -q -t wav /tmp/test_audio_$(date +%s).wav 2>/dev/null
if [ $? -eq 0 ] && [ -f /tmp/test_audio_*.wav ]; then
audio_file=$(ls /tmp/test_audio_*.wav | head -1)
file_size=$(stat -f%z "$audio_file" 2>/dev/null || echo "0")
echo "✅ 录制成功!文件大小: ${file_size} 字节"
rm -f /tmp/test_audio_*.wav
else
echo "❌ 录制失败 - 可能是权限问题"
fi
else
echo "⚠️ sox未安装跳过录制测试"
echo " 可以通过 'brew install sox' 安装"
fi
echo ""
# 4. 检查Qt程序的权限状态
echo "🖥️ 4. Qt程序权限检查"
echo "----------------------------------------"
qt_app_path="./cmake-build-debug/qt_speech_simple"
if [ -f "$qt_app_path" ]; then
echo "Qt程序路径: $qt_app_path"
# 检查程序是否在TCC数据库中
app_bundle_id=$(basename "$qt_app_path")
echo "检查程序ID: $app_bundle_id"
# 尝试查找相关权限记录
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
"SELECT client, auth_value FROM access WHERE service='kTCCServiceMicrophone' AND client LIKE '%$app_bundle_id%';" 2>/dev/null | \
while IFS='|' read -r client auth_value; do
if [ ! -z "$client" ]; then
status="拒绝"
[ "$auth_value" = "2" ] && status="允许"
echo "找到权限记录: $client -> $status"
fi
done
else
echo "❌ Qt程序不存在: $qt_app_path"
fi
echo ""
# 5. 权限修复建议
echo "🔧 5. 权限修复步骤"
echo "----------------------------------------"
echo "如果遇到权限问题,请按以下步骤操作:"
echo ""
echo "方法1: 通过系统设置授予权限"
echo " 1. 打开 系统设置 (System Preferences)"
echo " 2. 点击 安全性与隐私 (Security & Privacy)"
echo " 3. 选择 隐私 (Privacy) 标签"
echo " 4. 在左侧列表中选择 麦克风 (Microphone)"
echo " 5. 确保Qt程序已勾选并允许访问麦克风"
echo ""
echo "方法2: 重置麦克风权限 (需要管理员权限)"
echo " sudo tccutil reset Microphone"
echo " 然后重新运行Qt程序会再次弹出权限请求"
echo ""
echo "方法3: 手动添加权限 (macOS Monterey及以上)"
echo " 1. 系统设置 -> 隐私与安全性 -> 麦克风"
echo " 2. 点击 + 号添加应用程序"
echo " 3. 选择Qt程序可执行文件"
echo ""
# 6. 启动Qt程序进行实际测试
echo "🚀 6. 启动Qt程序测试"
echo "----------------------------------------"
if [ -f "$qt_app_path" ]; then
echo "即将启动Qt程序进行麦克风权限测试..."
echo "请注意观察是否弹出权限请求对话框"
echo "如果弹出,请点击 '允许' 或 'Allow'"
echo ""
echo "按回车键继续启动程序或Ctrl+C取消..."
read -r
echo "启动程序: $qt_app_path"
cd cmake-build-debug && ./qt_speech_simple
else
echo "❌ 程序文件不存在,请先编译项目"
echo "运行: mkdir -p cmake-build-debug && cd cmake-build-debug && cmake .. && make"
fi