feat: 完整的语音助手系统实现
主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
This commit is contained in:
260
docs/RECORDING_SETTINGS_TECHNICAL.md
Normal file
260
docs/RECORDING_SETTINGS_TECHNICAL.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# 录音设置技术说明
|
||||
|
||||
## 📊 采样率详解
|
||||
|
||||
### 采样率选项及应用场景
|
||||
|
||||
| 采样率 | 质量等级 | 文件大小 | 适用场景 | 技术说明 |
|
||||
|--------|----------|----------|----------|----------|
|
||||
| 8000 Hz | 电话质量 | 最小 | 电话录音、语音备忘 | 奈奎斯特频率4kHz,适合人声基频 |
|
||||
| 16000 Hz | 语音标准 | 小 | 语音识别、会议录音 | 语音识别模型标准,平衡质量与大小 |
|
||||
| 22050 Hz | 广播质量 | 中等 | 广播、播客 | CD采样率的一半,适合语音内容 |
|
||||
| 44100 Hz | CD质量 | 大 | 音乐录制、高质量音频 | CD标准,20kHz频响,适合音乐 |
|
||||
| 48000 Hz | 专业级 | 最大 | 专业录音、影视制作 | 专业音频标准,最高保真度 |
|
||||
|
||||
### 文件大小计算
|
||||
|
||||
**公式**: 文件大小 = 采样率 × 声道数 × 位深度 × 时长 ÷ 8
|
||||
|
||||
**示例计算**:
|
||||
- 44.1kHz立体声16位,1分钟 = 44100 × 2 × 16 × 60 ÷ 8 = 10,584,000 字节 ≈ 10.6MB
|
||||
- 16kHz单声道16位,1分钟 = 16000 × 1 × 16 × 60 ÷ 8 = 1,920,000 字节 ≈ 1.9MB
|
||||
|
||||
## 🔊 声道配置
|
||||
|
||||
### 单声道 (Mono)
|
||||
- **优势**: 文件小,处理简单,适合语音
|
||||
- **劣势**: 无空间感,音质相对较差
|
||||
- **应用**: 语音录制、电话录音、语音识别
|
||||
|
||||
### 立体声 (Stereo)
|
||||
- **优势**: 空间感强,音质好,适合音乐
|
||||
- **劣势**: 文件大,处理复杂
|
||||
- **应用**: 音乐录制、环境录音、高质量内容
|
||||
|
||||
## ⚙️ 智能格式适配和转换
|
||||
|
||||
### 分离设置架构
|
||||
|
||||
程序现在采用"录音设置 + 输出设置"的分离架构:
|
||||
|
||||
1. **录音设置(设备参数)**: 控制实际录音时使用的音频参数
|
||||
- 可选择设备支持的具体参数
|
||||
- 支持"自动检测最佳"模式
|
||||
- 确保录音质量最优
|
||||
|
||||
2. **输出设置(保存格式)**: 控制最终保存文件的格式
|
||||
- 完全自定义的输出格式
|
||||
- 默认16kHz单声道(语音识别友好)
|
||||
- 支持预设配置快速选择
|
||||
|
||||
3. **智能格式转换**: 录音格式与输出格式不同时自动转换
|
||||
|
||||
### 录音功能格式处理
|
||||
|
||||
1. **录制阶段**: 使用录音设置中指定的格式,或自动检测的最佳格式
|
||||
2. **转换阶段**: 如果录音格式与输出格式不同,进行智能转换
|
||||
3. **保存阶段**: 保存为输出设置指定的格式
|
||||
|
||||
### 语音识别格式处理
|
||||
|
||||
1. **录制阶段**: 使用设备支持的最佳格式
|
||||
2. **实时转换**: 转换为16kHz单声道浮点格式
|
||||
3. **识别处理**: 直接送入语音识别模型
|
||||
|
||||
### 新的处理流程示例
|
||||
|
||||
**录音功能(分离设置)**:
|
||||
```
|
||||
录音设置: 自动检测最佳 → 48kHz 立体声 (实际录制)
|
||||
输出设置: 16kHz 单声道 (用户指定)
|
||||
↓ (音频转换)
|
||||
最终保存: 16kHz 单声道 (输出格式)
|
||||
```
|
||||
|
||||
**录音功能(手动设置)**:
|
||||
```
|
||||
录音设置: 44.1kHz 立体声 (用户指定录制格式)
|
||||
输出设置: 44.1kHz 立体声 (用户指定输出格式)
|
||||
↓ (格式相同,无需转换)
|
||||
最终保存: 44.1kHz 立体声 (直接保存)
|
||||
```
|
||||
|
||||
**语音识别功能**:
|
||||
```
|
||||
设备最佳: 44.1kHz 立体声 (录制使用)
|
||||
↓ (实时转换)
|
||||
识别输入: 16kHz 单声道 (模型要求)
|
||||
```
|
||||
|
||||
## 🎯 预设配置详解
|
||||
|
||||
### 语音录制预设 (16kHz 单声道)
|
||||
- **目标**: 语音识别和语音备忘
|
||||
- **优势**: 文件小,处理快,识别准确
|
||||
- **文件大小**: ~2MB/分钟
|
||||
- **频响范围**: 0-8kHz (覆盖人声频率)
|
||||
|
||||
### 音乐录制预设 (44.1kHz 立体声)
|
||||
- **目标**: 音乐录制和高质量音频
|
||||
- **优势**: CD质量,立体声效果
|
||||
- **文件大小**: ~10.6MB/分钟
|
||||
- **频响范围**: 0-22kHz (全频响)
|
||||
|
||||
### 专业录音预设 (48kHz 立体声)
|
||||
- **目标**: 专业音频制作
|
||||
- **优势**: 最高质量,专业标准
|
||||
- **文件大小**: ~11.5MB/分钟
|
||||
- **频响范围**: 0-24kHz (超全频响)
|
||||
|
||||
### 紧凑模式预设 (22kHz 单声道)
|
||||
- **目标**: 平衡质量与文件大小
|
||||
- **优势**: 适中质量,合理大小
|
||||
- **文件大小**: ~2.6MB/分钟
|
||||
- **频响范围**: 0-11kHz (适合语音和简单音乐)
|
||||
|
||||
## 🔧 技术实现细节
|
||||
|
||||
### WAV文件格式
|
||||
|
||||
程序生成标准的RIFF/WAVE格式文件:
|
||||
|
||||
```
|
||||
文件结构:
|
||||
├── RIFF头 (12字节)
|
||||
│ ├── "RIFF" 标识
|
||||
│ ├── 文件大小
|
||||
│ └── "WAVE" 标识
|
||||
├── fmt子块 (24字节)
|
||||
│ ├── 格式信息
|
||||
│ ├── 采样率
|
||||
│ ├── 声道数
|
||||
│ └── 位深度
|
||||
└── data子块 (变长)
|
||||
├── 数据大小
|
||||
└── 音频数据
|
||||
```
|
||||
|
||||
### 音频数据处理
|
||||
|
||||
1. **数据采集**: 使用QAudioSource从麦克风获取音频数据
|
||||
2. **格式转换**: 16位PCM格式,小端字节序
|
||||
3. **缓冲管理**: 100ms间隔读取,避免数据丢失
|
||||
4. **实时监控**: 计算录音时长和文件大小
|
||||
|
||||
### 音频转换算法
|
||||
|
||||
#### 转换步骤
|
||||
1. **格式检测**: 检查输入和输出格式是否相同
|
||||
2. **数据类型转换**: Int16 ↔ Float 格式转换
|
||||
3. **声道处理**: 多声道混音为单声道(取平均值)
|
||||
4. **重采样**: 线性插值重采样到目标采样率
|
||||
5. **输出格式化**: 转换为目标数据格式
|
||||
|
||||
#### 重采样算法
|
||||
```cpp
|
||||
// 线性插值重采样
|
||||
float ratio = targetSampleRate / sourceSampleRate;
|
||||
for (int i = 0; i < newSampleCount; i++) {
|
||||
float srcIndex = i / ratio;
|
||||
int index = (int)srcIndex;
|
||||
float frac = srcIndex - index;
|
||||
float sample = samples[index] * (1-frac) + samples[index+1] * frac;
|
||||
output[i] = sample;
|
||||
}
|
||||
```
|
||||
|
||||
#### 声道混音算法
|
||||
```cpp
|
||||
// 多声道转单声道
|
||||
for (int frame = 0; frame < frameCount; frame++) {
|
||||
float sum = 0.0f;
|
||||
for (int ch = 0; ch < channelCount; ch++) {
|
||||
sum += samples[frame * channelCount + ch];
|
||||
}
|
||||
monoSamples[frame] = sum / channelCount;
|
||||
}
|
||||
```
|
||||
|
||||
### 内存管理
|
||||
|
||||
- **缓冲策略**: 使用QByteArray动态缓冲
|
||||
- **内存优化**: 及时释放不需要的音频数据
|
||||
- **大文件处理**: 支持长时间录音而不会内存溢出
|
||||
- **转换缓存**: 智能复用转换缓冲区
|
||||
|
||||
## 📈 性能优化
|
||||
|
||||
### CPU使用优化
|
||||
- **低频采样**: 100ms处理间隔,减少CPU占用
|
||||
- **高效编码**: 直接PCM格式,无需实时编码
|
||||
- **内存复用**: 重用音频缓冲区
|
||||
|
||||
### 存储优化
|
||||
- **压缩算法**: 虽然是PCM格式,但结构紧凑
|
||||
- **文件系统**: 优化写入策略,减少磁盘碎片
|
||||
- **缓存管理**: 合理的内存缓存大小
|
||||
|
||||
## 🎛️ 高级设置建议
|
||||
|
||||
### 根据用途选择设置
|
||||
|
||||
**会议录音**:
|
||||
- 采样率: 16kHz
|
||||
- 声道: 单声道
|
||||
- 理由: 语音清晰,文件小,易传输
|
||||
|
||||
**音乐录制**:
|
||||
- 采样率: 44.1kHz或48kHz
|
||||
- 声道: 立体声
|
||||
- 理由: 保持音乐的完整频响和空间感
|
||||
|
||||
**播客制作**:
|
||||
- 采样率: 22kHz
|
||||
- 声道: 单声道
|
||||
- 理由: 平衡音质和文件大小
|
||||
|
||||
**专业制作**:
|
||||
- 采样率: 48kHz
|
||||
- 声道: 立体声
|
||||
- 理由: 最高质量,后期处理空间大
|
||||
|
||||
### 设备性能考虑
|
||||
|
||||
**低端设备**:
|
||||
- 推荐: 16kHz单声道
|
||||
- 原因: 减少CPU和内存占用
|
||||
|
||||
**高端设备**:
|
||||
- 推荐: 48kHz立体声
|
||||
- 原因: 充分利用硬件性能
|
||||
|
||||
**移动设备**:
|
||||
- 推荐: 22kHz单声道
|
||||
- 原因: 平衡性能和电池消耗
|
||||
|
||||
## 🔍 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
**录音无声音**:
|
||||
1. 检查麦克风权限
|
||||
2. 确认音频设备工作正常
|
||||
3. 尝试降低采样率设置
|
||||
|
||||
**音质不佳**:
|
||||
1. 提高采样率设置
|
||||
2. 改善录音环境
|
||||
3. 使用更好的麦克风设备
|
||||
|
||||
**文件过大**:
|
||||
1. 降低采样率
|
||||
2. 使用单声道
|
||||
3. 考虑录音时长
|
||||
|
||||
**设备不兼容**:
|
||||
1. 使用预设配置
|
||||
2. 让程序自动降级
|
||||
3. 检查设备驱动
|
||||
|
||||
这些技术细节帮助用户更好地理解和使用录音功能,根据具体需求选择最适合的设置。
|
||||
Reference in New Issue
Block a user