2

我希望能够使用 javascript 和 HTML5 元素从回调函数播放音频文件。根据我的阅读,大多数移动设备播放 HTML5 音频的唯一方式是通过用户交互(即单击按钮等)。

我的情况略有不同。按钮单击事件使用回调函数进行 ajax 调用,并根据返回的结果,应该播放不同的声音。这在桌面浏览器上运行良好,但是 android 和 iPad 似乎都不支持这一点。

有谁知道任何解决方法?

示例代码显示如何初始化音频对象等:

    var sound = new Audio('Sample.wav');
    var sound2 = new Audio('Sample2.wav');

/// Button events etc here, stock standard stuff

    function MyCallBack(e)
    {
      if(e.someValue)
       sound.play();
      else
       sound2.play();
    }

编辑: 我已经使用下面概述的类似解决方案解决了这个问题。在我播放的用户事件中,我立即暂停了声音。回调返回后,我继续播放适当的声音

 hit.play(); hit.pause(); fail.play(); fail.pause();
4

3 回答 3

4

您可以尝试将两种声音放入一个音频文件中,然后使用回调排队并在正确的位置播放。

走这条路,您可以在初始用户单击时开始播放声音(开头为空白),然后立即暂停它(从播放事件确保它开始播放)。回调进来后,将 currentTime 设置为要播放的音轨上的位置并开始播放。以这种方式播放应该可以工作,因为初始播放调用发生在用户操作上。

于 2013-06-25T17:01:12.887 回答
1

为了扩展 Derek 的答案,这里是 jQuery 代码,可以为给定的audio元素实现这一点:

<audio preload="auto" id="yourHTMLaudio">
    <source src="/sounds/youraudio.ogg" type="audio/ogg">
    <source src="/sounds/youraudio.mp3" type="audio/mpeg">
    <source src="/sounds/youraudio.wav" type="audio/wav">
</audio>

在按钮的click事件中,调用以下命令:

$("#yourbutton").on("click", function() {
    ...
    $("#yourHTMLaudio").trigger('play').trigger('pause').prop("currentTime", 0);
    ...

然后在您的 Ajaxdone()函数中,您可以像往常一样播放它:

    ...
    $.ajax({
        ...
    }).done(function(msg) {
        ...
        $("#yourHTMLaudio").trigger('play');
        ...
    });
    ...
});
于 2015-08-26T19:25:46.837 回答
0

现在几乎所有的智能手机浏览器都支持 HTML5 音频标签

尝试

    <audio autoplay="autoplay" controls="controls">  
       <source src="music.ogg" />  
       <source src="music.mp3" />  
    </audio> 
于 2013-02-26T14:31:46.857 回答