otophilia(imoutoid)の痕跡探し「ジムノペディ」

ジムノペディを見つけました。

この動画のコメントで教えてくれてる人がいました。

ここもいつ消えるかわからない気がします。

ひとまず今は探し求めていたジムノペディのコードを見つけることが出来て自分のPCのSuperColliderから流れていることに感動している。

たった200行のコードから音楽が生まれているのが素直にすごい。imoutoidのライブの映像が公開されて何日たったかわからないけど毎日何かしら調べててやっと成果がって感じ。

supercolliderを調べているのは単純にimoutoid探しだったんだけど最近チュートリアルとかもやってみてて少しずつ読めるようになってきた。

音楽知識は無いし楽譜の記号も読めないんだけどプログラムのコードになると読める気がしてくる。楽しい。

来年あたりは音楽これで出してみたいですね。
SuperColliderが生まれたのは1995年とかで音響プログラミングは今いろんな選択肢があるらしい。それにしてもジムノペディ良い音だなぁ…

20241205 追記

当時自分が動かしたコードについて展開しておきます。

// SuperCollider.jp - Code Remix Contest //
// Gymnopedie*Underachiever Remix //
// Composed By: Erik Satie //
// Remixed By: ChineseRoom //

(
	var gym_synth, gym_seq;
		
	gym_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.0, 0.6, 1, -6), gate, doneAction:2);
			env2 = EnvGen.kr(Env.adsr(0.05, 0.3, 0.0, 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("synth_chord2", {
			arg freq=440, gate=1, amp=1.0, source, env1, env2, pan = 0.0 ;
			
			env1 = EnvGen.kr(Env.adsr(0.001, 1, 0.0, 0.6, 1, -6), gate, doneAction:2);
			env2 = EnvGen.kr(Env.adsr(0.01, 0.2, 0.0, 0.2, 1, Rand(-50,-10)), gate, ExpRand(40,13000), 400);
			source = Pan2.ar(LPF.ar(LFSaw.ar(freq, [Rand(0,1),Rand(0,1)], amp), env2) * env1, pan);
			2.do({source = AllpassN.ar(source, 0.07, ExpRand(0.01,0.07), 3)});
			Out.ar(0, source);
		}).store;

		SynthDef("synth_klock", {
			arg freq=440, gate=1, amp=1.0, source, env1, pan = 0.0,  fmratio = 0.5 ;
			env1 = EnvGen.kr(Env.perc(0.0001, 0.018, 1, 10), gate, 1, 0, doneAction:2);
			source = Pan2.ar( HPF.ar(SinOsc.ar(SinOsc.ar(freq*fmratio, 0, env1*2000 + 5000, freq), 0.51, amp), 3000), pan ) * env1;
			Out.ar(0, source);
		}).store;

		SynthDef("synth_kroll", {
			arg freq=440, gate=1, amp=1.0, source, osc, env1, pan = 0.0,  fmratio = 0.5 ;
			env1 = EnvGen.kr(Env.perc(0.0001, 0.1, 1, -6), gate, 1, 0);
			osc = Pan2.ar( SinOsc.ar(SinOsc.ar(freq*2, 0, env1*9000+2000, freq), 0.51, amp), pan ) * env1;
			source = osc + AllpassN.ar(AllpassN.ar(osc, 1, ExpRand(0.02,0.3), 2), 1, ExpRand(0.02,0.3), 2) * Line.kr(1,0,1.5, doneAction:2);
			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_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;
			
		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;
	};
	
	gym_seq = {
		var clock, melody, bass, chord, chord2, fkick, shaker, hihat, clap, klock, kroll, sfl;
		sfl = 1.0/8.0;
		
		clock = TempoClock(120/60);
		
		melody = Pbind(
		\instrument, \synth_melody,
		\amp, 0.3,
		\dur, Pseq([  2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 8, 4, 8, 4, ]/3.0,inf),
		\midinote, Pseq([ \, 66, 69, 67, 66, 61, 59, 61, 62, 57, 59, \, 71, \] 	+ 12, inf)
		);
		
		bass = Pbind(
		\instrument, \synth_bass,
		\amp, 0.3,
		\dur, Pseq([ 2, 1+sfl, 1-sfl, 2, 1+sfl, 0.4, 0.6-sfl]/4.0,inf),
		\midinote, Pseq([ 64, \, 64, \, 71, 76, \, 59, \, 59, \, 62, 66, \ ] - 24, inf)
		);
		
		chord = Pbind(
		\instrument, \synth_chord,
		\amp, 0.2,
		\dur, Pseq([3.0+sfl,5.0-sfl;]/4,inf),
		\midinote, Pseq([\,[59,62,66],\, [57,61,66]] , inf)
		);
		
		chord2 = Pbind(
		\instrument, \synth_chord2,
		\amp, 0.2,
		\dur, Pseq([2]/4,inf),
		\midinote, Pseq([[55,62,66],[59,62,69],[55,62,66]+12,[59,62,69],[54,61,66],[57,61,69],[54,61,66],[57,61,69]] , inf)
		);
			
		fkick = Pbind(
		\instrument, \drum_kick,
		\amp, 0.7,
		\dur, Pseq([1, 1],inf),
		\midinote, 3
		);
	
		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]/4,inf),
		\midinote, 3
		);
			
		hihat = Pbind(
		\instrument, \drum_hihat,
		\amp, 0.2,
		\dur, Pseq([1, 1]/2,inf),
		\midinote, Pseq([\, 1],inf)
		);
			
		clap = Pbind(
		\instrument, \drum_clap,
		\amp, 0.15,
		\dur, Pseq([1, 1],inf),
		\midinote, Pseq([\, 1],inf)
		);
						
		klock = Pbind(
		\instrument, \synth_klock,
		\amp, 0.4,
		\dur, Pseq([  4, 1+sfl, 1-sfl, 1+sfl, 1-sfl, ]/4.0,inf),
		\midinote, Pseq([ \, \, 59, \, 59,] + 12, inf),
		\fmratio, Pseq([ 0, Pxrand([ 0.166, 0.5, 3, 4, 5 ], inf), 0, Pxrand([ 0.166, 0.5, 3, 4, 5 ], inf)], inf),		
		\pan, Pseq([ -1, 1 ], inf)
		);
				
		kroll = Pbind(
		\instrument, \synth_kroll,
		\amp, 0.6,
		\dur, Pseq([ 12, 4 ]/4.0,inf),
		\midinote, Pseq([ \, 59, \, 71 ] + 24, inf),
		\pan, Prand([ 1, -1,  0.5, -0.5 ], inf)
		);
					
		Ptpar([0,bass, 0,chord, 0,chord2, 0,melody, 0,fkick, 0,shaker, 0,hihat, 0,clap, 0,klock, 0,kroll]).play(clock);
		};
	
	
	gym_synth.value;
	gym_seq.value;
	
	)


いいなと思ったら応援しよう!