有没有办法在Web应用程序中以编程方式播放音频?

时间:2017-06-20 10:32:59

标签: javascript html5 web-applications html5-audio progressive-web-apps

我正在构建一个网络应用程序,它涉及在新订单进入应用程序时播放声音。在桌面上,一切正常。

但是,在iOS上,音频根本不播放。经过一些investigation我发现iOS在播放音频方面存在局限性。

  • 仅在用户互动后
  • 仅在页面处于活动状态且在前面
  • 仅在手机屏幕开启时
  • 无法关闭屏幕,因此您的音频将在第一首歌后停止。

有没有办法让用户允许以编程方式播放音频?

1 个答案:

答案 0 :(得分:0)

是的,这是真的!用户请求之前没有音频缓冲区。 使用一些弹出窗口或任何适合眼睛的动画来吸引用户点击。 你初始播放,同时下一个代码行暂停,你将初始化缓冲,之后你可以编程播放音频。

在我的记忆中... android和iOS没有相同的行为,它是关于我们可以通过这个技巧(单击或触摸)启动缓冲区的最大音频数量。你需要测试它。

如果您希望同一音频在同一时间播放更多次: 最好使用相同的源创建更多的音频html标签。我是js的粉丝,但这次最好以html格式制作html音频标签。

    var EXE_JUST_ONE_TIME = false;

    document.addEventListener("touchstart" , function(e) {

    if (EXE_JUST_ONE_TIME == false){

     EXE_JUST_ONE_TIME = true;

     document.getElementById("LaserShot").play(); // need for play pause just for buffering start
     document.getElementById("LaserShot").pause();
     // now you can play programmability from js 
     document.getElementById("LaserShot_CLONE").play();
     document.getElementById("LaserShot_CLONE").pause();

    }
    else if(EXE_JUST_ONE_TIME = true){

     document.getElementById("MakeReadyotherAudio1").play();
     document.getElementById("MakeReadyotherAudio1").pause();

     EXE_JUST_ONE_TIME = 'NOMORE'

   } 


    }