読者です 読者をやめる 読者になる 読者になる

音の鳴るブログ

鳴らないこともある

SuperCollider の SynthDefBinary を画像にするやつ

10日くらい前に SuperCollider の SynthDefBinary を JSON にするやつを書いてまったく反応無かったけど懲りずに画像にするやつ書いた。JSONだとプログラムから見た場合の可読性は高いけど人間が読むにはフォーマットを考えた僕以外は分かりにくい。画像だと万人に受け入れられると思ったけど、普通に分かりにくい画像が生成される。

SynthDef("SinOsc", {
    Out.ar(0, SinOsc.ar(440, 0, 0.25))
}).writeDefFile

f:id:mohayonao:20130625214424p:plain

SynthDef(\trigTest, {|t_trig=0, freq=440| // t_trig creates a TrigControl
    Out.ar(0, SinOsc.ar(freq+[0,1], 0, Decay2.kr(t_trig, 0.005, 1.0)));
}, [0, 4]        // lag the freq by 4 seconds (the second arg), but not t_trig (won't work anyway)
).writeDefFile;

f:id:mohayonao:20130625215142p:plain

SynthDef(\arrayarg, { | amp = 0.1, freqs = #[300, 400, 500, 600], gate = 1 |
    var env, sines;
    env = Linen.kr(gate, 0.1, 1, 1, 2) * amp;
    sines = SinOsc.ar(freqs +.t [0,0.5]).cubed.sum; // A mix of 4 oscillators
    Out.ar(0, sines * env);
}, [0, 0.1, 0]).writeDefFile

f:id:mohayonao:20130625215313p:plain

SynthDef("Latch_demo",
    {
        arg rate = 9; 
        var freq, latchrate, index, ratio, env, out;
        latchrate = rate*LFNoise0.kr(1/10, mul: 0.03, add: 1.6);
        index = Latch.kr(
            LFSaw.kr(latchrate, mul: 5, add: 6),
            Impulse.kr(rate)
        );
        freq = Latch.kr(
            LFSaw.kr(latchrate, 
                mul: max(0, LFNoise1.kr(1/5, mul: 24, add: 10)), 
                add: LFNoise0.kr(1/7, mul: 12, add: 60)),
            Impulse.kr(rate)
        ).round(1).midicps;

        ratio = LFNoise1.kr(1/10, mul: 2.0, add: 5.0);

        env = EnvGen.kr(
            Env.perc(0, LFNoise0.kr(rate, mul: 1, add: 1.5)/rate), 
            Impulse.kr(rate), 
            LFNoise1.kr([5, 5], 2, 1).max(0).min(0.8));
        out = PMOsc.ar(
            [freq, freq * 1.5],
            freq*ratio,
            index,
            mul: env
        );
        Out.ar(0, out);
    }
).writeDefFile

f:id:mohayonao:20130625215543p:plain