11

何年も前に作成した ID スキャナー ステーション プログラムを再検討しています。システムのビープ音を鳴らしてほしいというユーザーからのリクエストがあります。システムをWebブラウザに移行することを検討していますが、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);

};

jsFiddle .

于 2012-11-02T11:23:16.040 に答える
2

あなたの最善の策は、仕事をしているJavaアプレットだと思います...

于 2009-10-28T22:27:11.830 に答える
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 に答える
1

これは、ネイティブ Javascript では不可能です。ただし、それを行うために ActiveX コントロールを作成することもできます。

于 2009-10-28T22:26:37.710 に答える
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 に答える