mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-30 11:23:24 +08:00
5.3 KiB
5.3 KiB
AudioRoute 音频播放路由 API 文档
本文档由 DeepSeek R1
模型生成并微调。
类描述
音频播放控制的核心类,负责管理音频源与效果器的连接关系,协调播放状态转换,并处理音频管线生命周期。
graph LR
AudioRoute --> EventEmitter
click EventEmitter "https://nodejs.org/api/events.html#class-eventemitter"
属性说明
属性名 | 类型 | 说明 |
---|---|---|
output |
AudioNode |
最终输出节点(继承自 IAudioOutput) |
effectRoute |
AudioEffect[] |
效果器链数组(按顺序存储已连接的效果器实例) |
endTime |
number |
淡出过渡时长(单位:秒),默认 0 |
status |
AudioStatus |
当前播放状态(见下方枚举定义) |
duration |
number (getter) |
音频总时长(单位:秒) |
currentTime |
number (get/set) |
当前播放进度(单位:秒),设置时会触发 seek 操作 |
AudioStatus 枚举
enum AudioStatus {
Playing, // 正在播放
Pausing, // 淡出暂停过程中
Paused, // 已暂停
Stoping, // 淡出停止过程中
Stoped // 已停止
}
方法说明
setEndTime
function setEndTime(time: number): void;
设置淡出过渡时长
参数 | 类型 | 说明 |
---|---|---|
time | number |
淡出动画时长(单位:秒) |
onStart
function onStart(fn?: (route: AudioRoute) => void): void;
注册播放开始钩子函数
参数 | 类型 | 说明 |
---|---|---|
fn |
(route) => void |
播放开始时触发的回调函数 |
onEnd
function onEnd(fn?: (time: number, route: AudioRoute) => void): void;
注册播放结束钩子函数
参数 | 类型 | 说明 |
---|---|---|
fn |
(duration, route) => void |
淡出阶段开始时触发的回调,duration 为淡出时长 |
play
function play(when?: number = 0): Promise<void>;
启动/恢复音频播放
参数 | 类型 | 说明 |
---|---|---|
when |
number |
基于 AudioContext 时间的启动时刻(秒) |
pause
function pause(): Promise<void>;
触发暂停流程(执行淡出过渡)
resume
function resume(): void;
从暂停状态恢复播放(执行淡入过渡)
stop
function stop(): Promise<void>;
完全停止播放并释放资源
addEffect
function addEffect(effect: AudioEffect | AudioEffect[], index?: number): void;
添加效果器到处理链
参数 | 类型 | 说明 |
---|---|---|
effect |
AudioEffect /数组 |
要添加的效果器实例 |
index |
number (可选) |
插入位置,负数表示从末尾倒计数 |
removeEffect
function removeEffect(effect: AudioEffect): void;
从处理链移除效果器
参数 | 类型 | 说明 |
---|---|---|
effect |
AudioEffect |
要移除的效果器实例 |
事件说明
事件名 | 参数 | 触发时机 |
---|---|---|
updateEffect |
- | 效果器链发生变更时 |
play |
- | 开始/恢复播放时 |
stop |
- | 完全停止播放后 |
pause |
- | 进入暂停状态后 |
resume |
- | 从暂停状态恢复时 |
总使用示例
import { audioPlayer } from '@user/client-modules';
// 创建音频播放器和路由
const source = audioPlayer.createBufferSource();
const route = audioPlayer.createRoute(audioSource);
// 配置效果链
const stereo = audioPlayer.createStereoEffect();
const echo = audioPlayer.createEchoEffect();
const volume = audioPlayer.createVolumeEffect();
route.addEffect([stereo, echo], 0); // 插入到链首
route.addEffect(volume); // 音量控制放到链尾
// 播放暂停
await route.play();
await route.pause();
route.resume(); // 继续操作不是异步,不需要 await
await route.stop();
处理流程示意图
sequenceDiagram
participant User
participant AudioRoute
participant Effects
User->>AudioRoute: play()
AudioRoute->>Effects: 启动所有效果器
Effects-->>AudioRoute: 准备完成
AudioRoute->>Source: 开始播放
loop 播放中
AudioRoute->>Effects: 实时音频处理
end
User->>AudioRoute: pause()
AudioRoute->>Effects: 启动淡出过渡
Effects-->>AudioRoute: 过渡完成
AudioRoute->>Source: 暂停播放