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

2.9 KiB
Raw Blame History

Equalizer

命名空间: XCEngine::Audio

类型: class

头文件: XCEngine/Audio/Equalizer.h

描述: 一个多段参数均衡器效果,实现上使用按频段串行处理的 IIR 型滤波系数。

角色概述

Equalizer 是当前 IAudioEffect 派生效果器里最像“真实音频处理器”的一个。它提供:

  • 可调频段数量
  • 每段频率
  • 每段增益
  • 每段 Q 值

从设计思路上,它对应的是常见商用引擎里的基础 EQ 效果,而不是完整母带级处理器。

当前实现行为

1. 会直接原地修改 buffer

ProcessAudio() 当前会:

  • 检查启用状态和参数合法性
  • 按通道遍历
  • 对每个频段顺序执行滤波
  • 直接回写到输入 buffer

因此,它是一个真正会改写音频样本的效果器。

2. 参数更新会重算滤波系数

以下接口都会触发 ComputeCoefficients()

  • SetBandFrequency()
  • SetBandGain()
  • SetBandQ()

当前实现里还包含基础 clamp

  • 频率 20Hz ~ 20000Hz
  • 增益 -24dB ~ 24dB
  • Q 值 0.1 ~ 10.0

3. 默认带数和初始频点

构造函数默认创建 4 段 EQ并把中心频率初始化为

  • 100Hz
  • 500Hz
  • 2000Hz
  • 8000Hz

wetMix 的现实状态

虽然类型覆写了 SetWetMix() / GetWetMix(),但当前 ProcessAudio() 并没有按 dry/wet 混合输出,它是直接把处理结果覆盖回 buffer。

所以 wetMix 目前更像被保存下来的参数,而不是已接入的混合控制。

通道语义

当前实现通过 m_bandStates[ch * m_bandCount + band] 管理状态,但 SetBandCount() 里把状态数组固定 resize 为 count * 2。这说明当前实现默认按双声道思路写的:

  • 对单声道和立体声更合理
  • 对多于 2 个通道的音频没有看到可靠保障

线程语义

  • 当前实现没有内部加锁。
  • 参数修改和样本处理不应默认认为可跨线程并发。

当前实现限制

  • wetMix 当前不参与真正的干湿混合。
  • 样本率固定按 48000 计算系数,没有看到从实际流配置动态同步采样率。
  • 通道状态数组当前按双声道规模预设,多通道支持不完整。
  • 没有看到该类型的直接单元测试。

相关方法

相关文档