/*----------------------------------------------------
									
			max_msp_01					
									
			じょん					
									
									
------------------------------------------------------
	
	
	max/msp/Jitterという、プログラミングソフトを
	使って作成した曲のアイデアを、mmlで実現させたものです。
	２小節で完結するパートの音が決まっており、
	各パートのON/OFF切り替えによって曲が進行していきます。
	
	途中、4分、8分、16分音符毎に各パートの音を
	ランダムで切り替える部分がキモです。
	
	テキスチャ音やエフェクト、エンベロープ等、maxで作成したときには
	曲として完成させるためにもう少し多くのパラメータをいじりました。
	なので、このmml版の完成度は曲としてはいまいちですが、
	音のON/OFFの切り替えという核になるアイデアは再現できたかなと思います。
	
	ただ、やっぱり最終的な音のイメージがだいぶ変わってきてしまっているので、
	max/mspを使って作ったmp3ヴァージョンでも聴いて頂けるとうれしいです。
	
	
	じょん
	
	mp3
	http://jooohn.s5.pf-x.net/music.html
	
	mail
	jooohn12341234あっとjcom.home.ne.jp





-------------------------------------------*/







Tempo = 100
Int TRKEY = 2;
Function RandomVol(Int Length,Int Final) {
	l(Length);
	Int Total = Length * 4;
	If(Final ==0) {
		For(Int I = 0; I < Total ; I ++) {
			VolCut;
			r
		}
	} Else {
		For(Int I = 0; I < Total - 4 ; I ++) {
			VolCut;
			r
		}
		V=0; r4
	}
}
Str VolCut = {
	IF(Random(2) == 0) {
		V = 0;
	}Else {
		V = 100;
	}
};
Function Init(Int TrackNo,Int Tone) {
	TR = TrackNo;
	@ = Tone;
	If(TrackNo != 10) {
		TrackKey = TRKEY;
	}
}

Function Set(Str S00,Str S01,Str S02,Str S03,Str S04,Str S05,Str S06,Str S07,Str S08,Str S09,Str S10,
Str S11, Str S12, Str S13, Str S14,Str S15) {
Time(1:1:0)S00;
Time(5:1:0)S01;
Time(9:1:0)S02;
Time(13:1:0)S03;
Time(17:1:0)S04;
Time(21:1:0)S05;
Time(25:1:0)S06;
Time(29:1:0)S07;
Time(33:1:0)S08;
Time(37:1:0)S09;
Time(41:1:0)S10;
Time(45:1:0)S11;
Time(49:1:0)S12;
Time(53:1:0)S13;
Time(57:1:0)S14;
Time(61:1:0)S15;
}
Str VolCtrl = {[6 [4 r1]]RandomVol(4);RandomVol(8);V=100[2 [4 r1]]RandomVol(16);RandomVol(16,1);V=100;[2 [4 r1]]}

Init(1,5);
Str MEL01={o4l16q100[2 P.T(50,20,!1);'fa`c`e`g'^^^^^^^rrrrrrrrrrrrrrrrrr'fa`c`e`g'^rrrr]}
Str MEL0102={o4l16q100[2 P.T(50,20,!1);'fa`c`e`g'^^^^^^^rrrrrrrrrrrrrrrrrr:'fa`c`e`g'^rrrr]}
VolCtrl;
Set(MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL01,MEL0102);

Init(2,83);
Str MEL02={o1v120l16q100[2 P(90); a^^^^^rr rrrrrrrr rrrrrrrr rrrrra^r]}
Str MEL0202={o1v120l16q100[2 P(90); a^^^^^rr rrrrrrrr rrrrrrrr :rrrrra^r]}
VolCtrl;

Set(MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL0202);
Init(9,127);
VolCtrl;
Set(MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL02,MEL0202);


Init(3,49);
Str MEL03 = {o4l16q60P.onNote(60,30,60,80,40,120) [2 rrr'`e`g`b''`e`g`b''`e`g`b'^'`e`g`b'^'`e`g`b''`e`g`b'^rrr'`e`g'^r-r-`b``c'`e`g``c''`e`g``c'^rrrrrr'`e`g``c'^'`e`g``c''`e`g``c'^'`e`g``c']}
Str MEL0302 = {o4l16q60P.onNote(60,30,60,80,40,120) [2 rrr'`e`g`b''`e`g`b''`e`g`b'^'`e`g`b'^'`e`g`b''`e`g`b'^rrr'`e`g'^r-r-`b``c'`e`g``c''`e`g``c'^rrrrrr:'`e`g``c'^'`e`g``c''`e`g``c'^'`e`g``c']}
VolCtrl;
Set(,,,,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL03,MEL0302);


Init(4,5);
Str MEL04 = {o5l16q150 [2 a^^e^^c^^e^^ae^c^^e^^a^e^ce^a^e^] }
VolCtrl;V.T(100,0,!1+1+1+1);
Set(,,,,,,MEL04,MEL04,MEL04,MEL04,MEL04,MEL04,MEL04,MEL04,MEL04,);

Init(5,81);
Str MEL05 = {l16o.Random(3,7);q20; [64 f]}
VolCtrl;V.T(100,0,!1+1+1+1);
Set(,,,,,,MEL05,MEL05,,,MEL05,MEL05,MEL05,MEL05,MEL05,);

Init(10,1);
	$x{n(36),}$g{n(42),}$j{n(40),}
Str DRM01 = {
	S{BD;}
	S{SN;}
	HH;

}
Str BD = {l16 Rhythm{[2 xrrrrrxxrrxrrxrrxxrrrrrrxrrrrxrr]}}
Str HH = {l16 Rhythm{[2 rrgrrgrrrrrrrrgrrrrrrrgrrrrrrrrr]}}
Str SN = {l16 Rhythm{[2 rrrrjrrrrrrrjrrrrrrrjrrrrrrrjrrr]}}
q50;
VolCtrl;V.T(100,0,!1+1+1+1);
Set(,,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,DRM01,);