【问题标题】:Playing sound notifications using Javascript?使用 Javascript 播放声音通知?
【发布时间】:2010-10-01 18:59:36
【问题描述】:

我怎样才能做到这一点,所以每当用户单击链接时,我们都会播放声音?在这里使用 javascript 和 jquery。

【问题讨论】:

  • 我写了一个音频控制的 jQ 插件soundplay.nikolavukovic.net63.net,它支持你所问的等等,文档与 JavaScript 代码捆绑在一起,检查一下。
  • 您可以(例如)使用 api 在关键时刻使用一堆页面音效和.load().play() 填充播放列表。
  • 为了对所有神圣事物的热爱,包括一个静音选项。带有声音的链接是确保用户永远不会回到您的网站的最快方法之一。

标签: javascript jquery audio


【解决方案1】:

使用这个插件:https://github.com/admsev/jquery-play-sound

$.playSound('http://example.org/sound.mp3');

【讨论】:

  • 有没有办法让它拉出实际链接的网址?
  • @hakarune:是的,只需删除source 结尾的“.mp3”即可。
  • This浏览器处于非活动状态或被用户最小化时播放声音。希望对某人有所帮助。
【解决方案2】:

在您的页面上放置一个<audio> 元素。
获取您的音频元素并调用play() 方法:

document.getElementById('yourAudioTag').play();

看看这个例子:http://www.storiesinflight.com/html5/audio.html

This site 揭示了您可以做的其他一些很酷的事情,例如 load()pause() 以及音频元素的一些其他属性。

您想要播放此音频元素的确切时间由您决定。阅读按钮的文本,如果愿意,将其与“否”进行比较。

或者

http://www.schillmania.com/projects/soundmanager2/

SoundManager 2 提供了一个易于使用的 API,允许在任何现代浏览器(包括 IE 6+)中播放声音。如果浏览器不支持 HTML5,那么它会从 flash 中获得帮助。如果你想要严格的 HTML5 而没有 Flash,有一个设置,preferFlash=false

它在 iPad、iPhone (iOS4) 和其他支持 HTML5 的设备 + 浏览器上支持 100% 无 Flash 音频

使用很简单:

<script src="soundmanager2.js"></script>
<script>
// where to find flash SWFs, if needed...
soundManager.url = '/path/to/swf-files/';

soundManager.onready(function() {
    soundManager.createSound({
        id: 'mySound',
        url: '/path/to/an.mp3'
    });

    // ...and play it
    soundManager.play('mySound');
});

这是一个实际的演示:http://www.schillmania.com/projects/soundmanager2/demo/christmas-lights/

【讨论】:

    【解决方案3】:

    找到类似的东西:

    //javascript:
    function playSound( url ){   
      document.getElementById("sound").innerHTML="<embed src='"+url+"' hidden=true autostart=true loop=false>";
    } 
    

    【讨论】:

    • 这太慢了。玩windows浏览器需要将近一秒
    • @Codeglot 取决于应用程序。 1 秒就可以满足我的要求。
    • 另外,您可能会以某种方式预加载它以消除延迟。
    • 延迟来自DOM解析,然后加载文件,并启动它。如果你预加载它,那么你可以start it when needed
    • mousedown 事件后 1 秒是很长的时间。太长了。
    【解决方案4】:

    使用html5音频标签和jquery:

    // appending HTML5 Audio Tag in HTML Body
    $('<audio id="chatAudio">
        <source src="notify.ogg" type="audio/ogg">
        <source src="notify.mp3" type="audio/mpeg">
    </audio>').appendTo('body');
    
    // play sound
    $('#chatAudio')[0].play();
    

    代码from here

    在我的实现中,我将音频嵌入直接添加到 HTML 中,而无需附加 jquery。

    【讨论】:

    • 仅供参考,我正在从 ajax 函数(在页面加载时运行)的成功处理程序上播放声音,并收到此错误:Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first,Chrome Version 70.0.3538.102 (Official Build) (64-bit)...似乎是解决方案这里:stackoverflow.com/a/52821721
    【解决方案5】:

    【讨论】:

      【解决方案6】:
      $('a').click(function(){
          $('embed').remove();
          $('body').append('<embed src="/path/to/your/sound.wav" autostart="true" hidden="true" loop="false">');
      });
      

      【讨论】:

      【解决方案7】:

      我用 Web Audio API 写了一个小函数可以做到这一点...

      var beep = function(duration, type, finishedCallback) {
      
          if (!(window.audioContext || window.webkitAudioContext)) {
              throw Error("Your browser does not support Audio Context.");
          }
      
          duration = +duration;
      
          // Only 0-4 are valid types.
          type = (type % 5) || 0;
      
          if (typeof finishedCallback != "function") {
              finishedCallback = function() {};   
          }
      
          var ctx = new (window.audioContext || window.webkitAudioContext);
          var osc = ctx.createOscillator();
      
          osc.type = type;
      
          osc.connect(ctx.destination);
          osc.noteOn(0);
      
          setTimeout(function() {
              osc.noteOff(0);
              finishedCallback();
          }, duration);
      
      };
      

      【讨论】:

        【解决方案8】:

        新的emerger...目前看来兼容IE、Gecko浏览器和iPhone...

        http://www.jplayer.org/

        【讨论】:

          【解决方案9】:

          以下代码可能会帮助您仅使用 javascript 在网页中播放声音。您可以在http://sourcecodemania.com/playing-sound-javascript-flash-player/查看更多详细信息

          <script>
          function getPlayer(pid) {
              var obj = document.getElementById(pid);
              if (obj.doPlay) return obj;
              for(i=0; i<obj.childNodes.length; i++) {
                  var child = obj.childNodes[i];
                  if (child.tagName == "EMBED") return child;
              }
          }
          function doPlay(fname) {
              var player=getPlayer("audio1");
              player.play(fname);
          }
          function doStop() {
              var player=getPlayer("audio1");
              player.doStop();
          }
          </script>
          
          <form>
          <input type="button" value="Play Sound" onClick="doPlay('texi.wav')">
          <a href="#" onClick="doPlay('texi.wav')">[Play]</a>
          <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
              width="40"
              height="40"
              id="audio1"
              align="middle">
              <embed src="wavplayer.swf?h=20&w=20"
                  bgcolor="#ffffff"
                  width="40"
                  height="40"
                  allowScriptAccess="always"
                  type="application/x-shockwave-flash"
                  pluginspage="http://www.macromedia.com/go/getflashplayer"
              />
          </object>
          
          <input type="button" value="Stop Sound" onClick="doStop()">
          </form>
          

          【讨论】:

            【解决方案10】:

            首先,作为用户,我不喜欢这样。

            最好的办法可能是使用一个小的 Flash 小程序在后台播放你的声音。

            也在这里回答:Cross-platform, cross-browser way to play sound from Javascript?

            【讨论】:

            • 如果用户知道会播放声音,这有什么不好?
            • 这很有用,如果用户需要蜂鸣警报,新订单到达时怎么办?也许用户没有一直盯着屏幕,也许我需要小便并打开 BEEP,然后其他人可以接听命令.. 只是几个例子..
            猜你喜欢
            • 1970-01-01
            • 2015-02-04
            • 1970-01-01
            • 2010-10-07
            • 2012-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-25
            相关资源
            最近更新 更多