在浏览器中每隔一段时间产生声音

问题描述 投票:0回答:1

我想在网络应用程序中安排以一定的时间间隔生成声音。示例代码如下。请注意,我还尝试使用 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 代码也会有同样的行为。

任何有关我如何克服这个奇怪问题的想法将不胜感激。

谢谢。

javascript audio scheduling
1个回答
0
投票

问题已解决。请参阅我上面的评论。总结:使用笔记本电脑的内置扬声器:)

© www.soinside.com 2019 - 2024. All rights reserved.