Files
XCEngine/docs/api/audio/audio.md

4.2 KiB
Raw Blame History

Audio 模块概览

命名空间: XCEngine::Audio

类型: module

描述: XCEngine 的音频系统模块提供完整的音频播放、3D 空间化、效果处理和混音功能。

概述

Audio 模块是 XCEngine 的音频子系统支持多通道音频播放、3D 空间化定位HRTF、音频效果处理混响、均衡器、FFT、以及基于 WASAPI 的 Windows 音频后端。该模块设计为与 ECS 组件系统集成,通过 AudioSourceComponent 和 AudioListenerComponent 实现音频源的播放和空间化处理。

模块内容

核心系统

组件 文件 描述
AudioSystem AudioSystem.h 音频系统单例,管理所有音频源和后端
AudioMixer AudioMixer.h 音频混音器,支持效果链和 3D 参数
IAudioBackend IAudioBackend.h 音频后端抽象接口
IAudioEffect IAudioEffect.h 音频效果接口基类

音频效果

组件 文件 描述
FFTFilter FFTFilter.h FFT 频谱分析滤波器
Reverbation Reverbation.h 混响效果器( Schroeder 算法的并行 Comb 滤波器 + AllPass 滤波器)
Equalizer Equalizer.h 多频段参数均衡器
HRTF HRTF.h 基于头部相关传输函数的 3D 空间化

Windows 后端

组件 文件 描述
WASAPIBackend XCEngine/Audio/WindowsAudioBackend.h Windows WASAPI 音频后端实现

配置与类型

组件 文件 描述
AudioConfig AudioConfig.h 音频系统配置
Audio3DParams AudioTypes.h 3D 空间化参数
AudioBufferDesc AudioTypes.h 音频缓冲区描述符
SpatializerParams AudioTypes.h 空间化计算参数

枚举类型

枚举 描述
AudioResourceType 音频资源类型
AudioLoadState 音频加载状态
AudioFormat 音频格式WAV, OGG, MP3, FLAC, AAC
SpeakerMode 扬声器模式Mono, Stereo, Surround51, Surround71 等)
AudioChannel 音频通道FrontLeft, FrontRight, FrontCenter, LFE 等)
PlayState 播放状态Stopped, Playing, Paused
StopMode 停止模式Immediate, AllowFadeOut
PanMode 声像模式Pan3D, Pan2D
VolumeSource 音量来源Direct, PathOcclusion, Transmission, Obstruction

使用示例

#include <XCEngine/Audio/AudioSystem.h>
#include <XCEngine/Audio/AudioMixer.h>
#include <XCEngine/Audio/Equalizer.h>
#include <XCEngine/Audio/Reverbation.h>

using namespace XCEngine::Audio;

void InitializeAudioSystem() {
    AudioConfig config;
    config.sampleRate = 48000;
    config.channels = 2;
    config.bitsPerSample = 16;
    config.speakerMode = SpeakerMode::Stereo;
    config.bufferSize = 8192;
    config.bufferCount = 2;

    AudioSystem::Get().Initialize(config);
}

void SetupAudioWithEffects() {
    AudioMixer* mixer = new AudioMixer();
    
    Reverbation* reverb = new Reverbation();
    reverb->SetRoomSize(0.5f);
    reverb->SetWetMix(0.3f);
    reverb->SetDryMix(0.7f);
    
    Equalizer* eq = new Equalizer();
    eq->SetBandCount(4);
    eq->SetBandFrequency(0, 100.0f);
    eq->SetBandGain(0, 3.0f);
    
    mixer->AddEffect(eq);
    mixer->AddEffect(reverb);
    mixer->SetVolume(0.8f);
}

void UpdateListener(const Math::Vector3& pos, const Math::Quaternion& rot) {
    AudioSystem::Get().SetListenerTransform(pos, rot);
}

相关文档