我正在尝试使用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 中)。
我究竟做错了什么?