yoppa.org


コンピュータミュージック 2017 - 明治大学先端メディアサイエンス学科

Sonic Pi + SuperCollider 1 – Sonic Piで自作Synthをつくる

この講義の前半はSonic Piを使用してライブコーディングを活用した作曲やパフォーマンスについて学びました。そして中盤から後半にかけて、SuperColliderを使用した音響合成の基礎を学んできました。Sonic Piが和声やリズムや旋律といった音楽のマクロな構造を記述するための言語とすると、SuperColliderは波形単位で音を生成するミクロな構造の創作でした。いよいよ今回からは、Sonic PiとSuperColliderを融合して、音のミクロな構造からマクロな構造まで全てを統合していきます。

今回はまず始めの一歩として、SuperColliderで定義した簡単な楽器定義(SynthDef)を、Sonic Piに読み込んで実際に演奏するところまでを解説します。

スライド資料

サンプルコード

//SuperColliderとSonic Piの連携

//基本形
SynthDef("piTest", {
    //出力先のバスを引数で設定
    arg out_bus = 0;
    //440HzのSin波生成
    var mix = SinOsc.ar(440).dup;
    //Envelope生成
    var env = EnvGen.ar(Env.perc(0.0, 1.0, 1.0), doneAction: 2);
    //Envelope適用
    mix = mix * env;
    Out.ar(out_bus, mix);
}
//ファイルの出力先を指定
).writeDefFile("/Users/tado/Desktop/my-synths");

//音程(note)と音量(amp)を受け取る
SynthDef("piTest", {
    //音程と音量を引数を指定
    arg note = 52, amp = 1, out_bus = 0;
    //音程(MIDI番号)から周波数へ
    var freq = note.midicps;
    //周波数をSin波に適用
    var mix = SinOsc.ar(freq).dup;
    var env = EnvGen.ar(Env.perc(0.0, 1.0, 1.0), doneAction: 2);
    mix = mix * env;
    Out.ar(out_bus, mix);
}
).writeDefFile("/Users/tado/Desktop/my-synths");

//エンベロープとPanを適用
SynthDef("piTest", {
    arg out_bus = 0, note = 52, amp = 1, attack = 0, release = 1, pan=0;
    var freq = note.midicps;
    var mix = SinOsc.ar(freq);
    var env = EnvGen.ar(Env.perc(attack, release, 1.0), doneAction: 2);
    //Panを適用
    mix = Pan2.ar(mix * env, pan);
    Out.ar(out_bus, mix);
}
).writeDefFile("/Users/tado/Desktop/my-synths");

//Moog風楽器
SynthDef("piTest", {
    arg out_bus = 0, note = 52, amp = 1, attack = 0, release = 1, detune = 1.01, pan=0;
    var freq = note.midicps;
    var mix =  MoogFF.ar(
        Pulse.ar([freq,freq*0.5], 0.8),
        freq*2.5,
        128
    );
    var env = EnvGen.ar(Env.perc(attack, release, amp), doneAction: 2);
    mix = Pan2.ar(mix * env, pan);
    Out.ar(out_bus, mix);
}
).writeDefFile("/Users/tado/Desktop/my-synths");