axjack's blog

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

Envのblendと録音

難しいやり方はググった方が早い。ひとまずざっくりとblendと録音をしてみる。

blend

blend (argAnotherEnv, argBlendFrac: 0.5)ブレンドされたEnvが返る。実際に使うときはEnvGenenvelopeに入れる。

~e         = Env.perc(2,level:0.5);
~e_delay2  = ~e.delay(2);
~e_blend   = blend(~e,~e_delay2,0.9);

[~e,~e_delay2,~e_blend].plot(maxval:0.75);

plotで確認すると以下のようになる。上から順に~e~e_delay2~e_blend。センスよく混ぜれば素敵なエンベロープが得られる、のではないかと思う。

f:id:axjack:20171117233536p:plain

録音

最低限やるべきなのは以下の3つで良い。

  • s.prepareForRecord;
  • s.record;
  • s.stopRecording;

.prepareForRecordでバッファなどを確保し、.recordで録音開始。そして.stopRecordingで録音終了。.prepareForRecordをやっておかないと

slight delay before recording starts for real

となるらしい。録音前にしれっと実行しておこう。

録音が終わるとどこに保存されるかというと、Post Windowに表示されるRecording: /...Recording Stopped: /...である。Macだと/Users/<username>/Music/SuperCollider Recordingsに保存されるのだと思われる。

f:id:axjack:20171117235603p:plain

難しいやり方はググった方が早い。ひとまずざっくりの方針なので、これで一応録音ができる。

作ったコード

(
SynthDef(\h,{
    |amp=0.1,freq=440,gate=1,aT=2|
    var sig,e,eg,y;

    y   = SinOsc;
    sig = Mix.ar(y.ar([freq,freq*(4/3),freq*(5/4)]));
    e   = Env.perc(aT,level:0.5);
    e   = blend(e,e.delay(2),0.5);
    eg  = EnvGen.ar(e,gate,doneAction:2);
    sig = sig * eg;
    sig = FreeVerb.ar(sig,0.3,0.9,0.7);

    Out.ar(0,Pan2.ar(sig,0,amp));
}).add;
)

//~x = Synth(\h,[\amp,0.5,\freq,400,\aT,5]);

(
~r = r({
    var f  = [400,400*1.2,400/1.2,400*1.5,400*1.9,400];
    //var w  = Array.rand(f.size,5,15);
    var w  = [11,5,8,6,15,8];
    var wi;

    f.do({|item,i|
        wi = w[i].postln;
        Synth(\h,[\amp,[0.3,0.15,0.4].choose,\freq,item,\aT,wi]);
        (wi-2).wait;
    })

});
)


s.prepareForRecord;
~r.reset;

(
s.record;
~r.play;
)

s.stopRecording;

解説や補足

  • freq*(4/3)はfreqに対して純正完全4度、freq*(5/4)はfreqに対して純正長3度である。
    • 例えば、freq = 60.midicps = ドなら上記はドミファを表す。
  • 録音したものはsoundcloudにアップロードしてみた。

参考