Files
XCEngine/docs/api/XCEngine/Audio/IAudioEffect/IAudioEffect.md

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)