PC扬声器通过javascript发出哔哔声?
Posted
技术标签:
【中文标题】PC扬声器通过javascript发出哔哔声?【英文标题】:PC Speaker beep via javascript? 【发布时间】:2009-10-28 22:22:10 【问题描述】:我正在重新访问我们多年前构建的 ID 扫描仪站程序,并且我收到了用户的请求,让系统发出蜂鸣声。我们正在考虑将系统移至网络浏览器,但是否可以通过 javascript 或其他方式调用扬声器哔声?它不需要跨浏览器兼容,但它可能需要在 Windows 或 Linux 上工作。有问题的电台没有配备声卡或外接扬声器,因此要求使用 PC 扬声器。
我知道有人会这么说,所以我会提前解决这个问题:我不在乎你对应用程序产生噪音的看法,这不适合你。用户要求它,这是有道理的,而且硬件扫描仪已经发出了噪音。是的,我们提供视觉反馈,带有可区分的文本和颜色,但我们发现人们接受现有的哔哔声作为积极反馈,添加更多音频上下文会有所帮助。
【问题讨论】:
如果不需要特定于浏览器,您的目标浏览器是什么? 不管怎样。 Firefox、IE、Chrome、Safari(无 OSX)。我在看 Mozilla Prism,但额外的音频反馈可能是更高的优先级。 复制***.com/questions/879152/… @Raul 不,不是。这个不能使用“重复问题”的答案,因为目标计算机没有声卡。 【参考方案1】:使用 JavaScript,这是不可能的 - JavaScript 无法访问客户端计算机,除了 cookie 和新的 html5 本地存储。
但是,您可以使用可通过 JavaScript 控制的 Java 小程序 - 隐藏或不隐藏。
您可以找到example here。
这需要在客户端计算机上安装 Java 运行时。
【讨论】:
【参考方案2】:今天的 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.
【讨论】:
给出错误Uncaught TypeError: osc.noteOn is not a function
尝试将 osc.noteOn(0);
替换为 osc.start();
和 osc.noteOff(0);
替换为 osc.stop();
- 在 Chrome 92 上尝试过【参考方案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();" />
【讨论】:
【参考方案4】:我认为你最好的选择是一个 Java 小程序来完成这项工作......
【讨论】:
【参考方案5】:这在原生 Javascript 中是不可能的。不过,您可以编写一个 ActiveX 控件来执行此操作。
【讨论】:
虽然 OP 说跨浏览器兼容性不是问题,但如果要考虑任何形式的跨系统(即跨操作系统)兼容性,ActiveX 绝对不是最佳选择。 @Alan 我同意,尽管 Applets 让我几乎和 ActiveX 一样畏缩。【参考方案6】: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
希望这可以为您节省一些时间
【讨论】:
【参考方案7】:老实说,我还没有测试过,但值得一看,
Real Java's how to emit a beep 但这确实取决于您是否能够确保您的客户端在您的目标计算机上安装了适当版本的 JDK。
【讨论】:
【参考方案8】:实际上这是可能的,可能是由于同时在 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/。
【讨论】:
以上是关于PC扬声器通过javascript发出哔哔声?的主要内容,如果未能解决你的问题,请参考以下文章