gpt4 book ai didi

javascript - 使用网络音频 API 在以毫秒为单位的指定持续时间后停止播放声音

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:31 25 4
gpt4 key购买 nike

在使用 AudioBufferSourceNode 开始播放来自 AudioBuffer 的音频之后,如何让它在预定时间后停止(毫秒)?我的设置很简单:

// create audio source
var source = audioCtx.createBufferSource();

// play audio from source
source.start();

使用 AudioBufferSourceNode.stop()我只能以秒为单位指定此持续时间,但由于某种原因,提供任何非整数都会评估为零,并使音频立即停止:

source.stop(0.25); // should be 250 milliseconds, but audio stops immediately

setTimeout 不够精确,偶尔会出现抖动/漂移,尤其是当 UI 工作量很大,或者其他计算正在别处执行时。

setTimeout(function () {
source.stop(); // very inaccurate
}, 250);

是否有一个简单的解决方案可以在一定的毫秒后停止播放音频,而不诉诸于在工作线程中忙等待等黑客攻击?

最佳答案

我认为您误解了 stop() 的第一个参数的作用。

它表示相对于音频上下文时间的时间量,这意味着当调用stop()时,您需要将那个时间添加到它:

source.stop(context.currentTime + 0.25);

由于该函数接受 double ,因此不应将其四舍五入到最接近的秒数。根据Web Audio API specification :

The when parameter describes at what time (in seconds) the sound should stop playing. It is in the same time coordinate system as the AudioContext's currentTime attribute. If 0 is passed in for this value or if the value is less than currentTime, then the sound will stop playing immediately.

关于javascript - 使用网络音频 API 在以毫秒为单位的指定持续时间后停止播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31878665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com