11

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

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

4

8 回答 8

9

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

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

你可以在这里找到一个例子

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

于 2009-10-28T22:29:22.377 回答
5

今天的 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);

};

js小提琴

于 2012-11-02T11:23:16.040 回答
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();" />

于 2015-04-02T08:26:37.770 回答
2

我认为你最好的选择是一个java小程序来完成这项工作......

于 2009-10-28T22:27:11.830 回答
1

这对于原生 Javascript 是不可能的。不过,您可以编写一个 ActiveX 控件来执行此操作。

于 2009-10-28T22:26:37.710 回答
1

亚历克斯的解决方案给了我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)

从这里拿走

希望这可以节省您一些时间

于 2016-09-26T09:53:22.883 回答
0

老实说,我还没有测试过,但值得一看,

真正的 Java 如何发出哔声,但这确实取决于您是否能够确保您的客户端在您所针对的每台机器上都安装了适当版本的 JDK。

于 2009-10-29T00:08:13.513 回答
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/我在其中找到了解决方案。

于 2019-04-17T10:50:05.563 回答