Javascript 如何使用web音频API播放声音文件Safari?

Javascript 如何使用web音频API播放声音文件Safari?,javascript,ios,audio,safari,web-audio-api,Javascript,Ios,Audio,Safari,Web Audio Api,我正在修改一个脚本来播放我在Codepen上找到的mp3,以便在Safari上使用它。在Firefox和Chrome中工作正常,但Safari抱怨:“未处理的承诺拒绝:TypeError:没有足够的参数 index.html:25“ 我读过一些比我需要的更高级的东西。我只想播放mp3中的声音。不过我需要网络音频,因为这是让它在iOS Safari上运行的唯一方法 有人知道如何让狩猎快乐吗 (函数(){ 如果('AudioContext'在窗口中| |'webkitAudioContext'在

我正在修改一个脚本来播放我在Codepen上找到的mp3,以便在Safari上使用它。在Firefox和Chrome中工作正常,但Safari抱怨:“未处理的承诺拒绝:TypeError:没有足够的参数 index.html:25“

我读过一些比我需要的更高级的东西。我只想播放mp3中的声音。不过我需要网络音频,因为这是让它在iOS Safari上运行的唯一方法

有人知道如何让狩猎快乐吗

(函数(){
如果('AudioContext'在窗口中| |'webkitAudioContext'在窗口中){
//检查web音频API。Safari需要webkit前缀。
常量URL=https://s3-us-west-2.amazonaws.com/s.cdpn.io/123941/Yodel_Sound_Effect.mp3';
var AudioContext=window.AudioContext | | window.webkitadiocontext;
var context=new AudioContext();//使其成为交叉浏览器
const playButton=document.querySelector(“#play”);
让我们来缓冲一下;
window.fetch(URL)
.then(response=>response.arrayBuffer())
.then(arrayBuffer=>context.decodeAudioData(arrayBuffer))
。然后(音频缓冲区=>{
yodelBuffer=音频缓冲区;
});
playButton.onclick=()=>play(yodelBuffer);
功能播放(音频缓冲区){
const source=context.createBufferSource();
source.buffer=音频缓冲区;
source.connect(context.destination);
source.start();
}
}
}());

约德尔Safari(Webkit)不支持BaseAudioContext.decodeAudioData()基于承诺的语法。请参见以下链接中的详细浏览器兼容性

因此,您需要使用旧的回调语法,如下所示。它适用于Safari 6.0以上版本和Chrome 10以上版本

window.fetch(URL)
  .then(response => response.arrayBuffer())
  .then(arrayBuffer => context.decodeAudioData(arrayBuffer, 
                                               audioBuffer => {
                                                 yodelBuffer = audioBuffer;
                                                }, 
                                               error => 
                                               console.error(error)
                                              ))

美好的谢谢。奇怪的是,iOS上的Safari播放的文件带有失真和噪音,但这是另一个问题。失真和噪音?可能是音频解码问题太奇怪了,它只发生过两次,而且只有在加载页面后第一次播放声音时才会发生。甚至不能完全确定这是否是因为我的耳机插孔里的袖珍线头造成的。但第二次听起来不错。不管怎样,我需要做更多的测试,看看如何重现。我也这么做,但对我来说,有时音频播放音量很小,突然音量变大了。另一个奇怪的事情是,有时音频是听不见的,刷新页面后,它就工作了@月游