89 lines
3.2 KiB
Markdown
89 lines
3.2 KiB
Markdown
|
|
# AudioSystem
|
|||
|
|
|
|||
|
|
**命名空间**: `XCEngine::Audio`
|
|||
|
|
|
|||
|
|
**类型**: `class (singleton)`
|
|||
|
|
|
|||
|
|
**头文件**: `XCEngine/Audio/AudioSystem.h`
|
|||
|
|
|
|||
|
|
**描述**: 音频系统单例,管理所有音频源、音频后端和监听器状态。
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
AudioSystem 是 XCEngine 音频模块的核心单例类,负责管理整个音频子系统的生命周期。它维护音频监听器(listener)的 3D 变换和速度信息,注册和管理所有活动的音频源(AudioSourceComponent),并通过配置的 IAudioBackend 实现进行实际的音频输出。AudioSystem 每帧调用 Update 方法处理音频源的 3D 空间化计算和混音。
|
|||
|
|
|
|||
|
|
## 单例访问
|
|||
|
|
|
|||
|
|
| 方法 | 描述 |
|
|||
|
|
|------|------|
|
|||
|
|
| `static AudioSystem& Get()` | 获取音频系统单例实例 |
|
|||
|
|
|
|||
|
|
## 公共方法
|
|||
|
|
|
|||
|
|
| 方法 | 描述 |
|
|||
|
|
|------|------|
|
|||
|
|
| [`Initialize`](initialize.md) | 初始化音频系统 |
|
|||
|
|
| [`Shutdown`](shutdown.md) | 关闭音频系统 |
|
|||
|
|
| [`Update`](update.md) | 每帧更新音频系统状态 |
|
|||
|
|
| [`SetBackend`](set-backend.md) | 设置音频后端实现 |
|
|||
|
|
| [`GetBackend`](get-backend.md) | 获取当前音频后端 |
|
|||
|
|
| [`GetCurrentDevice`](get-current-device.md) | 获取当前音频设备名称 |
|
|||
|
|
| [`SetDevice`](set-device.md) | 设置音频设备 |
|
|||
|
|
| [`GetAvailableDevices`](get-available-devices.md) | 获取可用音频设备列表 |
|
|||
|
|
| [`GetMasterVolume`](get-master-volume.md) | 获取主音量 |
|
|||
|
|
| [`SetMasterVolume`](set-master-volume.md) | 设置主音量 |
|
|||
|
|
| [`IsMuted`](is-muted.md) | 检查是否静音 |
|
|||
|
|
| [`SetMuted`](set-muted.md) | 设置静音状态 |
|
|||
|
|
| [`ProcessAudio`](process-audio.md) | 处理音频数据 |
|
|||
|
|
| [`SetListenerTransform`](set-listener-transform.md) | 设置监听器变换 |
|
|||
|
|
| [`SetListenerVelocity`](set-listener-velocity.md) | 设置监听器速度 |
|
|||
|
|
| [`GetListenerPosition`](get-listener-position.md) | 获取监听器位置 |
|
|||
|
|
| [`GetListenerRotation`](get-listener-rotation.md) | 获取监听器旋转 |
|
|||
|
|
| [`GetListenerVelocity`](get-listener-velocity.md) | 获取监听器速度 |
|
|||
|
|
| [`RegisterSource`](register-source.md) | 注册音频源 |
|
|||
|
|
| [`UnregisterSource`](unregister-source.md) | 注销音频源 |
|
|||
|
|
| [`GetStats`](get-stats.md) | 获取音频系统统计信息 |
|
|||
|
|
|
|||
|
|
## 内部方法
|
|||
|
|
|
|||
|
|
| 方法 | 描述 |
|
|||
|
|
|------|------|
|
|||
|
|
| `ProcessSource()` | 处理单个音频源的音频数据(私有) |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
#include <XCEngine/Audio/AudioSystem.h>
|
|||
|
|
#include <XCEngine/Audio/WASAPI/WASAPIBackend.h>
|
|||
|
|
|
|||
|
|
using namespace XCEngine::Audio;
|
|||
|
|
|
|||
|
|
void SetupAudio() {
|
|||
|
|
AudioConfig config;
|
|||
|
|
config.sampleRate = 48000;
|
|||
|
|
config.channels = 2;
|
|||
|
|
config.bitsPerSample = 16;
|
|||
|
|
config.speakerMode = SpeakerMode::Stereo;
|
|||
|
|
|
|||
|
|
AudioSystem::Get().SetBackend(std::make_unique<WASAPIBackend>());
|
|||
|
|
AudioSystem::Get().Initialize(config);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void GameLoop(float deltaTime) {
|
|||
|
|
Math::Vector3 listenerPos = mainCamera->GetPosition();
|
|||
|
|
Math::Quaternion listenerRot = mainCamera->GetRotation();
|
|||
|
|
AudioSystem::Get().SetListenerTransform(listenerPos, listenerRot);
|
|||
|
|
AudioSystem::Get().Update(deltaTime);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CleanupAudio() {
|
|||
|
|
AudioSystem::Get().Shutdown();
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [Audio 模块总览](../audio.md) - Audio 模块总览
|
|||
|
|
- [IAudioBackend](../i-audio-backend/i-audio-backend.md) - 音频后端接口
|
|||
|
|
- [AudioConfig](../audio-config/audio-config.md) - 音频配置
|