92 lines
2.4 KiB
Markdown
92 lines
2.4 KiB
Markdown
# Reverbation
|
||
|
||
**命名空间**: `XCEngine::Audio`
|
||
|
||
**类型**: `class`
|
||
|
||
**头文件**: `XCEngine/Audio/Reverbation.h`
|
||
|
||
**描述**: 一个基础混响效果器,内部使用 comb filter 和 all-pass filter 结构生成简化空间残响。
|
||
|
||
## 角色概述
|
||
|
||
`Reverbation` 是当前 `IAudioEffect` 派生效果器里最接近传统混响器的一种实现。它采用经典的:
|
||
|
||
- 多组 comb filter
|
||
- 多组 all-pass filter
|
||
|
||
来生成基础 reverberation 尾音。
|
||
|
||
## 当前实现行为
|
||
|
||
### 1. 会真正改写输入样本
|
||
|
||
`ProcessAudio()` 会逐帧读取输入样本,经过 comb/all-pass 处理后,把结果写回 buffer。因此它不是参数占位器,而是真正参与样本处理的效果器。
|
||
|
||
### 2. 当前按“首通道输入 -> 全通道复制输出”工作
|
||
|
||
实现中每一帧只取:
|
||
|
||
`float input = buffer[i * channels];`
|
||
|
||
也就是只读第一个通道的输入,再把最终 `outSample` 写回所有通道。
|
||
|
||
这意味着当前更像是“单声道混响核心 + 多通道镜像输出”,而不是严格意义上的多声道独立混响。
|
||
|
||
### 3. 真实参与处理的参数
|
||
|
||
以下参数当前会影响处理:
|
||
|
||
- `roomSize`
|
||
- `damping`
|
||
- `wetMix`
|
||
- `dryMix`
|
||
|
||
其中:
|
||
|
||
- `SetRoomSize()` 会更新 comb filter 的 feedback
|
||
- `SetDamping()` 会更新 comb filter 的阻尼系数
|
||
|
||
## 当前未接线或未充分使用的参数
|
||
|
||
- `width`
|
||
- `freeze`
|
||
|
||
这两个 setter 当前会保存值,但在已取证的 `ProcessAudio()` 路径里没有看到实际消费逻辑。
|
||
|
||
## 线程语义
|
||
|
||
- 当前实现没有内部加锁。
|
||
- 参数修改和样本处理默认不应视为并发安全。
|
||
|
||
## 当前实现限制
|
||
|
||
- 只读取首通道输入,再复制到所有输出通道。
|
||
- `width` 和 `freeze` 当前未参与真实处理。
|
||
- 没有看到该类型的直接单元测试。
|
||
|
||
## 相关方法
|
||
|
||
- [Constructor](Constructor.md)
|
||
- [Destructor](Destructor.md)
|
||
- [ProcessAudio](ProcessAudio.md)
|
||
- [SetRoomSize](SetRoomSize.md)
|
||
- [GetRoomSize](GetRoomSize.md)
|
||
- [SetDamping](SetDamping.md)
|
||
- [GetDamping](GetDamping.md)
|
||
- [SetWetMix](SetWetMix.md)
|
||
- [GetWetMix](GetWetMix.md)
|
||
- [SetDryMix](SetDryMix.md)
|
||
- [GetDryMix](GetDryMix.md)
|
||
- [SetWidth](SetWidth.md)
|
||
- [GetWidth](GetWidth.md)
|
||
- [SetFreeze](SetFreeze.md)
|
||
- [IsFreeze](IsFreeze.md)
|
||
|
||
## 相关文档
|
||
|
||
- [当前模块](../Audio.md)
|
||
- [IAudioEffect](../IAudioEffect/IAudioEffect.md)
|
||
- [AudioMixer](../AudioMixer/AudioMixer.md)
|
||
- [API 总索引](../../../main.md)
|