我一直在努力让WebAudio在iOS8上的Safari中运行(我已经成功地在Windows和Android设备上使用它。)
据我了解,您不能通过iOS上的Safari自动播放webaudio,而是必须通过用户操作(例如按下按钮)触发第一个WebAudio呼叫。然后,一旦完成第一个用户驱动的操作,WebAudio将工作.........显然。
所以我设置了一个按钮(使用JQM):
<a href="#" onclick="PlayDing('Silent');" data-icon="info" data-role="button" data-mini="false" data-theme="b" data-corners="false">Enable Audio</a><hr />
&#34; PlayDing&#34;是一个看起来像这样的函数:
function PlayDing(DingType) {
var sound = new Audio('../../UI/Audio/' + DingType + '.mp3').play();
}
这个想法是通过点击&#34;启用音频&#34;按钮,这会触发用户交互来播放mp3文件(只有1秒钟的静音),然后后续的音频事件才能正常工作。
为什么这不适用于iOS8 / Safari?
编辑:
如果我更改我的JQM按钮以播放正确的铃声,它可以正常工作,我的iPad可以播放。
编辑2:
这与从我的iPad音乐库播放音频文件无关。这是关于播放作为网站一部分的文件/资源。
答案 0 :(得分:2)
&#34;我的理解是你不能通过iOS上的Safari自动播放webaudio,而是必须通过用户操作(例如按下按钮)触发第一个WebAudio呼叫。然后,一旦完成第一个用户驱动的操作,WebAudio将工作.........显然。&#34;
你对戏剧的处理是完全正确的。为避免播放不需要的声音或不必要的声音下载到可能使用月度数据的用户设备上 - 必须在与用户触摸/点击相同的堆栈中调用声音播放。
您需要处理多项事项,以确保所有用户都能可靠地播放声音。有一点是必须在播放之前下载它。为此,我们使用了一种称为预加载的技术。
您还必须考虑到并非所有用户都支持相同的音频格式。
您的HTML和Javascript示例如下:
<强>使用Javascript:强>
function PlayDing(DingType) {
//Get a reference to the audio element
var sound = document.getElementById(DingType);
//Play it
sound.play();
}
<强> HTML:强>
<body>
<!--Declare the sounds in as many formats as possible and let the user's browser handling what sound to play & caching -->
<audio id="Silent" preload="auto">
<source src="'../../UI/Audio/silent.ogg" type="audio/ogg">
<source src="'../../UI/Audio/silent.wav" type="audio/wav">
<source src="'../../UI/Audio/silent.aac" type="audio/mpeg">
</audio>
<a href="#" onclick="PlayDing('Silent');" data-icon="info" data-role="button" data-mini="false" data-theme="b" data-corners="false">Enable Audio</a>
<hr />
</body>