Javascript Web音频API-获取歌曲中的当前偏移量&;源的启动事件
我正在使用Web Audio API中的源播放一段音乐曲目Javascript Web音频API-获取歌曲中的当前偏移量&;源的启动事件,javascript,web-audio-api,Javascript,Web Audio Api,我正在使用Web Audio API中的源播放一段音乐曲目 var source = audioCtx.createBufferSource(); source.buffer = audioBuffer; source.connect(audioCtx.destination); source.start(when, offset, duration); 我知道有一个事件监听器可以在源代码播放完毕后使用,source.onedded。是否有一个事件监听器可以在源代码启动时使用?e、 g.s
var source = audioCtx.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioCtx.destination);
source.start(when, offset, duration);
我知道有一个事件监听器可以在源代码播放完毕后使用,source.onedded
。是否有一个事件监听器可以在源代码启动时使用?e、 g.source.onstart
此外,在任何时候都可以从音源获得当前正在播放的曲目的哪一部分?或者甚至是从audioCtx
e、 g.source.getCurrentOffset();//0:21
我希望避免在源启动时启动setTimeout的当前策略,因为它不准确
示例
source.start(when, offset, duration);
setTimeout(function() {
console.log("The track has started!");
}, 1000 * when);
谢谢 不确定您想要的是什么,但源代码是在您告诉它的时候开始的:在时间
when
目前无法确定源代码在缓冲区中播放的位置。人们要求使用此功能,但规范中对此没有做任何修改。返回的时间总是不准确的。您获得了context.currentTime(),但这对您没有帮助。使用setTimeout,您应该会很好。您可以使用myArrayBuffer.duration获取缓冲区的长度。您还可以在开始时使用Date(),并用另一个日期()确定播放了多长时间。您可以这样做:
function my_start(when, offset, duration, callback) {
setTimeout(function() {
source.start(0, offset, duration);
callback();
}, when);
}
function onStartedCallback() {
console.log("The track has started!");
}
my_start(when, offset, duration, onStartedCallback);
我甚至建议扩展源代码
原型,但我知道这通常是不受欢迎的,因为您可能会覆盖某些内容。
另外,为了更准确,您可以使用计时。谢谢您的回复。我需要在源代码开始播放时触发事件,而不是在创建时。你可以假设我不知道“何时”是什么,或者如果不可能,那么就假设我不能使用setTimeout。我理解为什么你不知道
何时是,因为你设置了它。但是目前,没有办法知道,所以假设源代码确实开始播放,那么setTimeout
可能是您能做的最好的了。在启动时添加事件将需要更改规范。您可以始终启动(0)
其他节点并停止(何时)
它,并收听它的合并的事件,但我不确定您是否能获得更高的精度。但实际上,为什么需要比setTimeout
提供的精度更高的精度呢?这是另一个AudioContext的方法吗?那么,您不能使用audio_ctx调度调用此方法吗?除此之外,我真的看不出什么东西需要如此精确。