新年スパコ初め

あけましておめでとうございます。

世間にとっては怒涛だった2014年が終わりましたね。

今年はもあぐれっしぶに生きたいです。相変わらず一日中部屋に篭もりっきりだけど

そんなわけで明けて早々、練習がてらにSuperColliderで2つほど作りました。

作りました。と言っても他の方の作品をほぼ丸パクリしただけだけれども。

これから少しずつオリジナル要素も盛り込んでいきたいですね。

それじゃ一つ目。ラッツ&スターの名曲「め組のひと」のサビを耳コピ&アレンジしたやつです。


Re:め組のひとSC uploaded by 千葉が灰色だから手をつなごう [TmBOX]

何故この曲なのかというと、好きだからです。シンプルイズベスト

あとサビが4小節の短いメロのループでプログラミング的にも作りやすそうだったからですね

正直コードもメロも原曲と違うとは思いますが、そこは初心者だからご愛嬌。
あ、ちなみに音作りは自分で組んだ要素ほぼありません。
何から引用しているのかは知る人ぞ知る感じで。
自分で音作れるようにするのは今後の課題だなー

コードはこんな感じ↓

(
var meg_synth, meg_seq;

meg_synth = {
SynthDef("synth_melody", {
arg freq=440, gate=1, amp=1.0, env, source1, source2, pan = 0.0 ;
env = EnvGen.kr(Env.adsr(0.001, 2, 0.0, 0.1, 1, -20), gate, doneAction:2);
source1 = Pan2.ar( Pulse.ar(freq, 0.51, amp) * env );
2.do({source1 = AllpassN.ar(source1, 0.08, [ExpRand(0.01,0.08),ExpRand(0.01,0.08)], 2)});
source2 = source1 + Pan2.ar( Pulse.ar(freq*2, 0.51, amp) * env );
Out.ar(0, source2);
}).store;

SynthDef("synth_bass", {
arg freq=440, gate=1, amp=1.0, source, pan = 0.0 ;
source =
Pan2.ar(
Pulse.ar(freq, [0.6, 0.4], amp * 0.8) + SinOsc.ar(freq, 0, amp) *
EnvGen.kr(Env.adsr(0.01, 0.2, 0.9, 0.01, 1, -6), gate, doneAction:2), pan );
Out.ar(0, source);
}).store;

SynthDef("synth_chord", {
arg freq=440, gate=1, amp=1.0, source, env1, env2, pan = 0.0 ;

env1 = EnvGen.kr(Env.adsr(0.01, 2, 0.6, 0.6, 1, -6), gate, doneAction:2);
env2 = EnvGen.kr(Env.adsr(0.15, 0.3, 0.6, 0.6, 1, 'exponential'), gate, MouseY.kr(12000, 10, 0, 0.2), 200);

source = Pan2.ar(LPF.ar(Pulse.ar(freq, SinOsc.ar([2.2, 2.4], [1.0, 0.3], 0.3, 0.5), amp), env2) * env1, pan);
Out.ar(0, source);
}).store;

SynthDef("drum_kick", {
arg freq=440, gate=1, amp=1.0, source, pan = 0.0 ;
source =
Pan2.ar(
SinOsc.ar(EnvGen.kr(Env.perc(0.0001, 2.5, 1, -200), gate, 1000, 45, doneAction:2), 1, 1) +
((BPF.ar([GrayNoise.ar(8),GrayNoise.ar(8)],EnvGen.kr(Env.perc(0.001, 0.3, 1, -200), gate, 6000, 70), 1.5)).distort * Line.kr(0.3,0,0.1))
*
EnvGen.kr(Env.perc(0.001, 0.22, amp, 8)),0);
Out.ar(0, source);
}).store;

SynthDef("drum_clap", {
arg freq=440, gate=1, amp=1.0, source, pan = 0.0 ;
source =
Pan2.ar((BPF.ar(BPF.ar(WhiteNoise.ar(16),2300,0.3),8300,0.3)*5).distort * EnvGen.kr(Env.perc(0.01, 0.1, 1, 0), doneAction:2),0);

Out.ar(0, source);
}).store;

SynthDef("drum_shaker", {
arg freq=440, gate=1, amp=1.0, source, pan = 0.0 ;
source =
Pan2.ar(BPF.ar(WhiteNoise.ar(16),10000,0.2).distort * EnvGen.kr(Env.perc( (1-amp*0.02)+0.01 , ((amp*amp)*1.0 + 0.1), amp*amp*0.8+0.2, -6), gate, doneAction:2),Rand(-0.3,0.3));
Out.ar(0, source);
}).store;

SynthDef("drum_hihat", {
arg freq=440, gate=1, amp=1.0, source, pan = 0.0 ;
source =
Pan2.ar(BPF.ar(LFPulse.ar(BPF.ar(WhiteNoise.ar(5),1200,0.1).distort * 8000 + 6600, 0.7),7000,1) * EnvGen.kr(Env.perc(0.01, 0.4, 1, -6), doneAction:2),0);
Out.ar(0, source);
}).store;

};

meg_seq = {
var clock, melody, bass, chord, fkick, shaker, hihat, clap, sfl;
sfl = 1.0/8.0;

clock = TempoClock(113/60);

melody = Pbind(
\instrument, \synth_melody,
\amp, 0.3,
\dur, Pseq([ 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, ]/4.0,inf),
\midinote, Pseq([ 74, 64, 64, 74, \, 74, 74, 74, 74, 72, \, 72, \, 72, \, 74, \, 71, 67, \, 67, \, 74, 64, 64, 74, \, 74, 74, 74, 74, 72, \, 72, \, 72, \, 74, \, 79, \]+12 , inf)
);

bass = Pbind(
\instrument, \synth_bass,
\amp, 0.25,
\dur, Pseq([ 3, 1+sfl, 3-sfl, 1, 2+sfl, 4, 2-sfl, 1, 1+sfl, 1-sfl, 1, 1, 1, 1+sfl, 1, 2, 3-sfl, 1, 1, 1, 3, 1+sfl, 3-sfl, 1, 2+sfl, 4, 2-sfl, 1, 1+sfl, 1-sfl, 1, 1, 1, 1+sfl, 1, 2, 2-sfl, 3, 1,]/4.0,inf),
\midinote, Pseq([ 52, \, 47, \, 43, \, 43, 45, \, 45, \, 45, \, 45, \, 40, \, 40, 52, \, 47, \, 43, \, 43, 45, \, 45, \, 45, \, 45, \, 45, \, 45, \, 40,\]-12, inf)
);

chord = Pbind(
\instrument, \synth_chord,
\amp, 0.2,
\dur, Pseq([2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 7, 1, 2, 6]/4,inf),
\midinote, Pseq([\, [59,64,76], [55,71,79], [59,64,76], [55,71,79], \, [60,69,72,79],\,[60,69,72,79],\,[60,69,72,79],\, [59,66,75], [57,69,78], [59,66,75], [57,69,78], \, [59,64,67,76],\,[59,64,67,76],\,[59,64,67,76],\, [59,64,76], [55,71,79], [59,64,76], [55,71,79], \, [60,69,72,79],\,[60,69,72,79],\,[60,69,72,79],\,[59,66,69,75],\,[59,64,67,76],\] , inf)
);

fkick = Pbind(
\instrument, \drum_kick,
\amp, 0.55,
\dur, Pseq([1, 1],inf),
\midinote, 4
);

clap = Pbind(
\instrument, \drum_clap,
\amp, 0.1,
\dur, Pseq([1, 1],inf),
\midinote, Pseq([\, 1],inf)
);

shaker = Pbind(
\instrument, \drum_shaker,
\amp, Pseq([ 0.3, 0.1, 1.0, 0.4, 0.6, 0.3, 1.0, 0.4 ]/4,inf),
\dur, Pseq([1+sfl, 1-sfl, 1+sfl, 1-sfl, 1+sfl, 1-sfl, 1+sfl, 1-sfl]/4,inf),
\midinote, Pseq([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \, \, \, \],inf)
);

hihat = Pbind(
\instrument, \drum_hihat,
\amp, Pseq([0.2, 0.3, 0.1, 0,2]/2,inf),
\dur, Pseq([1, 1]/2,inf),
\midinote, Pseq([\, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, 1, \, \],inf)
);


Ptpar([0,melody, 0,bass, 0,chord, 0,fkick, 0,clap, 0, shaker, 0,hihat]).play(clock);
};

meg_synth.value;
meg_seq.value;

)

んでもう一つの作品。

これはテレビアニメ「ハナヤマタ」のOP「花ハ踊レヤいろはにほ」(作曲:田中秀和さん)の出だし部分をズラしてディレイっぽくしたやつですね。


パァ~っと パァ~っと uploaded by 千葉が灰色だから手をつなごう [TmBOX]

こちらはサウンドファイルがちゃんとスパコで流れるかどうかテストするために組んだやつなんで、サウンドファイル以外のコードは丸パクですね。

でもなんか面白い感じになったのであげてみました。

以下ソースコード

(
~hanayamata = Buffer.read(s,"sounds/hanayamata.wav");
~hanayamata2 = Buffer.read(s,"sounds/hanayamata2.wav");
)

(
{
var rate, trigger, frames;
frames = ~hanayamata.numFrames;

rate = [1, 1.01];
trigger = Impulse.kr(rate);
PlayBuf.ar(1, ~hanayamata, 1, trigger, frames * Line.kr(0,1,60)) * EnvGen.kr(Env.linen(0.01,0.96,0.01), trigger) * rate;
}.play;
{
var rate2, trigger2, frames2;
frames2 = ~hanayamata2.numFrames;

rate2 = [1, 1.03];
trigger2 = Impulse.kr(rate2);
PlayBuf.ar(1, ~hanayamata2, 1, trigger2, frames2 * Line.kr(0,1,60)) * EnvGen.kr(Env.linen(0.01,0.96,0.01), trigger2) * rate2;
}.play;
)

それでは今年もよろしくお願いします。