axjack's blog

axjack is said to be an abbreviation for An eXistent JApanese Cool Klutz.

saw stringsを作って余韻(release)の伸びを確かめる

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にアップロードしてみた。こちらより。録音や録画はコードを再実行する手間も省けて便利。

参考

チュートリアル:シンセサイザー入門

Server-Command-Reference

SynthDef

*1:これを書くきっかけ:s.sendMsg('/n_release',node_id)やs.sendMsg('/n_set',node_id,\release)ではreleaseできなかった故。