代码之家  ›  专栏  ›  技术社区  ›  jldugger maiklos

PC扬声器通过javascript发出嘟嘟声?

  •  11
  • jldugger maiklos  · 技术社区  · 17 年前

    我正在重温我们多年前建立的一个ID扫描站程序,我收到一个用户的请求,要求系统发出嘟嘟声。我们正在考虑将系统移动到web浏览器,但是否可以通过javascript或其他方式调用扬声器蜂鸣声?它不需要跨浏览器兼容,但可能需要在Windows或Linux上工作。有问题的电台是

    我知道有人会这么说,所以我会先解决这个问题:我不在乎你怎么看待应用程序制造噪音, 这不是给你的 . 用户请求它,这是有意义的,而且硬件扫描仪已经发出噪音了。是的,我们提供视觉反馈,带有可区分的文本和颜色,但我们发现人们接受现有的蜂鸣音作为正面反馈,并添加更多的音频上下文会有所帮助。

    7 回复  |  直到 9 年前
        1
  •  9
  •   LiraNuna    17 年前

    使用JavaScript是不可能的——除了cookies和新的HTML5本地存储之外,JavaScript无法访问客户端计算机。

    但是,您可以使用一个Java小程序,该小程序可以通过JavaScript进行控制—隐藏或不隐藏。

    你可以找到一个 example here

        2
  •  5
  •   alex    13 年前

    现在使用JavaScript是可能的。

    这里有一个 快速及;肮脏的

    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);
    
    };
    

    jsFiddle .

        3
  •  3
  •   Ahosan Karim Asik    11 年前

    尝试以下方法: 这对你来说可能很容易。。。。

    function play_beep() {
      var snd = new Audio("http://www.externalharddrive.com/waves/computer/hello.wav");
      snd.play();
      return false;
    }
    <input type="submit" value="Play Beep" onclick="return play_beep();" />
        4
  •  2
  •   ChristopheD    17 年前

        5
  •  1
  •   Gabe Moothart    17 年前

    这在本机Javascript中是不可能的。不过,您可以编写一个ActiveX控件来执行此操作。

        6
  •  1
  •   Community Mohan Dere    9 年前

    亚历克斯给我的解决方案 Uncaught TypeError: osc.noteOn is not a function

    但这确实做到了:

    Play = (function() {
      
      var ctx = new(AudioContext || webkitAudioContext);
      
      return function(duration, freq, finishedCallback) {
        duration = +duration;
        if (typeof finishedCallback != "function") {
          finishedCallback = function() {};
        }
        var osc = ctx.createOscillator();
        osc.type = 0;
        osc.connect(ctx.destination);
        osc.frequency.value = freq;
        
        if (osc.start) osc.start();
        else osc.noteOn(0);
        
        setTimeout(
          function() {
            if (osc.stop) osc.stop(0);
            else osc.noteOff(0);
            finishedCallback();
          }, duration
        );
      };
    })();
    Play(42, 666)

    Took it from here

    希望这能节省你一些时间

        7
  •  0
  •   Tim Joseph    17 年前

    Real Java's how to emit a beep 但这确实取决于您是否能够确保您的客户机在每台目标机器上都安装了适当版本的JDK。

        8
  •  0
  •   Jerome    7 年前

    实际上,这是可能的,可能是因为同时在Java中实现了新的函数。下面是一个简短的例子:

    var context = new AudioContext();
    var o = context.createOscillator();
    o.type = "sine";
    o.connect(context.destination);
    o.start();
    setTimeout(function(){ 
            o.stop();
    }, 100);
    

    要了解更多信息,请访问此网站 https://marcgg.com/blog/2016/11/01/javascript-audio/ 在那里我找到了解决办法。