2

私はオーディオ エンジニアで、JavaScript と HTML5、特に WEB Audio API を始めたばかりです。

宛先(出力)に接続されているこの発振器コードがあります。ここにコードがあります

オシレーターを目的地に接続および切断するためのボタンが必要です。なんとか開始できましたが、切断できません。

<html>
<head>
    <script>
        //creating the context
        context = new webkitAudioContext(); //allways the first code for audio API
        function osc1(frequency){ // Creating a function that has an oscillator going to gainNode and then going to the destination

            //creating AudioNodes and AudioParams

            //creating OscillatorNode
            var oscillator = context.createOscillator(); //creating Node's as Variables
            oscillator.type = 0; //0 is a sine wave
            oscillator.noteOn(0); // turning on the oscillator
            oscillator.frequency.value = frequency;// telling that frequency in () of the function equals to what


            //creating GainNode
            var gain = context.createGainNode(); // creating the Gain node
            gain.gain.value = 1; // setting up the value for gain node


            //Making the connections
            oscillator.connect(gain); // connecting oscillator to gain
            gain.connect(context.destination); // connecting gain to destination (speakers)
        }; // now we have a function called osc1(we can put frequency in here) then we can re call


    </script>
</head>

<body>
    <input type="button" value="on"  onClick="osc1(500);" />

</body>

</html>

切断するコードが であることは知っていますoscillator.disconnect();が、実行方法がわかりません。

4

3 に答える 3

0

すでに言及されていますがoscillator、オフ関数が変数を切断できるように、変数を (おそらくグローバル スコープに)公開する必要があります (ハンドラーoscillator内で変数を再宣言しないようにしてください)。onclick

これが実際の例です: http://jsbin.com/iwetiy/1/edit

于 2013-04-04T20:37:54.287 に答える
0

関数の外でオシレータ変数を宣言したいかもしれません:

var context = new webkitAudioContext();
var oscillator = context.createOscillator();
function osc1(frequency){
  var button = document.getElementsByTagName('input')[0];
  if (button.value === 'off') {
    button.value = 'on';
    oscillator.disconnect();
  } else {
    button.value = 'off';
    // same as your original code (connect, noteOn...)
于 2013-03-25T01:13:38.497 に答える
0

私もこれに取り組んでいます。

0 が出力番号を表す oscillator.disconnect(0) を実行します。

オシレーターをゲインノードとフィルターノードに別々に接続すると、ゲインが切断(0)され、フィルターが切断(1)されることを意味すると思います。

組み込みの方法がないように見えるので、どの出力が私たちの仕事であるかを追跡することが私たちの仕事だと思います。

切断したい実際のノードに disconnect() を渡すことができるように、仕様が変更されることを願っています。

于 2013-04-04T16:34:12.723 に答える