独立したゲイン エンベロープを持つ 2 つのオシレーターを作成できないようです。
以下のコードは、それぞれが異なるピッチでサイン トーンを再生する 2 つのボタンを作成します。最初のボタンをクリックすると、トーンの音量が大きくなるのが聞こえます。しかし、2 番目のボタンをクリックすると、1 番目のトーンのゲインに接続されているかのようにトーンが反応します。たとえば、1 番目のトーンがボリューム 1 のときに 2 番目のボタンをクリックすると (2 番目のトーンをオンにする)、2 番目のトーンはボリューム 1 で入力されます。 10秒の。
オーディオ コンテキストごとにゲイン ノードを 1 つだけ持つことはできますか? それとも、これらのオシレーターのゲインが接続されている他の理由がありますか? また、トーンを一度鳴らすと二度と鳴らなくなってしまうので、特に自分のやり方が間違っていると思います。: )
ありがとう。リンクは下にあり、コードはその下にあります。これは私の最初の投稿ですので、何か他に必要なものがあれば教えてください。このコードは、Web オーディオ API をサポートするバージョンの Chrome または Safari で実行する必要があります。
http://whitechord.org/just_mod/poly_test.html
WAAPI テスト
<button onclick="play()">play one</button>
<button onclick="play2()">play two</button>
<script>
var context;
window.addEventListener('load', initAudio, false);
function initAudio() {
try {
context = new webkitAudioContext();
} catch(e) {
onError(e);
}
}
function play() {
var oscillator = context.createOscillator();
var gainNode = context.createGainNode();
gainNode.gain.value = 0.0;
oscillator.connect(gainNode);
gainNode.connect(context.destination);
oscillator.frequency.value = 700;
gainNode.gain.linearRampToValueAtTime(0.0, 0); // envelope
gainNode.gain.linearRampToValueAtTime(0.1, 5); // envelope
gainNode.gain.linearRampToValueAtTime(0.0, 10); // envelope
oscillator.noteOn(0);
}
function play2() {
var oscillator2 = context.createOscillator();
var gainNode2 = context.createGainNode();
gainNode2.gain.value = 0.0;
oscillator2.connect(gainNode2);
gainNode2.connect(context.destination);
oscillator2.frequency.value = 400;
gainNode2.gain.linearRampToValueAtTime(0.0, 0); // envelope
gainNode2.gain.linearRampToValueAtTime(0.1, 5); // envelope
gainNode2.gain.linearRampToValueAtTime(0.0, 10); // envelope
oscillator2.noteOn(0);
}
/* error */
function onError(e) {
alert(e);
}
</script>
</body>
</html>