JavaScript で Web Audio API を使用しています。
オシレータを作成し、それをボリューム (gainNode) に接続し、宛先に接続します。
Ok。良い。
ディレイエフェクトが欲しいので、オシレーターとボリュームの間に挟みます。
まあ、それはうまくいきません。遅延が聞こえるだけです。とはいえ、きれいです。
わかりましたので、OSC をディレイからボリュームに接続し、OSC をボリュームに接続してから、ボリュームを宛先に接続します。
今は歪んでいるようです。
宛先への接続が 2 つあるように、宛先への osc を使用して、ボリュームから宛先への遅延を osc で試みました。それも歪んでいる。
それはクロムにあります。
少し試してみたところ、iOS6 で正しく動作するようです。サファリはわかりません。
http://cloudmusiccompany.appspot.com/watch.jspにアクセスし、赤をクリックして描画してみてください。それは通常の正弦波です。ここで白をクリックして描画します。これは遅延と同じであり、クロム(Ubuntu)では歪んでいます。Safarについては知りません。
もちろん、javascript であるため、リンクで完全なソースを見ることができます。
関連ソース:
function makeNewChannel(color){
var info = getInstrumentInfo(color);
var chan = {osc: acontext.createOscillator(),
freqs: [],
times: [],
pxdata: [],
i: 0,
muted: true,
finishedLoop: false,
volume: acontext.createGainNode(),
gate: acontext.createGainNode(),
delay: acontext.createDelayNode(),
delayGain: acontext.createGainNode(),
mute: function(){
this.muted = true;
this.volume.gain.value = 0;
},
unmute: function(){
this.muted = false;
this.volume.gain.value = player.defaultGain / (info.soft ? 2 : 1);
}
}
chan.osc.type = info.type;
// chan.osc.connect(chan.gate);
chan.osc.connect(chan.volume);
chan.delayGain.gain.value = player.defaultGain ;
/* ugh , the wet sounds ok, but somehow its distorting or doubling the dry signal
* although it seems ok on iphone?
* */
if (info.delay){
chan.delay.delayTime.value = 0.5;
chan.volume.connect(chan.delay)
chan.delay.connect(chan.delayGain);
chan.delayGain.connect(acontext.destination);
}
chan.volume.gain.value = 0; //player.defaultGain;
chan.gate.gain.value = 0;
chan.volume.connect(acontext.destination);
chan.osc.frequency.value = 0;
chan.osc.noteOn(0);
return chan;
}