2009-10-28 60 views
11

我正在重温一个我们之前建立的ID扫描仪站程序,并且我有一个用户发出系统嘟声的请求。我们正在考虑将系统移至网络浏览器,但可以通过JavaScript或其他方式调用扬声器哔声吗?它不需要跨浏览器兼容,但它可能需要在Windows或Linux上工作。有问题的电台是未配备声卡或外接扬声器,因此请求PC扬声器访问。PC扬声器通过JavaScript?

我知道有人会说出来,所以我会先说明一下:我不在乎你怎么看待应用程序产生噪音,这不适合你。用户请求它,这是有道理的,硬件扫描仪已经产生噪声。是的,我们给出了视觉反馈,并带有可区分的文字和颜色,但我们发现人们接受现有的嘟嘟声作为正面反馈,并添加更多的音频背景将有所帮助。

+1

如果它不需要特定于浏览器,那么您的目标浏览器是什么? – 2009-10-28 22:28:55

+0

无论什么作品。 Firefox,IE,Chrome,Safari(无OSX)。我在看Mozilla Prism,但额外的音频反馈可能是更高的优先级。 – jldugger 2009-10-28 23:41:32

+0

Duplicate http://stackoverflow.com/questions/879152/how-do-i-make-javascript-beep – 2009-10-29 00:13:41

回答

9

使用JavaScript,这是不可能的 - JavaScript有除了饼干和新的HTML5本地存储没有访问到客户端计算机。

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

你可以找到一个example here

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

1

这对于原生Javascript是不可能的。不过,你可能会写一个ActiveX控件来完成它。

+0

尽管OP表示跨浏览器兼容性不是问题,但如果要考虑任何形式的跨系统(即跨OS)兼容性,ActiveX绝对不是最佳选择。 – 2009-10-29 00:12:47

+1

@Alan我同意,虽然Applets让我几乎和ActiveX一样多。 – 2009-10-29 15:40:00

2

我觉得你最好的选择将是一个Java程序做的工作......

0

老实说,我没有测试过这一点,但它是值得一试,

Real Java's how to emit a beep但它确实取决于你能保证你的客户端已经安装每台机器你在JDK适当版本定位。

+0

DO NOT WORKS WITH SOUNDCARD – 2017-06-12 10:16:05

4

今天就可以使用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

+1

给出错误'Uncaught TypeError:osc.noteOn is an function' – 2016-09-26 09:15:06

+2

DO NOT WORKOUT WITH SOUNDCARD – 2017-06-12 10:09:13

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

+0

DO NOT WORKS WITH SOUNDCARD – 2017-06-12 10:09:22

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

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

+0

DO NOT WORKS WITH SOUNDCARD – 2017-06-12 10:09:52

相关问题