Files
QSmartAssistant/docs/RECORDING_SETTINGS_TECHNICAL.md
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

7.4 KiB
Raw Blame History

录音设置技术说明

📊 采样率详解

采样率选项及应用场景

采样率 质量等级 文件大小 适用场景 技术说明
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. 输出格式化: 转换为目标数据格式

重采样算法

// 线性插值重采样
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;
}

声道混音算法

// 多声道转单声道
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. 检查设备驱动

这些技术细节帮助用户更好地理解和使用录音功能,根据具体需求选择最适合的设置。