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

时间:2009-10-28 22:22:11

标签: javascript audio beep

我正在重新审视我们很久以前建立的ID扫描仪工作站程序,我收到了用户发出蜂鸣声的请求。我们正在考虑将系统移动到网络浏览器,但是是否可以通过javascript或其他方式调用扬声器?它不需要跨浏览器兼容,但它可能需要在Windows或Linux上运行。有问题的电台没有配备声卡或外部扬声器,因此请求PC扬声器访问。

我知道有人会这么说,所以我会先解决这个问题:我不关心你对应用程序发出噪音的看法,这不适合你。用户要求它,它是有道理的,硬件扫描仪已经发出噪音了。是的,我们提供具有可区分文本和颜色的视觉反馈,但我们发现人们接受现有的蜂鸣声作为积极反馈并添加更多音频背景会有所帮助。

8 个答案:

答案 0 :(得分:9)

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

但是,您可以使用可通过JavaScript控制的Java小程序 - 隐藏与否。

您可以找到example here

这需要在客户端计算机上安装Java运行时。

答案 1 :(得分:4)

今天可以使用JavaScript。

这是 quick&脏的功能我写了......

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

答案 2 :(得分:3)

尝试以下方式:您可能很容易......

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();" />

答案 3 :(得分:2)

我认为你最好的选择是做一个java applet ......

答案 4 :(得分:1)

使用原生Javascript无法做到这一点。但是,您可以编写一个ActiveX控件来执行此操作。

答案 5 :(得分:1)

Alex的解决方案给了我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

希望这能节省你一些时间

答案 6 :(得分:0)

老实说,我没有对此进行测试,但值得一看,

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

答案 7 :(得分:0)

实际上这是可能的,这可能是由于与此同时用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/