如何使用javascript在浏览器(safari)中请求音频自动播放权限
我在Safari(MAC)中遇到这个错误 我正在实现一个功能,当买家向卖家发送请求时,它会触发音频警报。我可以播放静音音频,但在非静音播放时显示错误。 我想问的是,我们是否有任何方法可以要求用户允许音频播放许可,就像我们使用JavaScript请求地理位置或摄像头/麦克风访问许可一样。 任何帮助都将不胜感激 这是我的代码:如何使用javascript在浏览器(safari)中请求音频自动播放权限,javascript,jquery,audio,safari,autoplay,Javascript,Jquery,Audio,Safari,Autoplay,我在Safari(MAC)中遇到这个错误 我正在实现一个功能,当买家向卖家发送请求时,它会触发音频警报。我可以播放静音音频,但在非静音播放时显示错误。 我想问的是,我们是否有任何方法可以要求用户允许音频播放许可,就像我们使用JavaScript请求地理位置或摄像头/麦克风访问许可一样。 任何帮助都将不胜感激 这是我的代码: window.MutedAudioPlayed = false; window.MyAudio = new Audio("https://XXXX.com/
window.MutedAudioPlayed = false;
window.MyAudio = new Audio("https://XXXX.com/input_sound.mp3");
window.MyAudio.preload = 'auto';
window.MyAudio.muted = true;
window.MyAudio.play().then(function (event) {
window.MutedAudioPlayed = true;
console.log('Audio MutedAudioPlayed: ', window.MutedAudioPlayed);
}).catch(function (error) {
window.MutedAudioPlayed = false;
console.log('Audio Play Error: ', error.message);
});
window.MyAudio.muted = false;
window.MyAudio.play().then(function (event) {
console.log("Audio Play: ", event);
}).catch(function (error) {
console.log('Audio Play Error: ', error.message);
});
根据我们目前的计算,您可以执行以下操作:
音频
的权限(通常代表麦克风,但也适用于声音)AudioBuffer
播放,例如,请参见下文const audioContext=new(window.audioContext | | window.webkitadiocontext)();
navigator.mediaDevices
.getUserMedia({audio:true})
.然后(()=>{
const source=audioContext.createBufferSource();
source.addEventListener('end',()=>{
source.stop();
audioContext.close();
});
const request=new XMLHttpRequest();
open('GET','/path to sound.mp3',true);
request.responseType='arraybuffer';
request.onload=()=>{
audioContext.decodeAudioData(
请求.答复,
(缓冲区)=>{
source.buffer=缓冲区;
source.connect(audioContext.destination);
source.start();
},
(e) =>{
console.log('解码音频数据时出错'+e.message);
});
}
request.send();
})
.catch(reason=>console.error(`Audio permissions denied:${reason}`));
但这种方法有几个缺点: