mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-04-30 11:23:24 +08:00
3.9 KiB
3.9 KiB
AudioSource API 文档
本文档由 DeepSeek R1
模型生成并微调。
类描述
音频系统的源头抽象类,定义了音频播放的核心控制接口。支持多种音频源类型,包括流媒体、HTML 音频元素和静态音频缓冲。
graph LR
AudioPlayer --> EventEmitter
click EventEmitter "https://nodejs.org/api/events.html#class-eventemitter"
抽象成员说明
成员 | 类型 | 说明 |
---|---|---|
output |
AudioNode |
音频输出节点(必须实现) |
duration |
number |
音频总时长(秒) |
currentTime |
number |
当前播放时间(秒) |
playing |
boolean |
播放状态标识 |
核心方法说明
abstract play
function play(when?: number): void;
启动音频播放时序
参数 | 类型 | 说明 |
---|---|---|
when | number |
预定播放时间(基于 AudioContext.currentTime ) |
abstract stop
function stop(): number;
停止播放并返回停止时刻
abstract connect
function connect(target: IAudioInput): void;
连接至音频处理管线
参数 | 类型 | 说明 |
---|---|---|
target | IAudioInput |
下游处理节点/效果器 |
abstract setLoop
function setLoop(loop: boolean): void;
设置循环播放模式
事件系统
事件名 | 参数 | 触发时机 |
---|---|---|
play |
- | 开始播放时 |
end |
- | 自然播放结束时 |
自定义音频源示例
网络实时通话源
class WebRTCAudioSource extends AudioSource {
private mediaStream: MediaStreamAudioSourceNode;
output: AudioNode;
constructor(ac: AudioContext, stream: MediaStream) {
super(ac);
this.mediaStream = ac.createMediaStreamSource(stream);
this.output = this.mediaStream;
}
get duration() {
return Infinity;
} // 实时流无固定时长
get currentTime() {
return this.ac.currentTime;
}
play() {
this.mediaStream.connect(this.output);
this.playing = true;
this.emit('play');
}
stop() {
this.mediaStream.disconnect();
this.playing = false;
return this.ac.currentTime;
}
connect(target: IAudioInput) {
this.output.connect(target.input);
}
setLoop() {} // 实时流不支持循环
}
// 使用示例
navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => {
const source = new WebRTCAudioSource(audioContext, stream);
source.connect(effectsChain);
source.play();
});
内置实现说明
AudioStreamSource(流媒体源)
graph LR
Network[网络数据流] --> Buffer[缓冲区]
Buffer --> Decoder[音频解码器]
Decoder --> Output[实时音频节点]
- 支持渐进式加载
- 动态缓冲管理
- 适用于浏览器自身不支持的音频类型
AudioElementSource(HTML 音频元素源)
graph LR
AudioTag[audio 元素] -->|音频流| Output[媒体元素源节点]
- 基于 HTML5 Audio 元素
- 支持跨域资源
- 自动处理音频格式兼容
AudioBufferSource(静态音频缓冲源)
graph LR
File[音频文件] --> Decode[解码为 AudioBuffer]
Decode --> Output[缓冲源节点]
- 完整音频数据预加载
- 精确播放控制
- 支持内存音频播放
注意事项
- 时间精度
所有时间参数均以AudioContext.currentTime
为基准,精度可达 0.01 秒