# 麦克风实时语音识别使用指南

## 功能概述

麦克风实时语音识别功能使用sherpa-onnx-streaming-paraformer-bilingual-zh-en模型，支持中英文双语实时识别。

## 模型要求

### 必需文件
确保以下文件存在于 `~/.config/QSmartAssistant/Data/sherpa-onnx-streaming-paraformer-bilingual-zh-en/` 目录：

```
sherpa-onnx-streaming-paraformer-bilingual-zh-en/
├── encoder.int8.onnx         # 编码器模型（推荐使用int8量化版本）
├── decoder.int8.onnx         # 解码器模型
├── tokens.txt                # 词汇表文件
└── test_wavs/               # 测试音频文件（可选）
```

### 模型特性
- **双语支持**：同时支持中文和英文识别
- **实时流式**：支持连续语音流处理
- **端点检测**：自动检测语音开始和结束
- **低延迟**：优化的流式处理架构

## 使用方法

### 1. 启动识别
1. 确保麦克风已连接并正常工作
2. 点击 **"开始麦克风识别"** 按钮
3. 看到状态变为 **"识别中..."** 表示已开始

### 2. 语音输入
- **清晰发音**：保持正常语速，发音清晰
- **适当距离**：距离麦克风20-50cm
- **安静环境**：减少背景噪音干扰
- **自然停顿**：句子间适当停顿，便于端点检测

### 3. 查看结果
- **实时反馈**：状态栏显示当前识别内容
- **分段结果**：检测到语音结束时显示完整句子
- **最终结果**：停止识别时显示最后的识别内容

### 4. 停止识别
点击 **"停止识别"** 按钮结束录音和识别

## 界面说明

### 按钮状态
- **开始麦克风识别**（红色）：可以开始识别
- **识别中...**（灰色）：正在进行识别，不可点击
- **停止识别**（灰色）：结束当前识别会话

### 状态显示
- **状态栏**：显示当前识别状态和实时结果
- **识别结果区域**：显示分段识别结果
- **最终结果**：停止时显示完整识别内容

## 技术参数

### 音频格式
- **采样率**：16000 Hz
- **声道数**：单声道（Mono）
- **位深度**：16位
- **格式**：PCM

### 识别参数
- **特征维度**：80维梅尔频谱
- **解码方法**：贪婪搜索（Greedy Search）
- **最大活跃路径**：4条
- **处理间隔**：100毫秒

### 端点检测
- **规则1最小尾随静音**：2.4秒
- **规则2最小尾随静音**：1.2秒  
- **规则3最小语音长度**：20.0秒

## 支持的语言

### 中文识别
- **普通话**：标准普通话识别效果最佳
- **常用词汇**：日常对话、技术术语
- **数字识别**：支持中文数字表达

### 英文识别
- **美式英语**：主要训练数据
- **技术词汇**：编程、科技相关术语
- **混合语音**：中英文混合表达

## 使用技巧

### 获得最佳识别效果
1. **环境准备**
   - 选择安静的环境
   - 关闭风扇、空调等噪音源
   - 使用质量较好的麦克风

2. **发音技巧**
   - 保持正常语速，不要过快或过慢
   - 发音清晰，避免含糊不清
   - 句子间适当停顿

3. **内容建议**
   - 使用常见词汇和表达
   - 避免过于专业的术语
   - 中英文切换时稍作停顿

### 常见问题解决

#### 识别准确率低
- 检查麦克风音量设置
- 减少背景噪音
- 调整与麦克风的距离
- 确保发音清晰

#### 无法启动识别
- 检查麦克风权限设置
- 确认音频设备正常工作
- 验证模型文件完整性
- 重启应用程序

#### 识别延迟较高
- 关闭其他占用CPU的程序
- 检查系统资源使用情况
- 考虑使用更快的存储设备

## 性能优化

### 系统要求
- **CPU**：推荐4核心以上
- **内存**：至少4GB可用内存
- **存储**：SSD存储提升加载速度
- **音频**：支持16kHz采样率的音频设备

### 优化建议
1. **模型选择**：使用int8量化模型减少内存占用
2. **线程数量**：根据CPU核心数调整线程数
3. **缓冲设置**：适当调整音频缓冲区大小

## 故障排除

### 麦克风权限问题（macOS常见）

**症状：**
- 提示"Kiro想访问麦克风"但功能不工作
- 音频源状态一直显示`IdleState`
- 控制台显示"音频源状态异常"

**解决步骤：**
1. **手动授权权限**
   ```
   系统设置 → 隐私与安全性 → 麦克风
   添加qt_speech_simple程序并开启权限
   ```

2. **重置权限**
   ```bash
   sudo tccutil reset Microphone
   # 然后重新运行程序，点击"允许"
   ```

3. **使用权限检查脚本**
   ```bash
   ./check_audio_permissions.sh
   ```

4. **验证权限状态**
   ```bash
   sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
   "SELECT client, auth_value FROM access WHERE service='kTCCServiceMicrophone';"
   ```

**详细解决方案请参考：** `docs/MICROPHONE_PERMISSION_FIX.md`

### 模型加载失败
```
检查步骤：
1. 确认模型文件路径正确
2. 验证文件完整性（大小、权限）
3. 检查磁盘空间是否充足
4. 查看控制台错误信息
```

### 音频设备问题
```
解决方法：
1. 检查系统音频设置
2. 确认麦克风权限（重点！）
3. 测试其他音频应用
4. 重新插拔音频设备
5. 重启音频服务：sudo killall coreaudiod
```

### 识别结果异常
```
可能原因：
1. 音频质量问题
2. 模型版本不匹配
3. 配置参数错误
4. 系统资源不足
5. 权限未正确授予
```

### Qt音频源状态问题
```
状态说明：
- ActiveState: 正常录音状态
- IdleState: 空闲状态（通常是权限问题）
- StoppedState: 已停止状态
- SuspendedState: 暂停状态

解决IdleState问题：
1. 检查麦克风权限
2. 重启音频服务
3. 使用不同的音频格式
4. 检查设备占用情况
```

## 开发说明

### 关键组件
- **ASRManager**：管理在线识别器
- **SpeechTestMainWindow**：处理音频输入和界面更新
- **QAudioSource**：音频数据采集
- **QTimer**：定时处理音频数据

### 数据流程
```
麦克风 → QAudioSource → 音频数据 → 格式转换 → 
sherpa-onnx → 识别结果 → 界面显示
```

### 扩展可能
- 支持更多语言模型
- 添加语音活动检测
- 实现语音命令识别
- 集成语音翻译功能