System.Include(stdmsg.h);
System.MeasureShift(1);
ResetGM();
TimeSignature = 4,4;
TrackSync;
TrackName={"メロディ風鈴ルンバ"};
Copyright={"森と泉"};
System.TimeBase=48;
Str Am={[8 'ace']};Str Dm={[8 'dfa']};Str Em={[8 'egb']};
Str Fm={[8 'fg+c']};Str C={[8 'ceg']};Str F={[8 'fac']};Str A7={[8 'ac+eg']};
Str B7={[8 'bd+f+a']};Str C7={[8 'cega+']};Str D7={[8 'df+ac']};
Str E7={[8 'eg+bd']};Str G7={[8 'gbdf']};Str A1={a.a.a};Str B1={b.b.b};
Str C1={c.c.c};Str D1={d.d.d};Str E1={e.e.e};Str F1={f.f.f};Str G1={g.g.g};
Tempo=170
TR=1 CH=1 @12 q100 V(127) P(64) o5 r1 l8 v100 TrackKey=6 P.onNoteWave((32,96,!4))
eg^o6v80ee^o5v100g^ |o4v120b^^ee^^^ |&eo5v100c^aa^^^ |ae^ao6v80c+^o5v100ag |&gf^ad^do4v120a |
o5v100c^^o4v120af+a^^ |&ao5v100d^gd^^o4v120b |&ba^o5v100cccc^ |&co4v120f^dfffg |
o5v100cc^o4v120ge^ee |ao5v100c^^fcf^ |do4v120g^bf^d^ |&de^ed^ed |
&dg^o5v100dd^d^ |&db^ee^^^ |cc^ee^go6v80c |&c^^g+g+ede |
ff^^fgf^ |cc^^g^ee |&ef+^cc^^^ |o5v100bg^^f^f^ |
&fg^^g^c^ |&cf+^o6v80f+f+^^^ |o5v100b^^^d^d^ |&dg^^^go6v80ce |
aa^^ddd^ |&do5v100f^bg^g^ |ff^o6v80co5v100aaf^ |&fg^fbbg^ |
a^^^o6v80afaa |g+g+^^c^o5v100f^ |&ff^a^^aa |&a^^ao6v80cfa^ |
d^^ff^gg |co5v100a^o6v80faaa^ |co5v100g^^c^c^ |&co4v120g^eg^b^ |
&bd^fa^^f |dc^f+o5v100ccd^ |fg^o6v80gg^g^ |be^beg+^b |
&bg^e^^o5v100g^ |ao6v80c^o5v100ao6v80eo5v100a^^ |aa^o6v80ga^^^ |aa^af^f^ |
&fa^cdc^^ |fg^gd^o5v100d^ |&do4v120e^^^^^^ |o5v100eo4v120b^^b^o5v100d^ |
aa^e^^^^ |o4v120ge^eb^eg |&ga^ao5v100ddo4v120a^ |&aa^ao5v100c^d^ |
o4v120f^^bfbo5v100d^ |o4v120ce^eg^gg |g+o5v100d^g+o6v80dg+^^ |&g+a^ae^^^ |
&ed^^o5v100a^d^ |o4v120aa^cccdf+ |g^^^^ddg |&ge^egeeg |
o5v100c^^o4v120fa^c^ |cf^a^^^^ |bb^ff^b^ |cc^ee^o5v100co4v120g|
TR=2 CH=2 @33 q100 V(100) P(32) o3 r1 l4 v100 v.onNote(100,80,70) TrackKey=6
 C1 E1 A1 A1 D1 D1 G1 F1 G1 C1 F1 G1 E1 G1 E1 C1 E1 G1 C1 D1 G1 C1 D1 G1 C1
 D1 G1 F1 G1 F1 F1 F1 F1 G1 F1 C1 E1 D1 D1 G1 E1 C1 A1 A1 D1 D1 G1 C1 E1 A1
 E1 D1 D1 G1 C1 E1 A1 D1 D1 G1 C1 F1 F1 G1 C1
TR=3 CH=3 @26 q33 V(70) P(96) o6 r1 l8 v80 TrackKey=6
v.N(80,80,80,80,60,60,60,60,80,80,80,80,80,80,80,80,60,60,60,60,80,80,80,80,80,80,80,80,80,80,80,80)
 C Em Am A7 Dm D7 G7 F G7 C F G7 E7 G7 E7 C E7 G7 C D7 G7 C D7 G7 C
 D7 G7 F G7 F Fm F F G7 F C Em Dm D7 G7 E7 C Am A7 Dm D7 G7 C E7 Am
 Em Dm D7 G7 C E7 Am Dm D7 G7 C F F G7 C
TR=8 CH=10 l16 V(80) P(80) o3  [67 cr8.r4crcrr4]
TR=9 CH=10 l16 V(80) P(80) o3  [67 [2 r4dr8.]]
TR=10 CH=10 l32 V(80) P(80) o3 [67[16 f+r]]//65Codes

//先頭からここまではサンプル曲(ピコサクラ対応)です。
//メロディ風鈴ルンバ本体(ピコサクラ未対応)を使う場合は先頭から次行までを消して下さい。
/*


Int AA;Int A9;        //音番号、旧の音番号（o5cはn60です）
Int N;Int N9; Int NX; //コード、旧のコード、次コード
Int BB;               //1小節内何番目の音
Int CC=8;             //音長　8分音符のみ使う
Int DD;               //何小節目
Int DDD;              
Int EE;               //c,c+,d,d+,e,f…を0,1,2,3,4,5…で表した数字
Int E9;             　//上記の旧の値
Int GG;               //前後の音の高さの差をチェックする回数
Int GG1=100;          //上記回数の最大値。これを超えてしまったらそのまま鳴らす。
Int Z;              //前後の音の高さの差を半音何個以内に制限。
Int W;                //タイ率
Int OO;               //オクターブ
Int OO9=5;            //旧オクターブ
Int SL=0;             //小節間タイ
Int TT;               //タイ率追加
Str PP;               //音符またはオクターブ付き音符
Str P9;               //前回の音符またはオクターブ付き音符
Array AR=({c},{c+},{d},{d+},{e},{f},{f+},{g},{g+},{a},{a+},{b})
Array VE=(,,,,{o4v120},{o5v100},{o6v80}) //オクターブとベロシティ
Array WW=(0,10,100,10,10,60,30,60)            //第何音目かによるタイ率
Str MD;               //MelodyMML
Str MC;               //ギターMML
Str MB;               //ベースMML
Str BR2="
";                    //改行
Str MML2;             //MML
MML2={"System.Include(stdmsg.h);
System.MeasureShift(1);
ResetGM();
TimeSignature = 4,4;
TrackSync;
TrackName={"メロディ風鈴ルンバ"};
Copyright={"森と泉"};
System.TimeBase=48;"}+BR2;

MML2=MML2+"Str Am={[8 'ace']};Str Dm={[8 'dfa']};Str Em={[8 'egb']};
Str Fm={[8 'fg+c']};Str C={[8 'ceg']};Str F={[8 'fac']};Str A7={[8 'ac+eg']};
Str B7={[8 'bd+f+a']};Str C7={[8 'cega+']};Str D7={[8 'df+ac']};
Str E7={[8 'eg+bd']};Str G7={[8 'gbdf']};Str A1={a.a.a};Str B1={b.b.b};
Str C1={c.c.c};Str D1={d.d.d};Str E1={e.e.e};Str F1={f.f.f};Str G1={g.g.g};"+BR2;

N9=1;A9=60;MD={};MC={};MB={};
FOR(DD=0; DD<100; DD++){           //100小節以内演奏する
IF(DD==0){N=3;}ELSE{N=NX;}         //1小節目はC、2小節以降は次コード(NX)から始める
IF(Random(100)<50 & DD!=0){MD=MD+"&";SL=1}ELSE{SL=0}  //小節間タイ率はここでは50％
IF(Random(100)<50){Z=6;}ELSE{Z=7;} //前後の音の高さの差を半音何個以内に制限
                                   //6個以内・・・50%、7個以内・・・50%
IF(DD/2*2==DD;){TT=0;}ELSE{TT=10;} //偶数小節、奇数小節のタイ率追加

SWITCH(N){ 
CASE(0){MB=MB+" A1" MC=MC+" A7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(49,52,55,57,61,64,67,69,73,76,79,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(6);}
CASE(1){MB=MB+" A1" MC=MC+" Am" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,52,57,60,64,69,72,76,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(0,3,6,8);}
CASE(2){MB=MB+" B1" MC=MC+" B7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(51,54,57,59,63,66,69,71,75,78,81,83);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(7);}
CASE(3){MB=MB+" C1" MC=MC+" C" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,52,55,60,64,67,72,76,79);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(1,3,4,5,7,8,9,9);}
CASE(4){MB=MB+" C1" MC=MC+" C7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,52,55,58,60,64,67,70,72,76,79,82);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(9);}
CASE(5){MB=MB+" D1" MC=MC+" D7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,50,54,57,60,62,66,69,72,74,78,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(11);}
CASE(6){MB=MB+" D1" MC=MC+" Dm" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(50,53,57,62,65,69,74,77,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(5);}
CASE(7){MB=MB+" E1" MC=MC+" E7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(50,52,56,59,62,64,68,71,74,76,80,83);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(1,3,11);}
CASE(8){MB=MB+" E1" MC=MC+" Em" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(52,55,59,64,67,71,76,79,83);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(1,3,6,9);}
CASE(9){MB=MB+" F1" MC=MC+" F" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,53,57,60,65,69,72,77,81);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(3,3,5,6,9,10,11,11);}
CASE(10){MB=MB+" F1" MC=MC+" Fm" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(48,53,56,60,65,68,72,77,80);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(3,6,9,11);}
CASE(11){MB=MB+" G1" MC=MC+" G7" FOR(BB=0; BB<CC; BB++){
        IF(SL=1){MD=MD+P9;SL=0} ELSE{FOR(GG=0; GG<GG1;GG++)        
        {AA = RandomSelect(50,53,55,59,62,65,67,71,74,77,79,8);IF((AA-A9)*(AA-A9)<=Z*Z){EXIT;}}
        W=WW(BB)+TT;IF(Random(100)<W&BB!=0){PP="^"}
        ELSE{OO=AA/12;EE=AA-OO*12;E9=EE;P9=AR(EE);IF(OO==OO9){PP=P9}ELSE{PP=VE(OO)+P9}}
        A9=AA;MD=MD+PP;OO9=OO;}}NX=RandomSelect(3,3,3,3,3,7,7,7,9,9,9,11);}
DEFAULT{r1}}

IF(DD==24|DD==49|DD==74){MB=MB+BR2;MC=MC+BR2;}
IF(DD>60 & N==3 & N9==11){DD++;EXIT;}   //60小節以上でG7→Cとなったら終了
MD=MD+" |";
IF(DD/4*4==DD&DD!=0){MD=MD+BR2;}
N9=N;}

DDD=DD+2
MML2=MML2+"Tempo=170"+BR2
MML2=MML2+"TR=1 CH=1 @12 q100 V(127) P(64) o5 r1 l8 v100 TrackKey=6 P.onCycle(!4,64,84,64,44)"
MML2=MML2+BR2+MD+"|"+BR2
MML2=MML2+"TR=2 CH=2 @33 q100 V(100) P(32) o3 r1 l4 v100 v.onNote(100,80,70) TrackKey=6"+BR2
MML2=MML2+MB+BR2
MML2=MML2+"TR=3 CH=3 @26 q33 V(70) P(96) o6 r1 l8 v80 v.onCycle(!8,80,60,80,80,60,80,80,80) TrackKey=6"+BR2
MML2=MML2+MC+BR2
MML2=MML2+"TR=8 CH=10 l16 V(80) P(80) o3  ["+DDD+" cr8.r4crcrr4]"+BR2
MML2=MML2+"TR=9 CH=10 l16 V(80) P(80) o3  ["+DDD+" [2 r4dr8.]]"+BR2
MML2=MML2+"TR=10 CH=10 l32 V(80) P(80) o3 ["+DDD+"[16 f+r]]"
MML2;
MML2=MML2+"/"+"/"+DD+"Codes";
Print(MML2);
