79 lines
2.5 KiB
Markdown
79 lines
2.5 KiB
Markdown
# IAudioEffect
|
|
|
|
**命名空间**: `XCEngine::Audio`
|
|
|
|
**类型**: `class (interface)`
|
|
|
|
**头文件**: `XCEngine/Audio/IAudioEffect.h`
|
|
|
|
**描述**: 定义音频效果器的最小公共接口,包括样本处理入口和通用的启用/湿声比例控制。
|
|
|
|
## 角色概述
|
|
|
|
`IAudioEffect` 是 `Audio` 模块里最轻量的一层效果器抽象。它要求具体效果器至少提供:
|
|
|
|
- 一个 in-place 的 `ProcessAudio()` 入口
|
|
- 一个启用开关
|
|
- 一个 `wetMix` 参数
|
|
|
|
从 API 形状看,这是一种很常见的 DSP effect base class 设计,适合作为 `AudioMixer` 的效果槽接口。
|
|
|
|
## 当前实现行为
|
|
|
|
基类本身非常轻:
|
|
|
|
- `ProcessAudio()` 是纯虚函数
|
|
- `SetEnabled()` / `IsEnabled()` 默认只读写 `m_enabled`
|
|
- `SetWetMix()` / `GetWetMix()` 默认只读写 `m_wetMix`
|
|
|
|
它不拥有缓冲区,也不定义线程模型、样本格式转换或多通道路由规则。
|
|
|
|
## 当前实现语境
|
|
|
|
当前已取证到的派生效果器包括:
|
|
|
|
- [Equalizer](../Equalizer/Equalizer.md)
|
|
- [FFTFilter](../FFTFilter/FFTFilter.md)
|
|
- [Reverbation](../Reverbation/Reverbation.md)
|
|
|
|
但需要明确:
|
|
|
|
- 这些效果器当前没有自动插入 [AudioSystem](../AudioSystem/AudioSystem.md) 主链路
|
|
- [AudioMixer](../AudioMixer/AudioMixer.md) 虽然能保存 effect 指针,但当前也不会真正执行效果链
|
|
|
|
## 使用和实现上的注意点
|
|
|
|
- `IAudioEffect` 不约束所有权,调用方需要决定 effect 实例何时创建和销毁。
|
|
- 不同派生类对 `wetMix` 的支持成熟度并不一致。
|
|
- 基类并不保证派生类一定会把 `wetMix` 真正作用到样本处理结果上。
|
|
|
|
这也是为什么类型页需要区分“接口形状”和“具体效果器当前实现”。
|
|
|
|
## 线程语义
|
|
|
|
- 当前接口不提供线程安全保证。
|
|
- 典型使用方式应视为同一线程内配置和处理,除非具体实现另有说明。
|
|
|
|
## 当前实现限制
|
|
|
|
- 这是最小接口,不是完整 DSP graph 节点规范。
|
|
- `wetMix` 只是公共参数约定,具体效果器是否真实使用它,要看各自实现。
|
|
- 没有看到该接口层的专门测试覆盖。
|
|
|
|
## 相关方法
|
|
|
|
- [ProcessAudio](ProcessAudio.md)
|
|
- [SetEnabled](SetEnabled.md)
|
|
- [IsEnabled](IsEnabled.md)
|
|
- [SetWetMix](SetWetMix.md)
|
|
- [GetWetMix](GetWetMix.md)
|
|
|
|
## 相关文档
|
|
|
|
- [当前模块](../Audio.md)
|
|
- [AudioMixer](../AudioMixer/AudioMixer.md)
|
|
- [Equalizer](../Equalizer/Equalizer.md)
|
|
- [FFTFilter](../FFTFilter/FFTFilter.md)
|
|
- [Reverbation](../Reverbation/Reverbation.md)
|
|
- [API 总索引](../../../main.md)
|