//コード進行
Array CD=("Am","Dm","E7","Am","A7","Dm","G7","C","E7","Am","Dm","G7","C","E7","Am","Dm","E7","Am");

RandomSeed=1234

Print("CD=",CD)

//音符パターン（拍ごとのタイの確率）
Array TT0=(0,33,33,33,33,33,33,33)       //ほぼ8部音符
Array TT1=(0,66,33,66,33,66,33,66)       //ほぼ4部音符
Array TT2=(0,66,66,66,33,66,66,66)       //ほぼ2部音符
Array TT3=(0,66,66,66,66,66,66,66)       //ほぼ全音符

Int CD1=SizeOf(CD)
Array TT  　　//音符パターン
Array ZZB   　//ノート（n表記）
Int RR  　　  //乱数
Int R1  　　  //乱数
Int NN    　　//ZZBのsize
Int ZZ0
Int Z9=67     //旧ノート（n表記）
Int VV        //velocity
Int V9=100    //旧velocity
Str MM=""     //MMはMML、M1は小節毎のMML
Str M1="TrackName={'CHORDで作曲2 PICOSAKURA'}
Copyright={'Moritoizumi'}"
Print(M1);MM=MM+M1;M1=""
M1="Tempo=120 TR=1 CH=1 @(NewAgePad) V(100) v100 l8 q98 TrackKey=6 P.onNoteWave(32,96,!4)"
Print(M1);MM=MM+M1;M1=""

For(Int I=0; I<SizeOf(CD); I++){

IF(CD(I)="A+7"){ZZB=(58,70,82,50,62,74,53,65,77,56,68,80)}//コード内のノートはn表記の
IF(CD(I)="A7"){ZZB=(57,69,81,49,61,73,52,64,76,55,67,79)} //48〜83とし、9音または12音に
IF(CD(I)="Am"){ZZB=(57,69,81,48,60,72,52,64,76)}          //してください。
IF(CD(I)="B"){ZZB=(59,71,83,51,63,75,54,66,78)}           //ここにないコードは作って下さい。
IF(CD(I)="B7"){ZZB=(59,71,83,51,63,75,54,66,78,57,69,81)}
IF(CD(I)="C"){ZZB=(48,60,72,52,64,76,55,67,79)}
IF(CD(I)="C+7"){ZZB=(49,61,73,53,65,77,56,68,80,59,71,83)}
IF(CD(I)="C+dim"){ZZB=(49,61,73,52,64,76,55,67,79,58,70,82)}
IF(CD(I)="C7"){ZZB=(48,60,72,52,64,76,55,67,79,58,70,82)}
IF(CD(I)="Caug"){ZZB=(48,60,72,52,64,76,56,68,80)}
IF(CD(I)="Cdim"){ZZB=(48,60,72,51,63,75,54,66,78,57,69,81)}
IF(CD(I)="Cm"){ZZB=(48,60,72,51,63,75,55,67,79)}
IF(CD(I)="D+7"){ZZB=(51,63,75,55,67,79,58,70,82,49,61,73)}
IF(CD(I)="Dxm"){ZZB=(51,63,75,54,66,78,58,70,82)}
IF(CD(I)="D7"){ZZB=(50,62,74,54,66,78,57,69,81,48,60,72)}
IF(CD(I)="Dm"){ZZB=(50,62,74,53,65,77,57,69,81)}
IF(CD(I)="Dm7"){ZZB=(50,62,74,53,65,77,57,69,81,48,60,72)}
IF(CD(I)="E7"){ZZB=(52,64,76,56,68,80,59,71,83,50,62,74)}
IF(CD(I)="Em"){ZZB=(52,64,76,55,67,79,59,71,83)}
IF(CD(I)="F"){ZZB=(53,65,77,57,69,81,48,60,72)}
IF(CD(I)="F7"){ZZB=(53,65,77,57,69,81,48,60,72,51,63,75)}
IF(CD(I)="Fm"){ZZB=(53,65,77,56,68,80,48,60,72)}
IF(CD(I)="G+"){ZZB=(56,68,80,48,60,72,51,63,75)}
IF(CD(I)="G+7"){ZZB=(56,68,80,48,60,72,51,63,75,54,66,78)}
IF(CD(I)="G7"){ZZB=(55,67,79,59,71,83,50,62,74,53,65,77)}
IF(CD(I)="Gaug"){ZZB=(55,67,79,59,71,83,51,63,75)}
IF(CD(I)="Gdim"){ZZB=(55,67,79,58,70,82,49,61,73,52,64,76)}
IF(CD(I)="Gm"){ZZB=(55,67,79,58,70,82,50,62,74)}

RR=RandomSelect(0,1,2,3,4,5)//音符パターンを乱数で決める
IF(RR=0){TT=TT0}
IF(RR=1){TT=TT0}
IF(RR=2){TT=TT0}
IF(RR=3){TT=TT1}
IF(RR=4){TT=TT2}
IF(RR=5){TT=TT3}

For(Int J=0; J<8; J++){ 
IF(TT(J)>RandomSelect(0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100)){M1=M1+"^"}//タイ
  ELSE{
  For(Int K=0; K<25; K++){
  NN=SizeOf(ZZB)
  IF(NN=9){R1=RandomSelect(0,1,2,3,4,5,6,7,8)}    //コード内の音9音または、
  ELSE{R1=RandomSelect(0,1,2,3,4,5,6,7,8,9,10,11)}//　12音からランダムに選ぶ
  ZZ0=(ZZB(R1)-Z9)*(ZZB(R1)-Z9)                   //変化が半音6個以内になる音を探す
  IF(ZZ0<37){
   VV=80                                          //ベロシティは低音ほど大にする
   IF(ZZB(R1)<72){VV=100}
   IF(ZZB(R1)<60){VV=120} 
   IF(VV!=V9){M1=M1+" v"+VV+"n"+ZZB(R1);Z9=ZZB(R1);V9=VV;EXIT}
   ELSE{M1=M1+" n"+ZZB(R1);Z9=ZZB(R1);EXIT}}
      }//K bottom
}
}//J bottom
Print(M1);MM=MM+M1;M1=""
}//I bottom
Play(MM)
