SC3とRosegardenを一緒に使おう
スパコでシーケンスを書く,というのは結構面倒だったりしますよね.特殊なシーケンスはスパコとかMax/Mspじゃないと書けませんが,普通のシーケンスならシーケンサーでざっと打ち込みたいかと思います.そんなわけで,スパコでシンセを書いて,シーケンサーで音を鳴らす方法です.単にMIDIを使うだけですが・・・・・・.
jack,rosegarden,スパコという構成となっています.まずはjack,rosegardenを立ち上げましょう.rosegardenの方で,スタジオ>MIDIデバイスの管理>(再生デバイス)新規 で新しいデバイスを追加し,SuperColliderとでも名前を変えます.jackのconnectのALSAタブを見てみるとrosegardenが追加されていると思います.次にスパコの方で以下を実行します.
( var inPorts = 2; var outPorts = 1; //MIDI出力使わないなら0でも良い MIDIClient.init(inPorts,outPorts); //jackで接続するから以下不要 //inPorts.do({arg i; // MIDIIn.connect(i,MIDIClient.sources.at(i)); //}); )
jackのconnectのALSAタブにSuperColliderが追加されますので,先ほど追加したrosegardenの"SuperCollider"OutputとSuperColliderのInputを接続しましょう.丁度こんな感じです.(Audiophile2496,Keystaton(radium49です)とM-Audioばっかりですw)
次に,スパコでシンセを書いて,MIDIチャンネル別のmidiノートやベロシティをシンセのfreqとかmulに送るようにしましょう.以下のようにチャンネル1はmiditest1,チャンネル2はmiditest2用に,とかですね.MIDIノートオフでEnvGenのgateを0にするのをお忘れなく.
( SynthDef("miditest",{ arg freq = 440, gate = 1,amp = 1, pan = 0; var env,signal; env = Env.adsr(0.01,0.2,0.4,0.1,1,-3); signal = SinOsc.ar(freq,0,amp); Out.ar(0, Pan2.ar(EnvGen.ar(env,gate, doneAction:2) * signal,pan) ); }).store; SynthDef("miditest2",{ arg gate = 1,amp = 1, pan = 0; var env,signal; env = Env.perc(0.01,0.8,1,-3); signal = SinOsc.ar(32.midicps + rand(-0.001,0.001) ,0,amp); Out.ar(0, Pan2.ar(EnvGen.ar(env,gate, doneAction:2) * signal,pan) ); }).store; ) ( var x,keys,keys2; keys = Array.newClear(128); keys2 = Array.newClear(128); //MIDIノートオン MIDIIn.noteOn = {arg src, chan, num, vel; var node,node2; //MIDIチャンネル別にわける switch(chan, 0,{ node = Synth.tail(nil,"miditest", [ \freq, num.midicps,\amp, vel/127 ] ); keys.put(num,node); }, 1,{ //[chan,num,vel].postln; node2 = Synth.tail(nil,"miditest2", [ \amp, vel/127 ] ); keys2.put(num,node2); } ); }; //MIDIノートオフ MIDIIn.noteOff = {arg src, chan, num ,vel; var node,node2; node = keys.at(num); node2 = keys2.at(num); //("noteOff" + [chan,num,vel]).postln; switch(chan, 0,{ if(node.notNil,{ keys.put(num,nil); s.sendMsg("n_set", node.nodeID, \gate,0); }); }, 1,{ if(node2.notNil,{ keys2.put(num,nil); s.sendMsg("n_set", node2.nodeID, \gate,0); }); }); }; )
後はrosegardenの方で,トラックパラメータ>再生パラメータ>デバイスを先ほど作った"SuperCollider"にしてやり,インストゥルメントパラメータのチャンネルを変更します.
これで,rosegardenの方でシーケンスを打ち込み,スパコのシンセを鳴らすことができます.rosegardenの方からシンセのパラメータをいじりたい場合には,コントロールイベントを送ってやれば良さそうですね.外部のMIDI音源を使うのは面倒という性格ですので,この構成は意外と便利です.