Обеспечивает ли 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)