Web Audio APIを使用して、オシレータを使用して基本音を生成し、演奏された音符の継続時間(秒)を変える問題があります。AudioContext.currentTime +可変時間
"サステイン"変数がオシレータの停止に期待どおりに動作しないことが問題です。この変数は、演奏された1音に対して期待どおりに機能し、残りの音は無期限に演奏されます。私が変数を削除し、変数を使用するのではなく持続時間をハードコードすると、正常に動作します。 context.currentTimeのログは、可変またはハードコーディングされた期間の間に差異を示さない。思考以上のもの。私は何が欠けているのですか?
JS:
//start new audio session. Do this only once
VARコンテキスト=新しいwindow.webkitAudioContext()。
function playSound(注){ oscillator = context.createOscillator();
//create volume controller
var gainNode = context.createGain();
//connect signal to audio output(speakers by default)
oscillator.connect(gainNode);
gainNode.connect(context.destination);
//adjusts frequency played by 50%, 100% or 200%
var octave = document.getElementById('octave').value;
//sets oscillator frequency
oscillator.frequency.value = frequencies[note] * octave;
//oscillator wave type
oscillator.type = document.getElementById('waveSelect').value;
//starts oscillator. Delayed start can be achieved by adding time(in secs) after currentTime
oscillator.start(context.currentTime + 0.01);
//determines note duration
var sustain = document.getElementById('sustain').value;
//stops oscillator by exponentially ramping down sound over .015 seconds to avoid audible click
gainNode.gain.setTargetAtTime(0, context.currentTime + sustain, 0.0015);
//for testing
console.log("Hz:" + frequencies[note] * octave + " octave:" + octave + " wave:" + oscillator.type + "duration: " + sustain + " time:" + context.currentTime);
}
HTML:助けを
<select class="lists" id="sustain">
<option value="0.5">EIGHTH NOTE</option>
<option value="1.0">QUARTER NOTE</option>
<option value="2.0">HALF NOTE</option>
<option value="4.0">WHOLE NOTE</option>
</select>
ありがとう!
よう
この行を編集します!ダー。ありがとうございました!それはいつも私を得る最も簡単な小さなものです。すぐにそれを発見したはずです。感謝します! – Fedreg
これはみんなに起こるようなものだと思います。お役に立てて嬉しいです! – scriptify