我想在网络应用程序中安排以一定的时间间隔生成声音。示例代码如下。请注意,我还尝试使用 Web Audio API 来解决与我将在此处描述的问题完全相同的问题。首先是代码:
export default class BeepPlayer {
constructor(interval) {
this.audio = new Audio()
this.audio.src = 'src/assets/sounds/metronomeClick.wav'
this.interval = (60 / interval) * 1000
this.intervalID = null
console.log('interval: ' + this.interval)
}
play() {
this.intervalID = setTimeout(this._playSound.bind(this), this.interval)
}
_playSound() {
console.log('beep')
this.audio.play()
clearTimeout(this.intervalID)
this.intervalID = setTimeout(this._playSound.bind(this), this.interval)
}
stop() {
clearTimeout(this.intervalID)
this.audio = null
}
}
如果我构造间隔为 60 的对象,play() 将每 1 秒发出一次声音。
如果我构造间隔为 30 的对象,play() 将每 2 秒发出一次声音,但会跳过第一声蜂鸣声。
如果我构造间隔为 20 的对象,play() 将每 3 秒发出一次声音,但会跳过第一声蜂鸣声。
如果我构造间隔为 15 的对象,play() 将不会产生任何声音。
我不知道为什么在 3 秒左右有一个阈值,也不知道为什么甚至不加载音频文件的 Web Audio API 代码也会有同样的行为。
任何有关我如何克服这个奇怪问题的想法将不胜感激。
谢谢。
问题已解决。请参阅我上面的评论。总结:使用笔记本电脑的内置扬声器:)