【问题标题】:Is there a way to play audio programatically in a web app?有没有办法在网络应用程序中以编程方式播放音频?
【发布时间】:2017-06-20 10:32:58
【问题描述】:

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

但是,在 iOS 上,根本不播放音频。经过investigation我发现iOS对播放音频有限制。

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

有没有办法询问用户是否允许以编程方式播放音频?

【问题讨论】:

  • 可能不是,故意的。这是为了将来自随机网站的烦恼降至最低。您可以查看网络通知 API,但即使有音频通知也不可能 IIRC。
  • 谢谢。是的,通知 api 有一个 sound 属性,但它还没有被任何浏览器支持...

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


【解决方案1】:

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

在我的记忆中...... android 和 iOS 的行为不同,我们可以通过这个技巧(单击或触摸)启动缓冲的最大音频数。您将需要对其进行测试。我的设备 android 6 for iOS 3 视频/音频。

如果您希望同一音频在同一时刻播放更多次: 最好使用相同的源创建更多音频 html 标签。

我是 javascript 的粉丝,但这次最好有 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();

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

     EXE_JUST_ONE_TIME = 'NOMORE'

   } 


    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2022-12-11
    • 2010-09-14
    相关资源
    最近更新 更多