Обеспечивает ли AudioWorklet минимальную задержку воспроизведения звука в Chrome на ПК и Android?

Я пробовал audio html tag, tonejs, audio web api, и у меня все еще около 110 мс с браузером Android и ПК (хром).

Я видел, что есть этот звуковой файл JavaScript ( super()), но я не могу понять, можно ли воспроизводить образцы в этом процессе

1 ответ

Да, задержка AudioWorklet будет < 3 мс (128 сэмплов / 48000 Гц = 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)
Другие вопросы по тегам