[Diary/2012/May]

Google MoogをSuperColliderで / 2012-05-23 (水)

今日

午前中授業準備.午後は論文書き,夕方から授業.
学生から「一度休むとおいていかれる」と評されるが,演習系ってそれが普通じゃね?

授業のサンプルとして,GoogleのトップページのMoogをSuperColliderのコードで起こしてみた.
結局は3オシレータの加算合成とレゾナンス付きフィルタ,エンベロープの組み合わせなので,簡単に書ける.

(
{
	var f0Frequency = 220;
	var f0Volume = 3;
	var f1Volume = 3;
	var f2Volume = 3;
	var f1frequencyPlusMinus = 2;
	var f2frequencyPlusMinus = -1;
	var snd1 = Saw.ar(f0Frequency) * f0Volume; //基本周波数のオシレータ
	var snd2 = Pulse.ar(f0Frequency * 2 + f1frequencyPlusMinus, 0.5) * f1Volume; //2倍周波数のオシレータ
	var snd3 = LFTri.ar(f0Frequency * 3 + f2frequencyPlusMinus, 1.0) * f2Volume; //3倍周波数のオシレータ
	
	//全部のオシレータを足す
	var allSound = Mix.ar([snd1, snd2, snd3]);
	
	//レゾナンス付きLPFで削る: RLPF(soundSource, cutoffFrequency, bandwidh of resonance)
	//レゾナンスの値をうまく変更することで,様々な効果が出せる.もちろんcutoff周波数やレゾナンスを揺らしても良い
	allSound = RLPF.ar(allSound, 5000, 1.0);

	//エンベロープをかける Env.adsr(attackTime, decayTime, sustainLevel, releaseTime, peakLevel, curve)
	//XLineはgateを0にするために使う.これが0になった時にreleaseが始まる
	allSound = allSound * EnvGen.ar(Env.adsr(0.02, 0.3, 0.9, 0.8, 1, -4), XLine.kr(1, 0, 4), doneAction:2);
		
	Out.ar([0.1], allSound);
}.play;
)

しかし書いたものの,今日は授業はそこまで進まず.
鍵盤押した時のみょーんって感じの音は,直前の音の周波数を覚えておいて,次の音はレゾナンスフィルタをその周波数から現在の周波数まで動かす,ということだと想像しているが,それで合っているだろうか.