System.Include(stdmsg.h) System.MeasureShift(1); ResetGM(); TimeSignature = 5,4; TrackSync; TrackName={"メロディ風鈴5拍子"} Copyright={"森と泉"} MetaText={"乱数を使って毎回違ったメロディを奏でます。下側タブにコードと総小節数が出ます。"} System.TimeBase=96; Int AA;Int A9; //音番号、旧の音番号(o5cはn60です) Int N;Int N9; Int NX; //コード、旧のコード、次コード Int BB; //1小節内何番目の音 Int CC; //音長 Int CX; Int DD; //何小節目 Int GG; Int G8=24; //前後の音の高さの差をチェックする回数。 Int Z=7; //前後の音の高さの差を半音何個以内に制限。チェック回数を超えてしまったらそのまま鳴らす。 Int W; //タイ率 Int X; //ベロシティ 1音ごとに高い音ほど小(n48はv127・・・n83はv57) Str Am={[10 'ace']}; Str C7={[10 'cega+']}; Str Cm={[10 'cd+g']}; Str Cx7={[10 'c+fg+b']}; Str Dm={[10 'dfa']}; Str D7={[10 'df+ac']}; Str Dxm={[10 'd+f+a+']}; Str Dx7={[10 'd+ga+c+']}; Str Em={[10 'egb']}; Str E7={[10 'eg+bd']}; Str Fm={[10 'fg+c']}; Str F7={[10 'facd+']}; Str Gm={[10 'ga+d']}; Str G7={[10 'gbdf']}; Str B={[10 'bd+f+']}; Str Gx7={[10 'g+cd+f+']}; Str C={[10 'ceg']}; Str Dm7={[10 'dfac']}; Str F={[10 'fac']}; Str Caug={[10 'ceg+']}; Str Gx={[10 'g+cd+']}; Str Gaug={[10 'gbd+']}; Str A7={[10 'ac+eg']}; Str Cdim={[10 'cd+f+a']}; Str Ax7={[10 'a+dfg+']}; Str Cxdim={[10 'c+ega+']}; Str B7={[10 'bd+f+a']}; Str Gdim={[10 'ga+c+e']}; //Bass Str Ax1={a+8a+a+8a+a+a+};Str A1={a8aa8aaa};Str B1={b8bb8bbb};Str C1={c8cc8ccc}; Str Cx1={c+8c+c+8c+c+c+};Str D1={d8dd8ddd};Str Dx1={d+8d+d+8d+d+d+};Str E1={e8ee8eee}; Str F1={f8ff8fff};Str G1={g8gg8ggg};Str Gx1={g+8g+g+8g+g+g+}; Tempo=120 TR=1 CH=1 音色(ElectricPiano1) q400 V(100) P(64) r1^4 l8 v100 //唐突な^は休符とみなされ、うまく演奏されないのでゲートで対応(q400) TrackKey=4 TR=2 CH=2 音色(AcousticBass) q150 V(80) P(32) o3 r1^4 l4 v.onNote(80,90,80,90,100,110) TrackKey=4 TR=3 CH=3 音色(NylonGuitar) q100 V(60) P(96) o5 r1^4 l8 v.onCycle(!8,40,60,40,60,40,70,40,80,40,90) TrackKey=4 TR=8 CH=10 l16 V(60) P(27) o3 l8 [5 n31 r] l16 TR=9 CH=10 l16 V(60) P(27) o3 r1^4 TR=10 CH=10 l32 V(60) P(27) o3 r1^4 TR=1 N9=1;A9=80; FOR(DD=0; DD<100; DD++){ //100小節以内演奏する IF(DD==0){N=5;}ELSE{N=NX;} //1小節目はC、2小節以降は次コード(NX)から始める CC=RandomSelect(4,4,8,8,8,8,16,16,32) //音符 CX=CC+CC/4 //1小節内の音符数CC=4→CX=5、 CC=8→CX=10、 CC=16→CX=20、 CC=32→CX=40 l(CC) W=CC*2; //タイ率(音符が短いほど大) 4分音符は8%、32分音符は64% TR=8 cr8.r4crcrr4cr8. TR=9 [2 r4dr8.]dr8. TR=10 [20 f+r] SWITCH(N){ CASE(0){Print{A+7};TR=2 Ax1 TR=3 Ax7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(58,70,82,50,62,74,53,65,77,56,68,80);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5,1);} CASE(1){Print{A7};TR=2 A1 TR=3 A7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(57,69,81,49,61,73,52,64,76,55,67,79);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(14,15,11);} CASE(2){Print{Am};TR=2 A1 TR=3 Am TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(57,69,81,48,60,72,52,64,76);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(2,15,18,14,7,23);} CASE(3){Print{B};TR=2 B1 TR=3 B TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(59,71,83,51,63,75,54,66,78);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5);} CASE(4){Print{B7};TR=2 B1 TR=3 B7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(59,71,83,51,63,75,54,66,78,57,69,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(15,18,17,0);} CASE(5){Print{C};TR=2 C1 TR=3 C TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(48,60,72,52,64,76,55,67,79);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5,5,24,19,2,2,10,26,7,3,25,14,1,8,21,20,0,27,4,9,17,12,18,15,22,13,23);} CASE(6){Print{C+7};TR=2 Cx1 TR=3 Cx7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(49,61,73,53,65,77,56,68,80,59,71,83);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5);} CASE(7){Print{C+dim};TR=2 Cx1 TR=3 Cxdim TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(49,61,73,52,64,76,55,67,79,58,70,82);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(15,24,16);} CASE(8){Print{C7};TR=2 C1 TR=3 C7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(48,60,72,52,64,76,55,67,79,58,70,82);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(19,21,20,4);} CASE(9){Print{Caug};TR=2 C1 TR=3 Caug TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(48,60,72,52,64,76,56,68,80);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(19,2);} CASE(10){Print{Cdim};TR=2 C1 TR=3 Cdim TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(48,60,72,51,63,75,54,66,78,57,69,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24,16,5);} CASE(11){Print{Cm};TR=2 C1 TR=3 Cm TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(48,60,72,51,63,75,55,67,79);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(14);} CASE(12){Print{D+7};TR=2 Dx1 TR=3 Dx7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(51,63,75,55,67,79,58,70,82,49,61,73);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(16,14);} CASE(13){Print{D+m};TR=2 Dx1 TR=3 Dxm TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(51,63,75,54,66,78,58,70,82);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(15);} CASE(14){Print{D7};TR=2 D1 TR=3 D7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(50,62,74,54,66,78,57,69,81,48,60,72);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24,16,6);} CASE(15){Print{Dm};TR=2 D1 TR=3 Dm TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(50,62,74,53,65,77,57,69,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24,4,18,5,17,6);} CASE(16){Print{Dm7};TR=2 D1 TR=3 Dm7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(50,62,74,53,65,77,57,69,81,48,60,72);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24);} CASE(17){Print{E7};TR=2 E1 TR=3 E7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(52,64,76,56,68,80,59,71,83,50,62,74);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(17,1,1);} CASE(18){Print{Em};TR=2 E1 TR=3 Em TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(52,64,76,55,67,79,59,71,83);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(9,2,15);} CASE(19){Print{F};TR=2 F1 TR=3 F TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(53,65,77,57,69,81,48,60,72);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(19,5,24,21,24);} CASE(20){Print{F7};TR=2 F1 TR=3 F7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(53,65,77,57,69,81,48,60,72,51,63,75);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5);} CASE(21){Print{Fm};TR=2 F1 TR=3 Fm TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(53,65,77,56,68,80,48,60,72);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5,24);} CASE(22){Print{G+};TR=2 Gx1 TR=3 Gx TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(56,68,80,48,60,72,51,63,75);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24);} CASE(23){Print{G+7};TR=2 Gx1 TR=3 Gx7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(56,68,80,48,60,72,51,63,75,54,66,78);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24,15,5);} CASE(24){Print{G7};TR=2 G1 TR=3 G7 TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(55,67,79,59,71,83,50,62,74,53,65,77);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5);} CASE(25){Print{Gaug};TR=2 G1 TR=3 Gaug TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(55,67,79,59,71,83,51,63,75);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(5);} CASE(26){Print{Gdim};TR=2 G1 TR=3 Gdim TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(55,67,79,58,70,82,49,61,73,52,64,76);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(24);} CASE(27){Print{Gm};TR=2 G1 TR=3 Gm TR=1 l(CC) FOR(BB=0; BB<CX; BB++){FOR(GG=0; GG<G8;GG++){ AA = RandomSelect(55,67,79,58,70,82,50,62,74);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}} IF(Random(100)>W){X=127-(AA-48)*2 v(X) n(AA) A9=AA;}ELSE{^}}NX=RandomSelect(1);} DEFAULT{r1}} IF(DD>60 & N==5 & N9==24){DD=DD+1;Print(DD);EXIT;} //60小節以上でG7→Cとなったら終了 N9=N;} TR=8 cr8.r4crcrr4cr8. TR=9 [2 r4dr8.]dr8. TR=10 [20 f+r]