saw strings
その名の通りSaw.ar
を使えばできるだろうと思いググると、
まずオシレーターには通常のこぎり波や細いパルス波など倍音成分が多い波形を用います。最初に述べた通りこれらのオシレーター波形はストリングス系の楽器に近い倍音分布を持っています。これをデチューンするかオクターブ違いにするのがストリングス音の基本的なオシレーター設定です。
と書いてある。なので、2つのSaw.ar
を素直にデチューンして作ってみることにした。
releaseの伸び
ストリングスと言えばreleaseの伸びが印象的。releaseの値を0から0.05ずつ加算して、混ざり合う音がどんな心地になるのかを確かめる。
コード
( SynthDef(\saw_strings,{ |freq=440,amp=0.3,gate=1,detune=2,rate=1,rT=0| var sig,e,eg; sig = Saw.ar(freq) + Saw.ar(freq * rate + detune); e = Env.adsr(0.5,5,0.9,rT,curve:\sin); eg = EnvGen.ar(e,gate,doneAction:2); sig = RLPF.ar(sig,freq*2,0.1); sig = sig * eg; Out.ar(0,Pan2.ar(sig,0,amp*SinOsc.kr(6.5,0,0.1,0.8))); }).add; ) ( ~r = r({ var rt = 0; var f = [1,1/2,3/2,4/3,5/4]; var freq = 440!f.size * f; inf.do({ "releaseTime: %\n".postf(rt); ~x = Synth(\saw_strings,[\freq,freq.choose,\detune,1,\rT,rt]); 1.wait; ~x.release; rt = rt + 0.05; 1.wait; }); }); ) ~r.reset; ~r.play(TempoClock( 144/60 )); ~r.stop; /* http://danielnouri.org/docs/SuperColliderHelp/ServerArchitecture/SynthDef.html // if value is negative, it overrides the release time, to -1 - gate x = Synth(\synthDefTest); x.set(\gate, -5); // 4 second release */ ~x = Synth(\saw_strings,[\freq,440,\detune,1,\rT,0]); s.sendMsg('/n_set',~x.nodeID,\gate,-5);
メモ
感想
- Synth面
- デチューンしただけの割には、シンセサイザのプリセットにあるようなsaw stringsの音に聞こえる。
- Routine面
- releaseTimeが1を超えた辺りから音のオーバーラップが始まる。音楽的作品には全く以てほど遠いものの、時間が経つにつれてコーラル(合唱)のような響きを感じた。
releaseの方法
Synth(~xとする。)にEnvGenを噛ましてgateをaugとして持っている場合、~x.release
を実行すればreleaseされる。また~x.release(3)
と実行すれば3秒後にreleaseされる(release値の上書き)。
では、OSCコマンド(Server Command)でreleaseさせるにはどうすればよいのだろう?*1それは、
s.sendMsg('/n_set',~x.nodeID,\gate,-5);
のように、sendMsgコマンドの引数に\gate, <負の値>
をセットすれば良い。そうすると、-1 - <負の値>
後にreleaseされる。
動画に撮ってみた
画面キャプチャではなくiPhoneで撮ったものをiPhoneからYouTubeにアップロードしてみた。こちらより。録音や録画はコードを再実行する手間も省けて便利。
参考
*1:これを書くきっかけ:s.sendMsg('/n_release',node_id)やs.sendMsg('/n_set',node_id,\release)ではreleaseできなかった故。