1

我尝试了音频 html 标签、tonejs、音频 web api,但我仍然有大约 110 毫秒的时间使用 android 和 PC 的浏览器(chrome)。

我看到有这个 JavaScript 音频 worlet ( super() ) 但我不知道是否可以在这个过程中播放样本

4

1 回答 1

0

是的,AudioWorklet 的延迟将小于 3 毫秒(128 个样本/48,000hz = 2.67 毫秒),并且可以通过将解码的 PCM 样本发送到process(). AudioWorklets 在浏览器中没有得到广泛的支持,所以AudioBuffer它是一个很好的跨浏览器替代方案并且效果很好。

此示例加载一堆音频文件并立即在它们之间切换播放:https ://opus-bitrates.anthum.com

音频播放器-worklet.js

class AudioPlayer extends AudioWorkletProcessor {
  decodedAudio  // Float32Array data to play (interleaved or separate)

  constructor() {
    super()

    // set audio to play when received from main/worker thread
    this.port.onmessage = ({ data: { decodedAudio } }) => {
      this.decodedAudio = decodedAudio
    }
  }

  process(inputs, outputs) {
    if (this.decodedPCMAudio) {
      // copy 128 samples from decodedAudio to outputs channels
    }

    // run process() again for next 128 samples
    return true
  }
}

registerProcessor('audio-player', AudioPlayer)
于 2020-05-28T23:21:11.750 回答