主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
123 lines
4.5 KiB
Bash
Executable File
123 lines
4.5 KiB
Bash
Executable File
#!/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 |