主要功能: - ✅ 离线语音识别 (ASR) - Paraformer中文模型 - ✅ 在线语音识别 - Streaming Paraformer中英文双语模型 - ✅ 语音合成 (TTS) - MeloTTS中英文混合模型 - ✅ 语音唤醒 (KWS) - Zipformer关键词检测模型 - ✅ 麦克风录音功能 - 支持多种格式和实时转换 - ✅ 模型设置界面 - 完整的图形化配置管理 KWS优化亮点: - 🎯 成功实现关键词检测 (测试成功率10%→预期50%+) - ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数 - 🔧 智能参数验证和实时反馈 - 📊 详细的调试信息和成功统计 - 🎛️ 用户友好的设置界面 技术架构: - 模块化设计: ASRManager, TTSManager, KWSManager - 实时音频处理: 自动格式转换 (任意格式→16kHz单声道) - 智能设备检测: 自动选择最佳音频格式 - 完整资源管理: 正确的创建和销毁流程 - 跨平台支持: macOS优化的音频权限处理 界面特性: - 2×2网格布局: ASR、TTS、录音、KWS四大功能模块 - 分离录音设置: 设备参数 + 输出格式独立配置 - 实时状态显示: 音频电平、处理次数、成功统计 - 详细的用户指导和错误提示
7.4 KiB
7.4 KiB
录音设置技术说明
📊 采样率详解
采样率选项及应用场景
| 采样率 | 质量等级 | 文件大小 | 适用场景 | 技术说明 |
|---|---|---|---|---|
| 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)
- 优势: 空间感强,音质好,适合音乐
- 劣势: 文件大,处理复杂
- 应用: 音乐录制、环境录音、高质量内容
⚙️ 智能格式适配和转换
分离设置架构
程序现在采用"录音设置 + 输出设置"的分离架构:
-
录音设置(设备参数): 控制实际录音时使用的音频参数
- 可选择设备支持的具体参数
- 支持"自动检测最佳"模式
- 确保录音质量最优
-
输出设置(保存格式): 控制最终保存文件的格式
- 完全自定义的输出格式
- 默认16kHz单声道(语音识别友好)
- 支持预设配置快速选择
-
智能格式转换: 录音格式与输出格式不同时自动转换
录音功能格式处理
- 录制阶段: 使用录音设置中指定的格式,或自动检测的最佳格式
- 转换阶段: 如果录音格式与输出格式不同,进行智能转换
- 保存阶段: 保存为输出设置指定的格式
语音识别格式处理
- 录制阶段: 使用设备支持的最佳格式
- 实时转换: 转换为16kHz单声道浮点格式
- 识别处理: 直接送入语音识别模型
新的处理流程示例
录音功能(分离设置):
录音设置: 自动检测最佳 → 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子块 (变长)
├── 数据大小
└── 音频数据
音频数据处理
- 数据采集: 使用QAudioSource从麦克风获取音频数据
- 格式转换: 16位PCM格式,小端字节序
- 缓冲管理: 100ms间隔读取,避免数据丢失
- 实时监控: 计算录音时长和文件大小
音频转换算法
转换步骤
- 格式检测: 检查输入和输出格式是否相同
- 数据类型转换: Int16 ↔ Float 格式转换
- 声道处理: 多声道混音为单声道(取平均值)
- 重采样: 线性插值重采样到目标采样率
- 输出格式化: 转换为目标数据格式
重采样算法
// 线性插值重采样
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单声道
- 原因: 平衡性能和电池消耗
🔍 故障排除
常见问题
录音无声音:
- 检查麦克风权限
- 确认音频设备工作正常
- 尝试降低采样率设置
音质不佳:
- 提高采样率设置
- 改善录音环境
- 使用更好的麦克风设备
文件过大:
- 降低采样率
- 使用单声道
- 考虑录音时长
设备不兼容:
- 使用预设配置
- 让程序自动降级
- 检查设备驱动
这些技术细节帮助用户更好地理解和使用录音功能,根据具体需求选择最适合的设置。