System.Include(stdmsg.h);
System.MeasureShift(1);
ResetGM();
TimeSignature =7,4;
TrackSync;
TrackName={"メロディ風鈴３，４，５，７拍子"};
Copyright={"森と泉"};
Str Am={[14'acea']};Str C7={[14'cega+']};Str Cm={[14'cd+gc']};Str Cx7={[14'c+fg+bc+']};
Str Dm={[14'dfad']};Str D7={[14'df+ac']};Str Dxm={[14'd+f+a+d+']};Str Dx7={[14'd+ga+c+']};
Str Em={[14'egbe']};Str E7={[14'eg+bd']};Str Fm={[14'fg+cf']};Str F7={[14'facd+']};
Str Gm={[14'ga+dg']};Str G7={[14'gbdf']};Str B={[14'bd+f+b']};Str Gx7={[14'g+cd+f+']};
Str C={[14'cegc']};Str Dm7={[14'dfac']};Str F={[14'facf']};Str Caug={[14'ceg+c']};
Str Gx={[14'g+cd+g+']};Str Gaug={[14'gbd+g']};Str A7={[14'ac+eg']};Str Cdim={[14'cd+f+a']};
Str Ax7={[14'a+dfg+']};Str Cxdim={[14'c+ega+']};Str B7={[14'bd+f+a']};Str Gdim={[14'ga+c+e']};
Str Ax1={a+.a+.a+^a+^};Str A1={a.a.a^a^};Str B1={b.b.b^b^};Str C1={c.c.c^c^};Str Cx1={c+.c+.c+^c+^};Str D1={d.d.d^d^};
Str Dx1={d+.d+.d+^d+^};Str E1={e.e.e^e^};Str F1={f.f.f^f^};Str G1={g.g.g^g^};Str Gx1={g+.g+.g+^g+^};
Tempo=160

TR=1 CH=1 @(Vibraphone)   V(120) P(64) o5  v100 TrackKey=6 P.onNoteWave(32,96,!4) r1^2 l8  
c^^o4v127e^c^cc^^^c^|aa^^a^f+^o5v107d+^^^f+^|o6v87e^^^^o4v127d^^^^^^e^|g^^^o5v107e^a^^a^^^^
o6v87f^d^o5v107a^^o6v87f^d^^^a|d+^^^^f+^d+^^^o5v107a^d+|ededd^^de^^^d^|a^^g^^g^^^^^o4v127g^
o5v107c1|c^dc^df^a^do4v127aaf|d^fb^^gd^f^^^^|o5v107co4v127g^o5v107co4v127g^^^c^ee^^
b^^^^^^o5v107d^^^^^^|o4v127a^o5v107c+^eea^^aao6v87c+^^|o5v107f+^^^o4v127aa^o5v107c^f+^^aa|gf^^^^o4v127fff^^^^^
o5v107ec^^o4v127c^^^ce^^^^|ffd^ao5v107d^d^o4v127afd^^|a^^bbad+ao5v107d+f+^d+o4v127af+|dd^o5v107dg+g+o6v87dfg+fa+^fd
ccceg^^g^cce^e|c^d+f^^^^fc^^d+d+|e^o5v107ge^o4v127go5v107cee^go6v87ceg|ffffdfa^fafd^^
d+^^^f+^f+f+f+^d+^^o5v107d+|d^^d^^o4v127a+^o5v107g+f^^a+f|ao6v87c+c+^c+^gaa^^^e^|fafafafafaf^^^
b^f^^f^^f^^^^^|o5v107g^^o6v87e^e^c^^^o5v107e^^|a+^^o6v87a+^^^^o5v107e^o6v87ea+g^|f^o5v107b^^o6v87d^^^^^^^f
e^^gge^^^^^e^^|f^a^^^^^d+^^d+a^|cee^c^^o5v107g^^o6v87e^eg|f^^g+^a+^fd^d^d^
c^^e^^^g^e^c^^|o5v107a+^fg+ff^o6v87d^^o5v107g+^a+f|c^^c^^g^g^g^^g|f^^^^o6v87b^^^^g^g^
g^^^^^^^^o5v107g^o6v87e^c|ea+^e^^^^a+^a+^^^|do5v107bo6v87d^^^^df^fo5v107b^g|e^^^^^o6v87c^^^^^o5v107g^
af+f+f+^d+^o6v87d+d+ab^^^|g+a+^a+^^^g+^ffd^g+|ecc^c^^ggeee^c|o5v107g^o6v87e^c^o5v107go6v87cecce^c
ec+o5v107ao6v87c+^g^c+ea^^g^|g^^gd+^^^gd+^o5v107g^^|df+ao6v87d^^o5v107f+^^^f+^o6v87d^|o5v107a^af^dc^^^d^^c
fdo4v127b^o5v107d^d^o4v127g^^^g^|g^e^c^^^^^o5v107eg^^|a+o6v87d+^o5v107a+a+o6v87c+o5v107gc+o4v127a+^o5v107go6v87c+g^|f^f^^^d^c^o5v107f^^^
o6v87f^f^^^o5v107f^d^^o4v127b^^|o5v107e^^^^^^^^o4v127e^c^e|f+^o5v107f+^o6v87c^^f+d^d^^^|bf^^^c+f^fc+^c+^g+
e^c^e^e^e^^^^g|e^a^^^e^a^ae^^|a^aaf+f+f+^dc^^^^|c^^^d^^^o5v107ccd^^^
fo4v127bo5v107d^^gg^fdgdf^|e1

TR=2 CH=2 @(AcousticBass)  q100 V(100) P(32) o3  v100 TrackKey=6 r1^2 l4 v.N(100,80,70,70)
 C1 B1 E1 A1 D1 B1 E1 A1 D1 D1 G1 C1 E1 A1 D1 G1 C1 D1 B1 Ax1 C1 F1 C1 D1 B1
 Ax1 A1 D1 G1 C1 G1 G1 C1 F1 C1 Ax1 C1 Ax1 C1 G1 C1 G1 G1 C1 B1 Ax1 C1 C1 A1 C1
 D1 D1 G1 C1 Dx1 D1 G1 C1 D1 Cx1 C1 A1 D1 D1 G1 C1

TR=3 CH=3 @(SteelcGuitar)  V(50)  P(96) o5  v80  TrackKey=6 r1^2 l8 v.N(99,99,99,99,70,70,70,70,80,80,80,80,70,70,70,70,80,80,80,80,70,70,70,70,99,99,99,99,70,70,70,70,80,80,80,80,70,70,70,70,99,99,99,99,70,70,70,70,99,99,99,99,99,99,99,99)
 C B7 E7 A7 Dm B7 E7 A7 D7 Dm7 G7 C E7 A7 D7 G7 C Dm B7 Ax7 C F7 C Dm B7
 Ax7 A7 Dm G7 C Gdim G7 C F7 C Ax7 C Ax7 C G7 C Gdim G7 C B7 Ax7 C C A7 Cm
 D7 Dm7 G7 C Dx7 Dm7 G7 C D7 Cx7 C Am D7 Dm7 G7 C
//ここまではピコサクラ対応のサンプル曲です。テキスト音楽サクラで使用する場合は、
/*先頭からこの行までを削除して下さい。



Int BT =7    //ビートを半角数字で指定してください（3,4,5,7のいずれか)
             //実行の度に毎回異なるMMLを下側タブに出力、演奏します。






Int CX=8;                   //1小節に8分音符を
Int CC=BT*2;                //ビートの2倍使うのが基本形  
Array WW;                   //1小節内の各音符がタイ(^)に変わる確率(%)
Int AA;Int A9;              //音番号と旧AA（o5cはn60です)
Array AA1;Int LL            //コード内ノートとそのSIZE
Int N;Int N9;Int NX;        //コード、旧コード、次コード
Int BB;                     //1小節内何番目の音
Int DD;                     //何小節目
Int DDD;                    //DD+2           
Int EE;                     //c,c+,d,d+…を0,1,2,3…で表した数字
Int E9;                     //EEの旧値
Int GG;                     //前後の音の高さの差をチェックする回数
Int GG1=100;                //GGの最大値。これを超えたらそのまま鳴らす。
Int Z=6;                    //前後の音の高さの差を半音6個以内に制限
Int RX                      //乱数
Int OO;                     //オクターブ
Int OO9=5;                  //旧OO
Str PP;Str P9               //音符またはオクターブ付き音と旧PP
Array AR=({c},{c+},{d},{d+},{e},{f},{f+},{g},{g+},{a},{a+},{b})
Array VE=(,,,,{o4v127},{o5v107},{o6v87})         //オクターブとベロシティ
Str MD;      //MelodyMML
Str MC;      //伴奏MML
Str MC1;     //伴奏MML1音
Str MB;      //伴奏MML
Str MB1;     //伴奏MML1音
Str MML2;    //MML
Str BR2="
";                    //改行
MML2={"System.Include(stdmsg.h);"}+BR2
MML2=MML2+{"System.MeasureShift(1);"}+BR2
MML2=MML2+{"ResetGM();"}+BR2
MML2=MML2+{"TimeSignature ="}+ BT +{",4;"}+BR2
MML2=MML2+{"TrackSync;"}+BR2
MML2=MML2+{"TrackName={"メロディ風鈴３，４，５，７拍子"}"}+BR2
MML2=MML2+{"Copyright={"森と泉"}"}+BR2;
Int BZ=BT*2
MML2=MML2+"Str Am={["+BZ+"'acea']};Str C7={["+BZ+"'cega+']};Str Cm={["+BZ+"'cd+gc']};Str Cx7={["+BZ+"'c+fg+bc+']};"+BR2;
MML2=MML2+"Str Dm={["+BZ+"'dfad']};Str D7={["+BZ+"'df+ac']};Str Dxm={["+BZ+"'d+f+a+d+']};Str Dx7={["+BZ+"'d+ga+c+']};"+BR2;
MML2=MML2+"Str Em={["+BZ+"'egbe']};Str E7={["+BZ+"'eg+bd']};Str Fm={["+BZ+"'fg+cf']};Str F7={["+BZ+"'facd+']};"+BR2;
MML2=MML2+"Str Gm={["+BZ+"'ga+dg']};Str G7={["+BZ+"'gbdf']};Str B={["+BZ+"'bd+f+b']};Str Gx7={["+BZ+"'g+cd+f+']};"+BR2;
MML2=MML2+"Str C={["+BZ+"'cegc']};Str Dm7={["+BZ+"'dfac']};Str F={["+BZ+"'facf']};Str Caug={["+BZ+"'ceg+c']};"+BR2;
MML2=MML2+"Str Gx={["+BZ+"'g+cd+g+']};Str Gaug={["+BZ+"'gbd+g']};Str A7={["+BZ+"'ac+eg']};Str Cdim={["+BZ+"'cd+f+a']};"+BR2;
MML2=MML2+"Str Ax7={["+BZ+"'a+dfg+']};Str Cxdim={["+BZ+"'c+ega+']};Str B7={["+BZ+"'bd+f+a']};Str Gdim={["+BZ+"'ga+c+e']};"+BR2;

SWITCH(BT){                 //●BEAT別の処理その１ここから●
CASE(3){MML2=MML2+"Str Ax1={a+^a+};Str A1={a^a};Str B1={b^b};Str C1={c^c};Str Cx1={c+^c+};Str D1={d^d};
Str Dx1={d+^d+};Str E1={e^e};Str F1={f^f};Str G1={g^g};Str Gx1={g+^g+};"+BR2;}
CASE(4){MML2=MML2+"Str Ax1={a+.a+.a+};Str A1={a.a.a};Str B1={b.b.b};Str C1={c.c.c};Str Cx1={c+.c+.c+};Str D1={d.d.d};
Str Dx1={d+.d+.d+};Str E1={e.e.e};Str F1={f.f.f};Str G1={g.g.g};Str Gx1={g+.g+.g+};"+BR2;}
CASE(5){MML2=MML2+"Str Ax1={a+.a+.a+a+};Str A1={a.a.aa};Str B1={b.b.bb};Str C1={c.c.cc};Str Cx1={c+.c+.c+c+};Str D1={d.d.dd};
Str Dx1={d+.d+.d+d+};Str E1={e.e.ee};Str F1={f.f.ff};Str G1={g.g.gg};Str Gx1={g+.g+.g+g+};"+BR2;}
DEFAULT{MML2=MML2+"Str Ax1={a+.a+.a+^a+^};Str A1={a.a.a^a^};Str B1={b.b.b^b^};Str C1={c.c.c^c^};Str Cx1={c+.c+.c+^c+^};Str D1={d.d.d^d^};
Str Dx1={d+.d+.d+^d+^};Str E1={e.e.e^e^};Str F1={f.f.f^f^};Str G1={g.g.g^g^};Str Gx1={g+.g+.g+^g+^};"+BR2;}
}                          //●ここまで●

N9=1;A9=60;MD={};MC={};MB={};Str LAST=0;
FOR(DD=0; DD<100; DD++){       　　　  //100小節以内演奏する
IF(DD==0){N=5}ELSE{N=NX}        　　　 //1小節目はC、2小節以降は次コード(NX)から始める
IF(DD>60 & N==5 & N9==24){LAST=1}  　　 //60小節以上でG7→Cとなったら最終小節

IF(BT=3){RX=Random(6);                  //●BEAT別の処理その２ここから●
SWITCH(RX){
CASE(0){WW=(0,0,0,0,0,0)}
CASE(1,2){WW=(0,100,0,100,0,100)} 　
CASE(3){WW=(0,100,100,0,0,100)}　   
CASE(4){WW=(0,100,100,100,100,100)} 
DEFAULT{WW=(0,100,100,100,0,100)}}　
IF(LAST=1){WW=(0,100,100,100,100,100)}  //最終小節
}
IF(BT=4){RX=Random(4);
SWITCH(RX){ 
CASE(0){WW=(0,33,33,33,33,33,33,33)}
CASE(1,2){WW=(0,66,33,66,33,66,33,66)} 
DEFAULT{WW=(0,66,66,66,66,66,66,66)}}　
IF(LAST=1){WW=(0,100,100,100,100,100,100,100)}  //最終小節
}
IF(BT=5){RX=Random(4);
SWITCH(RX){ 
CASE(0){WW=(0,33,33,33,33,33,33,33,33,33)}
CASE(1,2){WW=(0,66,33,66,33,66,33,66,33,66)}
DEFAULT{WW=(0,66,66,66,66,66,66,66,66,66)}}
IF(LAST=1){WW=(0,100,100,100,100,100,100,100,100,100)}  //最終小節
}
IF(BT=7){RX=Random(4);
SWITCH(RX){ 
CASE(0){WW=(0,33,33,33,33,33,33,33,33,33,33,33,33,33)}
CASE(1,2){WW=(0,66,33,66,33,66,33,66,33,66,33,66,33,66)}
DEFAULT{WW=(0,66,66,66,66,66,66,66,66,66,66,66,66,66)}}
IF(LAST=1){WW=(0,100,100,100,100,100,100,100,100,100)}  //最終小節
}                                          //●ここまで●
SWITCH(N){ 
//       Organ     Guitar      構成音　　　　　　　　　　　　　　　　　　次コード候補　※変えてみてください
CASE(0){ MB1="Ax1";MC1="Ax7";  AA1=(58,70,82,50,62,74,53,65,77,56,68,80);NX=RandomSelect(5,1)}
CASE(1){ MB1="A1"; MC1="A7";   AA1=(57,69,81,49,61,73,52,64,76,55,67,79);NX=RandomSelect(14,15,11)}
CASE(2){ MB1="A1"; MC1="Am";   AA1=(57,69,81,48,60,72,52,64,76);         NX=RandomSelect(2,15,18,14,7,23)}
CASE(3){ MB1="B1"; MC1="B";    AA1=(59,71,83,51,63,75,54,66,78);         NX=RandomSelect(5)}
CASE(4){ MB1="B1"; MC1="B7";   AA1=(59,71,83,51,63,75,54,66,78,57,69,81);NX=RandomSelect(15,18,17,0)}
CASE(5){ MB1="C1"; MC1="C";    AA1=(48,60,72,52,64,76,55,67,79);         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){ MB1="Cx1";MC1="Cx7";  AA1=(49,61,73,53,65,77,56,68,80,59,71,83);NX=RandomSelect(5)}
CASE(7){ MB1="Cx1";MC1="Cxdim";AA1=(49,61,73,52,64,76,55,67,79,58,70,82);NX=RandomSelect(15,24,16)}
CASE(8){ MB1="C1"; MC1="C7";   AA1=(48,60,72,52,64,76,55,67,79,58,70,82);NX=RandomSelect(19,21,20,4)}
CASE(9){ MB1="C1"; MC1="Caug"; AA1=(48,60,72,52,64,76,56,68,80);         NX=RandomSelect(19,2)}
CASE(10){MB1="C1"; MC1="Cdim"; AA1=(48,60,72,51,63,75,54,66,78,57,69,81);NX=RandomSelect(24,16,5)}
CASE(11){MB1="C1"; MC1="Cm";   AA1=(48,60,72,51,63,75,55,67,79);         NX=RandomSelect(14)}
CASE(12){MB1="Dx1";MC1="Dx7";  AA1=(51,63,75,55,67,79,58,70,82,49,61,73);NX=RandomSelect(16,14)}
CASE(13){MB1="Dx1";MC1="Dxm";  AA1=(51,63,75,54,66,78,58,70,82);         NX=RandomSelect(15)}
CASE(14){MB1="D1"; MC1="D7";   AA1=(50,62,74,54,66,78,57,69,81,48,60,72);NX=RandomSelect(24,16,6)}
CASE(15){MB1="D1"; MC1="Dm";   AA1=(50,62,74,53,65,77,57,69,81);         NX=RandomSelect(24,4,18,5,17,6)}
CASE(16){MB1="D1"; MC1="Dm7";  AA1=(50,62,74,53,65,77,57,69,81,48,60,72);NX=RandomSelect(24)}
CASE(17){MB1="E1"; MC1="E7";   AA1=(52,64,76,56,68,80,59,71,83,50,62,74);NX=RandomSelect(17,1,1)}
CASE(18){MB1="E1"; MC1="Em";   AA1=(52,64,76,55,67,79,59,71,83);         NX=RandomSelect(9,2,15)}
CASE(19){MB1="F1"; MC1="F";    AA1=(53,65,77,57,69,81,48,60,72);         NX=RandomSelect(19,5,24,21,24)}
CASE(20){MB1="F1"; MC1="F7";   AA1=(53,65,77,57,69,81,48,60,72,51,63,75);NX=RandomSelect(5)}
CASE(21){MB1="F1"; MC1="Fm";   AA1=(53,65,77,56,68,80,48,60,72);         NX=RandomSelect(5,24)}
CASE(22){MB1="Gx1";MC1="Gx";   AA1=(56,68,80,48,60,72,51,63,75);         NX=RandomSelect(24)}
CASE(23){MB1="Gx1";MC1="Gx7";  AA1=(56,68,80,48,60,72,51,63,75,54,66,78);NX=RandomSelect(24,15,5)}
CASE(24){MB1="G1"; MC1="G7";   AA1=(55,67,79,59,71,83,50,62,74,53,65,77);NX=RandomSelect(5)}
CASE(25){MB1="G1"; MC1="Gaug"; AA1=(55,67,79,59,71,83,51,63,75);         NX=RandomSelect(5)}
CASE(26){MB1="G1"; MC1="Gdim"; AA1=(55,67,79,58,70,82,49,61,73,52,64,76);NX=RandomSelect(24)}
DEFAULT{ MB1="G1"; MC1="Gm";   AA1=(55,67,79,58,70,82,50,62,74);         NX=RandomSelect(1)}
}
MB=MB+" "+MB1;MC=MC+" "+MC1;

FOR(BB=0; BB<CC; BB++){FOR(GG=0; GG<GG1;GG++)        
        {LL=SizeOf(AA1);AA=AA1(Random(LL))	  
	  IF((AA-A9)*(AA-A9)=<Z*Z){EXIT;}}
	  IF(Random(100)<WW(BB)){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}
IF(DD==24|DD==49|DD==74){MB=MB+BR2;MC=MC+BR2;}
IF(LAST=1){DD++;EXIT;}  　　　　　　　　　　　 //最終小節
IF((DD+1)/4*4==DD+1){MD=MD+BR2;}ELSE{MD=MD+"|";}
N9=N;}
DDD=DD+2

Str XX1="TR=1 CH=1 @(Vibraphone)　  V(120) P(64) o5  v100 TrackKey=6 P.onNoteWave(32,96,!4) "
Str XX2="TR=2 CH=2 @(AcousticBass)  q100 V(100) P(32) o3  v100 TrackKey=6 "
Str XX3="TR=3 CH=3 @(SteelcGuitar)  V(60)  P(96) o5  v80  TrackKey=6 " 

SWITCH(BT){                                   //●BEAT別の処理その３ここから●
CASE(3){
MML2=MML2+"Tempo=120"+BR2+XX1+"r2. l8 "+BR2+MD+BR2;
MML2=MML2+XX2+"r2. l4  v.N(100,80)"+BR2+MB+BR2;
MML2=MML2+XX3+"r2. l8  v.N(80,80,80,80,60,60,60,60,60,60,60,60)"+BR2+MC}
CASE(4){
MML2=MML2+"Tempo=140"+BR2+XX1+"r1 l8"+BR2+MD+BR2;
MML2=MML2+XX2+"r1 l4  v.N(100,80,70)"+BR2+MB+BR2;
MML2=MML2+XX3+"r1 l8  v.N(80,80,80,80,50,50,50,50,80,80,80,80,80,80,80,80,50,50,50,50,80,80,80,80,80,80,80,80,80,80,80,80)"+BR2+MC}
CASE(5){
MML2=MML2+"Tempo=150"+BR2+XX1+"r1^4 l8  "+BR2+MD+BR2;
MML2=MML2+XX2+"r1^4 l4 v.N(100,80,70,70)"+BR2+MB+BR2;
MML2=MML2+XX3+"r1^4 l8 v.N(99,99,99,99,70,70,70,70,80,80,80,80,70,70,70,70,80,80,80,80,70,70,70,70,99,99,99,99,70,70,70,70,99,99,99,99,99,99,99,99)"+BR2+MC}
DEFAULT{
MML2=MML2+"Tempo=160"+BR2+XX1+"r1^2 l8  "+BR2+MD+BR2;
MML2=MML2+XX2+"r1^2 l4 v.N(100,80,70,70)"+BR2+MB+BR2;
MML2=MML2+XX3+"r1^2 l8 v.N(99,99,99,99,70,70,70,70,80,80,80,80,70,70,70,70,80,80,80,80,70,70,70,70,99,99,99,99,70,70,70,70,80,80,80,80,70,70,70,70,99,99,99,99,70,70,70,70,99,99,99,99,99,99,99,99)"+BR2+MC}
}                                            //●ここまで●
MML2;
Print(MML2);