# 分离录音设置功能说明

## 🎯 功能概述

QSmartAssistant现在采用全新的分离录音设置架构，将录音过程分为两个独立可控的阶段：
- **录音设置**：控制设备录制时使用的音频参数
- **输出设置**：控制最终保存文件的格式

这种设计让用户能够更精确地控制录音质量和输出格式，实现最佳的录音体验。

## 🏗️ 架构设计

### 传统单一设置 vs 分离设置

| 方面 | 传统方式 | 分离设置方式 |
|------|----------|-------------|
| 设置复杂度 | 单一选择 | 双重控制 |
| 录音质量 | 受输出格式限制 | 可使用设备最佳格式 |
| 输出灵活性 | 与录音格式绑定 | 完全独立自定义 |
| 用户理解 | 简单但限制多 | 清晰且功能强大 |

### 分离设置的优势

1. **录音质量最优化**
   - 可以使用设备支持的最高质量格式录制
   - 不受最终输出格式限制
   - 自动检测设备最佳参数

2. **输出格式灵活性**
   - 完全自定义输出格式
   - 默认语音识别友好格式（16kHz单声道）
   - 支持预设配置快速选择

3. **用户控制精确性**
   - 清楚了解录音和输出的区别
   - 可以根据需要精确调整
   - 透明的格式转换过程

## 🎛️ 界面设计

### 录音设置区域（设备参数）

```
┌─ 录音设置（设备参数） ─────────────────┐
│ 录音采样率: [自动检测最佳 ▼]           │
│ 录音声道:   [自动检测最佳 ▼]           │
└──────────────────────────────────────┘
```

**功能说明**：
- 控制实际录音时设备使用的参数
- "自动检测最佳"会选择设备支持的最高质量
- 也可以手动指定具体的录音参数

### 输出设置区域（保存格式）

```
┌─ 输出设置（保存格式） ─────────────────┐
│ 输出采样率: [16000 Hz (语音识别) ▼]    │
│ 输出声道:   [单声道 (Mono) ▼]          │
│ [预设] 预估输出文件大小: ~2MB/分钟      │
└──────────────────────────────────────┘
```

**功能说明**：
- 控制最终保存文件的格式
- 默认16kHz单声道（语音识别友好）
- 提供预设配置和文件大小预估

## 🔄 工作流程

### 1. 设置阶段
```
用户配置录音设置 → 用户配置输出设置 → 程序验证兼容性
```

### 2. 录音阶段
```
使用录音设置参数 → 设备开始录制 → 实时显示录音状态
```

### 3. 处理阶段
```
录音完成 → 格式对比 → 必要时进行转换 → 保存为输出格式
```

### 4. 结果阶段
```
显示最终文件信息 → 提供播放选项 → 重新启用设置
```

## 📊 使用场景示例

### 场景1：语音备忘录
- **录音设置**: 自动检测最佳（可能是48kHz立体声）
- **输出设置**: 16kHz单声道
- **结果**: 高质量录制，紧凑保存，适合语音识别

### 场景2：音乐录制
- **录音设置**: 48kHz立体声（手动指定）
- **输出设置**: 44.1kHz立体声
- **结果**: 专业质量录制，CD质量保存

### 场景3：会议录音
- **录音设置**: 自动检测最佳
- **输出设置**: 22kHz单声道
- **结果**: 最佳录制质量，平衡的文件大小

### 场景4：高保真录音
- **录音设置**: 48kHz立体声
- **输出设置**: 48kHz立体声
- **结果**: 无损录制和保存，最高音质

## 🎨 用户体验设计

### 直观的视觉分离
- 两个独立的设置组框
- 清晰的标题说明用途
- 不同的默认值体现不同目的

### 智能默认配置
- 录音设置默认"自动检测最佳"
- 输出设置默认"16kHz单声道"
- 平衡易用性和功能性

### 实时反馈
- 显示实际使用的录音格式
- 显示目标输出格式
- 格式转换状态提示

### 预设配置支持
- 输出设置提供常用预设
- 一键切换不同使用场景
- 文件大小实时预估

## 🔧 技术实现

### 设备格式检测
```cpp
// 自动检测最佳格式的优先级
QList<int> deviceSampleRates = {48000, 44100, 22050, 16000};
QList<int> deviceChannels = {2, 1};
QList<QAudioFormat::SampleFormat> deviceFormats = {Int16, Float};
```

### 格式转换决策
```cpp
// 判断是否需要格式转换
if (recordFormat != outputFormat) {
    // 执行智能音频转换
    convertedData = convertAudioFormat(rawData, recordFormat, outputFormat);
}
```

### 用户界面状态管理
```cpp
// 录音期间禁用所有设置
recordSampleRateComboBox->setEnabled(false);
recordChannelComboBox->setEnabled(false);
outputSampleRateComboBox->setEnabled(false);
outputChannelComboBox->setEnabled(false);
```

## 📈 性能优化

### 智能转换策略
- 格式相同时跳过转换
- 高效的线性插值重采样
- 内存优化的数据处理

### 用户体验优化
- 实时格式验证
- 清晰的状态反馈
- 智能错误处理

### 设备兼容性
- 自动降级不支持的格式
- 完善的错误恢复机制
- 跨平台兼容性保证

## 🎉 功能优势总结

### 对用户的好处
✅ **更好的录音质量**: 使用设备最佳格式录制
✅ **更灵活的输出**: 完全自定义保存格式
✅ **更清晰的控制**: 分离设置让用途更明确
✅ **更智能的默认**: 语音识别友好的默认输出
✅ **更简单的操作**: 自动检测减少复杂配置

### 对开发的好处
✅ **更清晰的架构**: 录音和输出逻辑分离
✅ **更容易扩展**: 独立的设置系统
✅ **更好的维护**: 模块化的代码结构
✅ **更强的兼容**: 灵活的格式适配

## 🔮 未来扩展

### 短期计划
- 添加更多预设配置
- 支持批量格式转换
- 增加音频质量分析

### 长期规划
- 支持更多音频格式
- 实现音频效果处理
- 集成云端转换服务

这种分离设置架构为QSmartAssistant的录音功能提供了强大而灵活的基础，既满足了专业用户的精确控制需求，也为普通用户提供了简单易用的默认配置。