10

サウンドを開始および停止しようとしています。そして、それは機能します。しかし、再び音を出すことはできません。

私は本当に別のオシレータをもう一度作る必要がありますか? これは非常に直感的ではないようです。もっと良い方法があるはずです。

これは私が持っているすべてです:

oscillator1.noteOn(0);
oscillator1.noteOff(0);

noteOn を再度呼び出しても何も起こりません。なんで?私を超えています。

また、ボリューム、または Web Audio 関係者の文脈では「ゲイン」をゼロに設定してみました。しかし、何らかの理由で、ゼロのゲインで音が出ます。音が出ないゲインの値はどれくらいですか?

男、これがどれほど難しいか信じられない:/

4

2 に答える 2

8

実際、はい、新しいオシレーターノードを作成する必要があります。APIは、そのパターンで動作するように設計および最適化されています。

Taoistのコードの切断パターンは、基本的に、新しいオシレーターを作成するための複雑な方法です(oscOnが実行されるたびに実行されます)。切断された古いオシレーターでnoteOffを明示的に呼び出すことはないため、オーディオチェーンから切断されているため聞こえませんが、バックグラウンドで実行されている可能性があります(Webオーディオがこれをどのように処理するかはわかりません)。そのため、CPUを実行し、消費しているオシレータをバックグラウンドでスタックする可能性があります。

noteOff()を適切に使用していますが、これは同じコードです。http://codepen.io/Theodeus/pen/afgqk

これは同じコードですが、ゲインノードを使用してオシレーターを制御し、常に同じオシレーターのみを使用するようになっています(これは推奨されていませんが、ノートごとに新しいオシレーターを作成する方が良いと思います)http:// codepen .io / Theodeus / pen / aKFje

2015年4月の編集
コードサンプルはサイバースペースで失われているようですので、オシレーターのワンショットの性質を示すコード例を含むオシレーターについて書いたチュートリアルを次に示します。上記で参照したコードとまったく同じコードではありませんが、同じ概念を示しています。http://codepen.io/Theodeus/blog/web-audio-synth-part-1-generated-sound-その要点は次のとおりです。

//This won't work. Can't call play twice.
var context = new AudioContext(),
    oscillator = context.createOscillator();

oscillator.connect(context.destination);
oscillator.start(context.currentTime);
oscillator.stop(context.currentTime + 0.5);
oscillator.start(context.currentTime + 1);
oscillator.stop(context.currentTime + 1.5);


//this will work!
var context = new AudioContext(),
    oscillator;

function playOscillator(startTime, endTime) {
    oscillator = context.createOscillator();
    oscillator.connect(context.destination);
    oscillator.start(startTime);
    oscillator.stop(endTime);
}

playOscillator(context.currentTime, context.currentTime + 0.5);
playOscillator(context.currentTime + 1, context.currentTime + 1.5);
于 2013-03-07T11:19:59.253 に答える
3

.disconnect() メソッドを使用する必要があります (仕様が最近変更されていない限り)。

私はこれをここに書きました:

http://en.wikiaudio.org/Web_Audio_API:Toggle_oscillator_on_and_off

編集

Web Audio API がどのように機能するかを学ぼうとしていたときのこの応答は古いものです。切断を使用する必要はありません。

于 2013-03-07T00:50:31.387 に答える