JavaScriptを介したPCスピーカーのビープ音?
-
08-07-2019 - |
質問
私は何年も前に構築したIDスキャナーステーションプログラムを再検討しており、ユーザーからシステムビープ音を鳴らすようにリクエストがあります。システムをWebブラウザーに移行することを検討していますが、javascriptなどを介してスピーカービープ音を呼び出すことは可能ですか?クロスブラウザー互換である必要はありませんが、おそらくWindowsまたはLinuxで動作する必要があります。問題のステーションはサウンドカードまたは外部スピーカーを装備していないため、PCスピーカーへのアクセスのリクエストです。
誰かがそれを言うことを知っているので、これについて前もって対処します。ノイズを発生させるアプリケーションについてあなたがどう思うかは気にしません。これはあなたのためではありません。ユーザーはそれを要求します、それは理にかなっており、ハードウェアスキャナーは既にとにかく音を立てます。はい、識別可能なテキストと色で視覚的なフィードバックを提供しますが、肯定的なフィードバックとして既存のビープ音を受け入れ、オーディオコンテキストを追加すると役立つことがわかります。
解決
JavaScriptを使用することは不可能です-Cookieと新しいHTML5ローカルストレージを除き、JavaScriptはクライアントコンピューターにアクセスできません。
ただし、できることは、JavaScriptで制御できるJavaアプレットを使用することです(非表示にするかどうか)。
こちらの例をご覧ください。
これには、クライアントコンピューターにJavaランタイムをインストールする必要があります。
他のヒント
今日の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 。
次の方法を試してください:簡単かもしれません...
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();" />
あなたの最善の策は、仕事をしているJavaアプレットだと思います...
これは、ネイティブJavascriptでは不可能です。ただし、ActiveXコントロールを作成して実行することもできます。
Alexのソリューションは Uncaught TypeError:osc.noteOnは関数ではありません
これでもやった:
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)
時間を節約できることを願っています
正直にこれをテストしていませんが、一見の価値があります
Real Javaのビープ音を出す方法ビープですが、ターゲットとするすべてのマシンに適切なバージョンのJDKがクライアントにインストールされていることを確認できるかどうかに依存します。
実際にはこれは可能ですが、おそらくその間に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 / で解決策を見つけました。