mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-30 11:23:24 +08:00
173 lines
5.6 KiB
Markdown
173 lines
5.6 KiB
Markdown
# AudioPlayer API 文档
|
||
|
||
本文档由 `DeepSeek R1` 模型生成并微调。
|
||
|
||
---
|
||
|
||
## 类描述
|
||
|
||
音频系统的核心控制器,负责管理音频上下文、路由系统、效果器工厂和全局音频参数。支持多音轨管理和 3D 音频空间化配置。
|
||
|
||
```mermaid
|
||
graph LR
|
||
AudioPlayer --> EventEmitter
|
||
|
||
click EventEmitter "https://nodejs.org/api/events.html#class-eventemitter"
|
||
```
|
||
|
||
---
|
||
|
||
## 核心架构
|
||
|
||
```mermaid
|
||
graph TD
|
||
Player[AudioPlayer] --> Sources[音频源工厂]
|
||
Player --> Effects[效果器工厂]
|
||
Player --> Routes[路由系统]
|
||
Player --> Listener[3D 听者配置]
|
||
```
|
||
|
||
---
|
||
|
||
## 属性说明
|
||
|
||
| 属性名 | 类型 | 说明 |
|
||
| ------------- | ------------------------- | ------------------------ |
|
||
| `ac` | `AudioContext` | Web Audio API 上下文实例 |
|
||
| `audioRoutes` | `Map<string, AudioRoute>` | 已注册的音频路由表 |
|
||
| `gain` | `GainNode` | 全局音量控制节点 |
|
||
|
||
---
|
||
|
||
## 方法说明
|
||
|
||
此处暂时只列出方法的简易说明。方法理解难度不高,如果需要可以自行查看代码以及其相关注释来查看如何使用。
|
||
|
||
### 音频源工厂方法
|
||
|
||
| 方法名 | 返回值 | 说明 |
|
||
| ----------------------- | -------------------- | ----------------------------- |
|
||
| `createSource(Source)` | `AudioSource` | 创建自定义音频源 |
|
||
| `createStreamSource()` | `AudioStreamSource` | 创建流式音频源(直播/长音频) |
|
||
| `createElementSource()` | `AudioElementSource` | 基于 HTML5 Audio 元素的音源 |
|
||
| `createBufferSource()` | `AudioBufferSource` | 基于 AudioBuffer 的静态音源 |
|
||
|
||
### 效果器工厂方法
|
||
|
||
| 方法名 | 返回值 | 说明 |
|
||
| ----------------------------- | --------------------- | ---------------------------- |
|
||
| `createEffect(Effect)` | `AudioEffect` | 创建自定义效果器 |
|
||
| `createVolumeEffect()` | `VolumeEffect` | 全局音量控制器 |
|
||
| `createStereoEffect()` | `StereoEffect` | 立体声场控制器 |
|
||
| `createChannelVolumeEffect()` | `ChannelVolumeEffect` | 多声道独立音量控制(6 声道) |
|
||
| `createDelayEffect()` | `DelayEffect` | 精确延迟效果器 |
|
||
| `createEchoEffect()` | `EchoEffect` | 回声效果器(带反馈循环) |
|
||
|
||
### 路由管理方法
|
||
|
||
| 方法名 | 参数 | 说明 |
|
||
| --------------------- | -------------------- | -------------- |
|
||
| `createRoute(source)` | `AudioSource` | 创建新播放路由 |
|
||
| `addRoute(id, route)` | `string, AudioRoute` | 注册命名路由 |
|
||
| `getRoute(id)` | `string` | 获取已注册路由 |
|
||
| `removeRoute(id)` | `string` | 移除指定路由 |
|
||
|
||
### 全局控制方法
|
||
|
||
| 方法名 | 参数 | 说明 |
|
||
| ------------------------------- | ------------------------ | -------------------- |
|
||
| `setVolume(volume)` | `number` (0.0-1.0) | 设置全局音量 |
|
||
| `getVolume()` | - | 获取当前全局音量 |
|
||
| `setListenerPosition(x,y,z)` | `number, number, number` | 设置听者 3D 空间坐标 |
|
||
| `setListenerOrientation(x,y,z)` | `number, number, number` | 设置听者朝向 |
|
||
| `setListenerUp(x,y,z)` | `number, number, number` | 设置听者头顶朝向 |
|
||
|
||
---
|
||
|
||
## 使用示例
|
||
|
||
### 基础音乐播放
|
||
|
||
```typescript
|
||
import { audioPlayer } from '@user/client-modules';
|
||
|
||
// 创建音频源(以音频缓冲为例)
|
||
const bgmSource = audioPlayer.createBufferSource();
|
||
|
||
// 创建播放路由
|
||
const bgmRoute = audioPlayer.createRoute(bgmSource);
|
||
|
||
// 添加效果链
|
||
bgmRoute.addEffect([
|
||
audioPlayer.createStereoEffect(),
|
||
audioPlayer.createVolumeEffect()
|
||
]);
|
||
|
||
// 播放控制
|
||
audioPlayer.play('bgm');
|
||
audioPlayer.pause('bgm');
|
||
```
|
||
|
||
### 3D 环境音效
|
||
|
||
```typescript
|
||
import { audioPlayer } from '@user/client-modules';
|
||
|
||
// 配置3D听者
|
||
audioPlayer.setListenerPosition(0, 0, 0); // 听者在原点
|
||
audioPlayer.setListenerOrientation(0, 0, -1); // 面朝屏幕内
|
||
|
||
// 创建环境音源
|
||
const ambientSource = audioPlayer.createBufferSource();
|
||
await ambientSource.setBuffer(/* 这里填写音频缓冲 */);
|
||
|
||
// 配置3D音效路由
|
||
const ambientRoute = audioPlayer.createRoute(ambientSource);
|
||
const stereo = audioPlayer.createStereoEffect();
|
||
stereo.setPosition(5, 2, -3); // 音源位于右前方高处
|
||
ambientRoute.addEffect(stereo);
|
||
|
||
// 循环播放
|
||
ambientRoute.setLoop(true);
|
||
audioPlayer.addRoute('ambient', ambientRoute);
|
||
audioPlayer.play('ambient');
|
||
```
|
||
|
||
---
|
||
|
||
## 生命周期管理
|
||
|
||
```mermaid
|
||
sequenceDiagram
|
||
participant User
|
||
participant AudioPlayer
|
||
participant AudioContext
|
||
|
||
User->>AudioPlayer: new AudioPlayer()
|
||
AudioPlayer->>AudioContext: 创建音频上下文
|
||
User->>AudioPlayer: createRoute()
|
||
AudioPlayer->>AudioRoute: 实例化路由
|
||
User->>AudioPlayer: play()
|
||
AudioPlayer->>AudioContext: 启动音频时钟
|
||
loop 播放周期
|
||
AudioPlayer->>AudioRoute: 更新状态
|
||
end
|
||
User->>AudioPlayer: stop()
|
||
AudioPlayer->>AudioRoute: 释放资源
|
||
AudioPlayer->>AudioContext: 关闭上下文
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **空间音频配置**
|
||
3D 效果需统一坐标系:
|
||
|
||
```txt
|
||
(0,0,0) 屏幕中心
|
||
X+ → 右
|
||
Y+ ↑ 上
|
||
Z+ ⊙ 朝向用户
|
||
```
|