1

这是我的 Jquery 代码:

   $(".check").on("click", function(){

         if($(this).is(":visible")){
               $('#audio').remove();
               $file=$(this).html(); // "mp3FileName"
               $(this).append('<div id="audio"><audio autoplay="autoplay" src="sounds/'+$file+'.mp3"></audio></div>');
        }

    });

这完美地工作。但是,在 ipad 上,当用户“触摸”触发音频的“检查”类按钮时,音频播放前大约有 1 到 1.5 秒的暂停。我想我应该预加载我所有的音频文件。但是,我没有这方面的经验。我将拥有大约 900 个音频文件,每个文件大约 10 KB。

什么是最好的方法来实现这个,让触摸在没有这么长时间的停顿的情况下关闭声音?

4

4 回答 4

0

一件小事会有所帮助:

var evt = ('ontouchstart' in window) ? 'touchstart' : 'click';
$(".check").on(evt, function(){...}

在触发点击事件之前,大多数支持触摸的设备都会有半秒的延迟。因此,无需经历尝试预加载 900 (!!!!) 音频文件的所有痛苦,您只需绑定到touchstart而不是click启用触控设备即可节省一些时间。

于 2013-03-15T16:53:57.323 回答
0

查看SoundManager2中的Multi-Shot 示例(Demo 4g)

如果您可以将所有 900 个样本放在一个音频文件中,那就是。

它将防止多次加载和缓冲的开销,以及 900 个 HTTP 请求的开销(每个样本很容易达到 1kb,总共几乎是 1 兆字节!)

还要确保您使用 Kevin Ennis 回答中描述的“ontouchstart”事件,这将为您节省 300 毫秒。

于 2013-08-28T07:28:37.497 回答
0

我通过使用 PhoneGap 的 Cordova Media 插件并在用户有机会单击按钮之前以零音量播放文件来解决延迟问题:

function playAudio(src, preload) {

        // Create Media object from src
        my_media = new Media(src);

        // Play audio
        if (preload === true) {
            my_media.setVolume(0);
        } else {
            my_media.setVolume(1);
        }
        my_media.play();   

}
于 2014-10-16T02:42:21.337 回答
0

这个错误对于 Apple 设备很常见,这对他们来说是一个很大的缺点。至于这个延迟,试着做你在你的问题中的想法,它会消除这个错误。而且,发生这种情况还有另一个原因,Apple iPad 降低音频/视频质量以使其可播放,这是他们的错误,今天每个音频/视频立即播放是正常的。

于 2013-03-15T05:11:27.840 回答