Я пытаюсь использовать 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
выводит это перед нажатием кнопки воспроизведения:
... и это после нажатия кнопки воспроизведения:
Но звук не воспроизводится (в Safari).
Что я делаю не так?