使用web音频API在指定持续时间(毫秒)后停止播放声音
Stop playing sound after specified duration in milliseconds using web audio API
开始使用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);
由于该函数接受双精度类型,因此不应该将其舍入到最接近的秒。根据Web Audio API规范:
when参数描述声音应该在什么时间(以秒为单位)停止播放。它和AudioContext的currentTime属性在同一个时间坐标系中。如果传入0作为该值,或者该值小于currentTime,则声音将立即停止播放。
相关文章:
- 如何减少在移动网络应用程序上播放声音的延迟
- 你能用sound.js在播放声音文件后5秒执行一个动作吗
- 可以'无法播放声音
- 使用javascript播放声音
- 点击播放声音
- 如何检测网页中的更改并使用Javascript播放声音
- 在悬停图像上播放声音,悬停在图像上时停止
- 无法使用JavaScript在iPhone上播放声音,但可以在Android上播放
- 播放声音时Cordova和HTML5的差异
- 在AngularJS中将元素添加到作用域时,如何在所有设备上播放声音
- 当弹出窗口关闭时播放声音文件(谷歌扩展)
- 在iPad上播放声音时延迟
- Javascript自动播放声音文件,单击其中一个按钮时停止
- HTML5音频标签没有播放声音的铬和safari中的第一个未聚焦标签
- 单击图像时播放声音
- Phonegap兼容代码,可在网站HTML/JS页面中播放声音
- 播放声音文件时突出显示句子
- 根据当前编号逐个播放声音文件
- 使用类似 Javascript 的 matlab 播放声音
- 使用web音频API在指定持续时间(毫秒)后停止播放声音