2014-10-31 69 views
3

我一直在试图让WebAudio在Safari工作iOS8上(我已成功得到它在Windows和Android设备上工作)玩。无法获得WebAudio通过iOS的8

这是我的理解,你不能自动在iOS上播放webaudio通过Safari浏览器,而是必须通过触发用户操作第一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 /> 

“PlayDing”时,它看起来像这样的功能:

function PlayDing(DingType) { 
var sound = new Audio('../../UI/Audio/' + DingType + '.mp3').play(); 
} 

的想法是,点击通过“启用音频”按钮,这触发用户交互播放一个MP3文件(这只是1秒的沉默),然后后续的音频事件将正常工作。

任何想法,为什么这不适用于iOS8/Safari?

编辑:

如果我改变JQM按钮发挥出应有丁声,它工作正常,我的iPad播放钟声。

编辑2:

这是没有任何关系从我的iPad的音乐库中播放音频文件。这是关于播放属于该网站一部分的文件/资源​​。

+0

可能重复的是它可以播放音频从本地ios库通过html5?](http://stackoverflow.com/questions/19803399/is-it-possible-to-p lay-audio-from-a-local-ios-library-via-html5) – bodi0 2014-10-31 12:43:14

+0

嗯。不,这不是重复的。这个问题是围绕着查看他们的本地媒体文件。我正在播放一个MP3,这是一个网站的资源。另外,我编辑了这个问题以包含更多信息。 – 2014-10-31 13:00:06

回答

2

“这是我的理解,你不能在iOS上通过Safari自动播放网络音频,而是必须通过用户操作(例如按下按钮)触发第一个WebAudio呼叫,然后一旦这第一个用户驱动操作完成后,WebAudio将工作......... Apparantly。“

你是完全正确的关于游戏的处理。为避免在用户设备上播放不需要的声音或不必要的声音下载,可能需要使用每月的数据 - 声音播放必须与用户的触摸/点击在相同的堆栈中调用。

有很多种,你必须处理,以确保所有用户能够可靠地播放声音的东西。有一件事是它必须在你玩之前下载。为了达到这个目标,我们使用一种称为预加载的技术

你还必须考虑到,并非所有用户都支持相同的音频格式帐户。

你的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> 
的[