docs: 添加 Audio 模块和 Components 模块 API 文档

- 新增 Audio 模块文档 (54 个文件)
  - AudioSystem 单例类及 20 个方法页
  - AudioMixer 混音器类及 11 个方法页
  - IAudioBackend、IAudioEffect 接口
  - FFTFilter、Reverbation、Equalizer、HRTF 效果类
  - WASAPIBackend Windows 后端
  - AudioConfig、Audio3DParams 等结构体
  - 9 个枚举类型文档
- 新增 Components 模块文档 (3 个文件)
  - AudioSourceComponent 音频源组件
  - AudioListenerComponent 音频监听器组件
- 更新 docs/api/main.md 添加模块导航
This commit is contained in:
2026-03-22 01:56:16 +08:00
parent 6e5ed41fbf
commit 161a0896d5
58 changed files with 1990 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
# 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) - 音频配置

View File

@@ -0,0 +1,34 @@
# AudioSystem::GetAvailableDevices
获取可用音频设备列表。
```cpp
void GetAvailableDevices(std::vector<std::string>& devices);
```
填充传入的 vector获取系统中所有可用的音频输出设备列表。
**参数:**
- `devices` - 用于存储设备名称列表的 vector引用
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void ListAudioDevices() {
std::vector<std::string> devices;
AudioSystem::Get().GetAvailableDevices(devices);
for (size_t i = 0; i < devices.size(); ++i) {
printf("Device %zu: %s\n", i, devices[i].c_str());
}
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetDevice](set-device.md) - 设置音频设备

View File

@@ -0,0 +1,26 @@
# AudioSystem::GetCurrentDevice
获取当前音频设备名称。
```cpp
std::string GetCurrentDevice() const;
```
**返回:** `std::string` - 当前使用的音频设备名称
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void PrintCurrentDevice() {
std::string device = AudioSystem::Get().GetCurrentDevice();
printf("Current audio device: %s\n", device.c_str());
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,14 @@
# AudioSystem::GetListenerPosition
获取监听器位置。
```cpp
const Math::Vector3& GetListenerPosition() const;
```
**返回:** `const Math::Vector3&` - 监听器当前位置引用
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetListenerTransform](set-listener-transform.md) - 设置监听器变换

View File

@@ -0,0 +1,14 @@
# AudioSystem::GetListenerRotation
获取监听器旋转。
```cpp
const Math::Quaternion& GetListenerRotation() const;
```
**返回:** `const Math::Quaternion&` - 监听器当前旋转引用
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetListenerTransform](set-listener-transform.md) - 设置监听器变换

View File

@@ -0,0 +1,14 @@
# AudioSystem::GetListenerVelocity
获取监听器速度。
```cpp
const Math::Vector3& GetListenerVelocity() const;
```
**返回:** `const Math::Vector3&` - 监听器当前速度引用
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetListenerVelocity](set-listener-velocity.md) - 设置监听器速度

View File

@@ -0,0 +1,27 @@
# AudioSystem::GetMasterVolume
获取主音量。
```cpp
float GetMasterVolume() const;
```
**返回:** `float` - 主音量值,范围 [0.0, 1.0]
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void PrintMasterVolume() {
float volume = AudioSystem::Get().GetMasterVolume();
printf("Master volume: %.1f%%\n", volume * 100.0f);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetMasterVolume](set-master-volume.md) - 设置主音量

View File

@@ -0,0 +1,39 @@
# AudioSystem::GetStats
获取音频系统统计信息。
```cpp
const Stats& GetStats() const;
```
返回包含音频系统运行时统计信息的结构体,包括活跃源数量、总源数量、内存使用量和 CPU 使用率。
**返回:** `const Stats&` - 统计信息结构体引用
**Stats 结构体:**
| 成员 | 类型 | 描述 |
|------|------|------|
| `activeSources` | `uint32_t` | 当前正在播放的音频源数量 |
| `totalSources` | `uint32_t` | 注册的音频源总数 |
| `memoryUsage` | `uint64_t` | 音频系统内存使用量(字节) |
| `cpuUsage` | `float` | CPU 使用率估算值 |
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void PrintAudioStats() {
const auto& stats = AudioSystem::Get().GetStats();
printf("Active sources: %u / %u\n", stats.activeSources, stats.totalSources);
printf("Memory usage: %.2f MB\n", stats.memoryUsage / (1024.0 * 1024.0));
printf("CPU usage: %.1f%%\n", stats.cpuUsage * 100.0f);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,40 @@
# AudioSystem::Initialize
初始化音频系统。
```cpp
void Initialize(const AudioConfig& config);
```
使用指定的配置参数初始化音频系统。在此之前必须先通过 SetBackend 设置音频后端实现。初始化过程会配置音频缓冲区大小、采样率、通道数等参数。
**参数:**
- `config` - 音频系统配置,包含采样率、通道数、位深度、扬声器模式、缓冲区大小等
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
#include <XCEngine/Audio/WASAPI/WASAPIBackend.h>
using namespace XCEngine::Audio;
void SetupAudio() {
AudioSystem::Get().SetBackend(std::make_unique<WASAPIBackend>());
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);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [AudioConfig](../audio-config/audio-config.md) - 音频配置

View File

@@ -0,0 +1,28 @@
# AudioSystem::IsMuted
检查是否静音。
```cpp
bool IsMuted() const;
```
**返回:** `bool` - 如果当前处于静音状态则返回 true
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void CheckMuteState() {
if (AudioSystem::Get().IsMuted()) {
printf("Audio is muted\n");
}
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [SetMuted](set-muted.md) - 设置静音状态

View File

@@ -0,0 +1,18 @@
# AudioSystem::ProcessAudio
处理音频数据。
```cpp
void ProcessAudio(float* buffer, uint32 sampleCount, uint32 channels);
```
将所有注册的音频源混音到输出缓冲区。内部处理 3D 空间化、音量控制和效果链。
**参数:**
- `buffer` - 输出音频缓冲区指针
- `sampleCount` - 样本数量
- `channels` - 通道数
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,29 @@
# AudioSystem::RegisterSource
注册音频源。
```cpp
void RegisterSource(Components::AudioSourceComponent* source);
```
将音频源组件注册到音频系统。已注册的音频源将在每帧 Update 时被处理和混音。
**参数:**
- `source` - 要注册的 AudioSourceComponent 指针
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void RegisterAudioSource(Components::AudioSourceComponent* audioSource) {
AudioSystem::Get().RegisterSource(audioSource);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [UnregisterSource](unregister-source.md) - 注销音频源

View File

@@ -0,0 +1,30 @@
# AudioSystem::SetBackend
设置音频后端实现。
```cpp
void SetBackend(std::unique_ptr<IAudioBackend> backend);
```
设置音频系统的后端实现。必须在调用 Initialize 之前设置后端。音频系统不拥有后端的所有权,后端通过 unique_ptr 传递。
**参数:**
- `backend` - 音频后端实现的 unique_ptr支持 IAudioBackend 接口
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
#include <XCEngine/Audio/WASAPI/WASAPIBackend.h>
using namespace XCEngine::Audio;
void SetupAudio() {
AudioSystem::Get().SetBackend(std::make_unique<WASAPIBackend>());
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [IAudioBackend](../i-audio-backend/i-audio-backend.md) - 音频后端接口

View File

@@ -0,0 +1,34 @@
# AudioSystem::SetDevice
设置音频设备。
```cpp
void SetDevice(const std::string& deviceName);
```
切换到指定的音频设备。如果设备名称无效或设备不可用,操作失败。
**参数:**
- `deviceName` - 目标音频设备名称
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void SwitchAudioDevice() {
std::vector<std::string> devices;
AudioSystem::Get().GetAvailableDevices(devices);
if (devices.size() > 1) {
AudioSystem::Get().SetDevice(devices[1]);
}
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [GetAvailableDevices](get-available-devices.md) - 获取可用设备列表

View File

@@ -0,0 +1,31 @@
# AudioSystem::SetListenerTransform
设置监听器变换。
```cpp
void SetListenerTransform(const Math::Vector3& position, const Math::Quaternion& rotation);
```
设置音频监听器的位置和旋转。用于 3D 空间音频计算,包括声音的方向、距离衰减和多普勒效应。
**参数:**
- `position` - 监听器位置(世界坐标)
- `rotation` - 监听器旋转(四元数)
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void UpdateListenerFromCamera(Camera* camera) {
Math::Vector3 pos = camera->GetPosition();
Math::Quaternion rot = camera->GetRotation();
AudioSystem::Get().SetListenerTransform(pos, rot);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,29 @@
# AudioSystem::SetListenerVelocity
设置监听器速度。
```cpp
void SetListenerVelocity(const Math::Vector3& velocity);
```
设置音频监听器的速度向量。用于多普勒效应计算,当声源与监听器之间存在相对运动时会产生音调偏移。
**参数:**
- `velocity` - 监听器速度向量(世界坐标,单位:米/秒)
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void UpdateListenerVelocity(RigidBody* listenerBody) {
Math::Vector3 velocity = listenerBody->GetVelocity();
AudioSystem::Get().SetListenerVelocity(velocity);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,29 @@
# AudioSystem::SetMasterVolume
设置主音量。
```cpp
void SetMasterVolume(float volume);
```
设置全局主音量系数。该值影响所有音频源的输出电平。
**参数:**
- `volume` - 主音量值,有效范围 [0.0, 1.0]
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void SetGlobalVolume() {
AudioSystem::Get().SetMasterVolume(0.75f);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [GetMasterVolume](get-master-volume.md) - 获取主音量

View File

@@ -0,0 +1,30 @@
# AudioSystem::SetMuted
设置静音状态。
```cpp
void SetMuted(bool muted);
```
启用或禁用全局静音。静音状态下所有音频输出将被消音。
**参数:**
- `muted` - true 为启用静音false 为禁用静音
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void ToggleMute() {
bool currentlyMuted = AudioSystem::Get().IsMuted();
AudioSystem::Get().SetMuted(!currentlyMuted);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [IsMuted](is-muted.md) - 检查静音状态

View File

@@ -0,0 +1,25 @@
# AudioSystem::Shutdown
关闭音频系统,释放所有资源。
```cpp
void Shutdown();
```
关闭音频系统并释放相关资源。调用后音频系统将停止所有音频处理,已注册的音频源将被注销。在程序退出或音频系统不再需要时调用。
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void CleanupAudio() {
AudioSystem::Get().Shutdown();
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)

View File

@@ -0,0 +1,29 @@
# AudioSystem::UnregisterSource
注销音频源。
```cpp
void UnregisterSource(Components::AudioSourceComponent* source);
```
将音频源组件从音频系统注销。已注销的音频源将不再被处理和混音。
**参数:**
- `source` - 要注销的 AudioSourceComponent 指针
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void UnregisterAudioSource(Components::AudioSourceComponent* audioSource) {
AudioSystem::Get().UnregisterSource(audioSource);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)
- [RegisterSource](register-source.md) - 注册音频源

View File

@@ -0,0 +1,28 @@
# AudioSystem::Update
每帧更新音频系统状态。
```cpp
void Update(float deltaTime);
```
每帧调用以更新音频系统状态。该方法处理所有已注册音频源的 3D 空间化计算,包括多普勒效应、距离衰减、声像定位等。同时更新内部统计信息。
**参数:**
- `deltaTime` - 距离上一帧的时间增量(秒)
**示例:**
```cpp
#include <XCEngine/Audio/AudioSystem.h>
using namespace XCEngine::Audio;
void GameLoop(float deltaTime) {
AudioSystem::Get().Update(deltaTime);
}
```
## 相关文档
- [AudioSystem 总览](audio-system.md)