Files
template/docs/api/user-client-modules/AudioPlayer.md
T
2026-02-28 20:23:34 +08:00

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+ ⊙ 朝向用户
```