Я пытаюсь использовать Web Audio API
для воспроизведения звука в моем приложении React
.
В настоящее время он воспроизводит звук во всех браузерах, кроме Safari v12.1
.
Я знаю, что Safari имеет ограничения на автозапуск и требует взаимодействия с пользователем для воспроизведения звука, поэтому у меня есть кнопка воспроизведения, которая вызывает_play()
функция:
_play = (url, index) => {
this._getData(url);
this.source.start(index)
}
Вызывает функцию _getData()
, которая выглядит следующим образом:
_getData(url) {
this.source = this.audioContext.createBufferSource();
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.onload = () => {
var audioData = request.response;
console.log(this.audioContext)
this.audioContext.decodeAudioData(audioData, buffer => {
this.source.buffer = buffer;
this.source.connect(this.audioContext.destination);
},
function(e){ console.log("Error with decoding audio data" + e.err); });
}
request.send();
}
this.audioContext
создается в компоненте constructor
с использованием:
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
console.log(this.audioContext)
внутри request.onload
выводит это до нажатия play:
... и это после нажатия play:
Но звук не воспроизводится (в Safari).
Что я делаю не так?