/////////////////////////////////////////////////////////////////////////////// // title: "rchord.h" ver 1.04 // description: 和音を下からランダムなタイミングで演奏するインクルードファイル(2015/11/24) // keywords: SAKURA Function by ななこっち★ @nanakochi123456 // HP: http://nano.daiba.cx/ /////////////////////////////////////////////////////////////////////////////// // rchord.h 和音をランダムなタイミングで演奏する /////////////////////////////////////////////////////////////////////////////// // Function RCDINIT(min, value) // 乱数値の最小値、最大値を設定する。両方0にすると、同一タイミングで演奏します。 // // Function RCD(mml) // ランダムに演奏したい和音のMMLを入力する /////////////////////////////////////////////////////////////////////////////// // Example // Include(rchord.h) // RCDINIT(53,513) // l4 RCD(ceg) // l8 RCD(<b>fg) // l8 RCD(ceg) // RCDINIT(53,513,90,100) /////////////////////////////////////////////////////////////////////////////// // テストする場合、コメントアウトを消して下さい。 //Int TEST=1 /////////////////////////////////////////////////////////////////////////////// Int RCD_MIN=192 Int RCD_MAX=768 Int RCD_VMIN=-1 Int RCD_VMAX=-1 Int RCD_CRESC=0 Int RCD_TMIN=-1 Int RCD_TMAX=-1 Int RCD_ENABLE=1 Int SRCD_MIN=192 Int SRCD_MAX=768 Int SRCD_VMIN=-1 Int SRCD_VMAX=-1 Int SRCD_CRESC=0 Int SRCD_TMIN=-1 Int SRCD_TMAX=-1 Int SRCD_ENABLE=1 Function RCDENABLE(Int FLG) { RCD_ENABLE=FLG } Function SRCDENABLE(Int FLG) { SRCD_ENABLE=FLG } Function RCDINIT(Int MIN, Int MAX, Int VMIN, Int VMAX, Int VDIF) { RCD_MIN=MIN RCD_MAX=MAX IF(VMIN<>0 && VMAX<>0) { RCD_VMIN=VMIN RCD_VMAX=VMAX RCD_CRESC=VDIF } ELSE { RCD_VMIN=-1 RCD_VMAX=-1 RCD_CRESC=0 } } Function RCDR(Int RMIN, Int RMAX) { RCD_RMIN=RMIN RCD_RMAX=RMAX } Function RCDV(Int VMIN, Int VMAX) { RCD_CRESC=0 IF(VMAX=0) { Int TMPMIN=RCD_VMIN Int TMPMAX=RCD_VMAX TMPMIN=TMPMIN+VMIN TMPMAX=TMPMAX+VMIN IF(TMPMIN < 0) { TMPMIN=0 } IF(TMPMIN > 127) { TMPMAX=127 } IF(TMPMAX < 0) { TMPMAX=0 } IF(TMPMAX > 127) { TMPMAX=127 } RCD_VMIN=TMPMIN RCD_VMAX=TMPMAX } ELSE { RCD_VMIN=VMIN RCD_VMAX=VMAX } } Function RCD(Str MML) { Str BUF="" Str FIRST="" Str ML="" Str M Str R Str FM Int C=0 Str VL IF(RCD_ENABLE=0) { BUF="'" + MML + "'" } ELSE { RCD_TMIN=RCD_VMIN RCD_TMAX=RCD_VMAX BUF="" R="" For(Int i=1; MID(MML, i, 1)!=""; i++) { M=MID(MML, i, 1) IF(DEBUG=1||TEST=1) { Print("Count "+ C + " Str="+M) } IF(M="a"||M="b"||M="c"||M="d"||M="e"||M="f"||M="g") { C++ IF(C<2) { FIRST=ML ML=FM+M FM="" IF(RCD_TMIN>=0 && RCD_TMAX>=0) { VL="v"+Random(RCD_TMIN, RCD_TMAX) RCD_TMIN=RCD_TMIN+RCD_CRESC RCD_TMAX=RCD_TMAX+RCD_CRESC IF(RCD_TMIN<0) { RCD_TMIN=0 } IF(RCD_TMIN>127) { RCD_TMIN=127 } IF(RCD_TMAX<0) { RCD_TMAX=0 } IF(RCD_TMAX>127) { RCD_TMAX=127 } } ELSE { VL="" } ML=VL+ML } ELSE { BUF=BUF+"Sub" + CHR(123)+R+ML+CHR(125) IF(RCD_MAX>0) { R=R+"r"+Random(RCD_MIN, RCD_MAX) } IF(RCD_TMIN>=0 && RCD_TMAX>=0) { VL="v"+Random(RCD_TMIN, RCD_TMAX) RCD_TMIN=RCD_TMIN+RCD_CRESC RCD_TMAX=RCD_TMAX+RCD_CRESC IF(RCD_TMIN<0) { RCD_TMIN=0 } IF(RCD_TMIN>127) { RCD_TMIN=127 } IF(RCD_TMAX<0) { RCD_TMAX=0 } IF(RCD_TMAX>127) { RCD_TMAX=127 } } ELSE { VL="" } ML=VL+M } } ELSE { IF(M="#"||M="+"||M="-") { ML=ML+M } ELSE { IF(C>0) { ML=ML+VL+M } ELSE { FM=FM+VL+M } } } } BUF=BUF+"Sub"+CHR(123)+R+ML+CHR(125)+FIRST+"r" IF(DEBUG=1 || TEST=1) { Print(BUF) } } BUF } Function ROCT(Str MML) { Str BUF="" Str FIRST="" Str ML="" Str M Str R Str FM Int C=0 Str VL MML=MML + ">" + MML + "<" IF(RCD_ENABLE=0) { BUF="'" + MML + "'" } ELSE { RCD_TMIN=RCD_VMIN RCD_TMAX=RCD_VMAX BUF="" R="" For(Int i=1; MID(MML, i, 1)!=""; i++) { M=MID(MML, i, 1) IF(DEBUG=1||TEST=1) { Print("Count "+ C + " Str="+M) } IF(M="a"||M="b"||M="c"||M="d"||M="e"||M="f"||M="g") { C++ IF(C<2) { FIRST=ML ML=FM+M FM="" IF(RCD_TMIN>=0 && RCD_TMAX>=0) { VL="v"+Random(RCD_TMIN, RCD_TMAX) RCD_TMIN=RCD_TMIN+RCD_CRESC RCD_TMAX=RCD_TMAX+RCD_CRESC IF(RCD_TMIN<0) { RCD_TMIN=0 } IF(RCD_TMIN>127) { RCD_TMIN=127 } IF(RCD_TMAX<0) { RCD_TMAX=0 } IF(RCD_TMAX>127) { RCD_TMAX=127 } } ELSE { VL="" } ML=VL+ML } ELSE { BUF=BUF+"Sub" + CHR(123)+R+ML+CHR(125) IF(RCD_MAX>0) { R=R+"r"+Random(RCD_MIN, RCD_MAX) } IF(RCD_TMIN>=0 && RCD_TMAX>=0) { VL="v"+Random(RCD_TMIN, RCD_TMAX) RCD_TMIN=RCD_TMIN+RCD_CRESC RCD_TMAX=RCD_TMAX+RCD_CRESC IF(RCD_TMIN<0) { RCD_TMIN=0 } IF(RCD_TMIN>127) { RCD_TMIN=127 } IF(RCD_TMAX<0) { RCD_TMAX=0 } IF(RCD_TMAX>127) { RCD_TMAX=127 } } ELSE { VL="" } ML=VL+M } } ELSE { IF(M="#"||M="+"||M="-") { ML=ML+M } ELSE { IF(C>0) { ML=ML+VL+M } ELSE { FM=FM+VL+M } } } } BUF=BUF+"Sub"+CHR(123)+R+ML+CHR(125)+FIRST+"r" IF(DEBUG=1 || TEST=1) { Print(BUF) } } BUF } Function SRCDINIT(Int MIN, Int MAX, Int VMIN, Int VMAX, Int VDIF) { SRCD_MIN=MIN SRCD_MAX=MAX IF(VMIN<>0 && VMAX<>0) { SRCD_VMIN=VMIN SRCD_VMAX=VMAX SRCD_CRESC=VDIF } ELSE { SRCD_VMIN=-1 SRCD_VMAX=-1 SRCD_CRESC=0 } } Function SRCDR(Int RMIN, Int RMAX) { SRCD_RMIN=RMIN SRCD_RMAX=RMAX } Function SRCDV(Int VMIN, Int VMAX) { SRCD_CRESC=0 IF(VMAX=0) { Int TMPMIN=SRCD_VMIN Int TMPMAX=SRCD_VMAX TMPMIN=TMPMIN+VMIN TMPMAX=TMPMAX+VMIN IF(TMPMIN < 0) { TMPMIN=0 } IF(TMPMIN > 127) { TMPMAX=127 } IF(TMPMAX < 0) { TMPMAX=0 } IF(TMPMAX > 127) { TMPMAX=127 } SRCD_VMIN=TMPMIN SRCD_VMAX=TMPMAX } ELSE { SRCD_VMIN=VMIN SRCD_VMAX=VMAX } } Function SRCD(Str MML) { Str BUF="" Str FIRST="" Str ML="" Str M Str R Str FM Int C=0 Str VL SRCD_TMIN=SRCD_VMIN SRCD_TMAX=SRCD_VMAX IF(SRCD_ENABLE=0) { BUF="'" + MML + "'" } ELSE { BUF="" R="" For(Int i=1; MID(MML, i, 1)!=""; i++) { M=MID(MML, i, 1) IF(DEBUG=1||TEST=1) { Print("Count "+ C + " Str="+M) } IF(M="a"||M="b"||M="c"||M="d"||M="e"||M="f"||M="g") { C++ IF(C<2) { FIRST=ML ML=FM+M FM="" IF(SRCD_TMIN>=0 && SRCD_TMAX>=0) { VL="v"+Random(SRCD_TMIN, SRCD_TMAX) SRCD_TMIN=SRCD_TMIN+SRCD_CRESC SRCD_TMAX=SRCD_TMAX+SRCD_CRESC IF(SRCD_TMIN<0) { SRCD_TMIN=0 } IF(SRCD_TMIN>127) { SRCD_TMIN=127 } IF(SRCD_TMAX<0) { SRCD_TMAX=0 } IF(SRCD_TMAX>127) { SRCD_TMAX=127 } } ELSE { VL="" } ML=VL+ML } ELSE { BUF=BUF+"Sub" + CHR(123)+R+ML+CHR(125) IF(SRCD_MAX>0) { R=R+"r"+Random(SRCD_MIN, SRCD_MAX) } IF(SRCD_TMIN>=0 && SRCD_TMAX>=0) { VL="v"+Random(SRCD_TMIN, SRCD_TMAX) SRCD_TMIN=SRCD_TMIN+SRCD_CRESC SRCD_TMAX=SRCD_TMAX+SRCD_CRESC IF(SRCD_TMIN<0) { SRCD_TMIN=0 } IF(SRCD_TMIN>127) { SRCD_TMIN=127 } IF(SRCD_TMAX<0) { SRCD_TMAX=0 } IF(SRCD_TMAX>127) { SRCD_TMAX=127 } } ELSE { VL="" } ML=VL+M } } ELSE { IF(M="#"||M="+"||M="-") { ML=ML+M } ELSE { IF(C>0) { ML=ML+VL+M } ELSE { FM=FM+VL+M } } } } BUF=BUF+"Sub"+CHR(123)+R+ML+CHR(125)+FIRST+"r" IF(DEBUG=1 || TEST=1) { Print(BUF) } } BUF } Function SROCT(Str MML) { Str BUF="" Str FIRST="" Str ML="" Str M Str R Str FM Int C=0 Str VL MML=MML + ">" + MML + "<" IF(SRCD_ENABLE=0) { BUF="'" + MML + "'" } ELSE { SRCD_TMIN=SRCD_VMIN SRCD_TMAX=SRCD_VMAX BUF="" R="" For(Int i=1; MID(MML, i, 1)!=""; i++) { M=MID(MML, i, 1) IF(DEBUG=1||TEST=1) { Print("Count "+ C + " Str="+M) } IF(M="a"||M="b"||M="c"||M="d"||M="e"||M="f"||M="g") { C++ IF(C<2) { FIRST=ML ML=FM+M FM="" IF(SRCD_TMIN>=0 && SRCD_TMAX>=0) { VL="v"+Random(SRCD_TMIN, SRCD_TMAX) SRCD_TMIN=SRCD_TMIN+SRCD_CRESC SRCD_TMAX=SRCD_TMAX+SRCD_CRESC IF(SRCD_TMIN<0) { SRCD_TMIN=0 } IF(SRCD_TMIN>127) { SRCD_TMIN=127 } IF(SRCD_TMAX<0) { SRCD_TMAX=0 } IF(SRCD_TMAX>127) { SRCD_TMAX=127 } } ELSE { VL="" } ML=VL+ML } ELSE { BUF=BUF+"Sub" + CHR(123)+R+ML+CHR(125) IF(SRCD_MAX>0) { R=R+"r"+Random(SRCD_MIN, SRCD_MAX) } IF(SRCD_TMIN>=0 && SRCD_TMAX>=0) { VL="v"+Random(SRCD_TMIN, SRCD_TMAX) SRCD_TMIN=SRCD_TMIN+SRCD_CRESC SRCD_TMAX=SRCD_TMAX+SRCD_CRESC IF(SRCD_TMIN<0) { SRCD_TMIN=0 } IF(SRCD_TMIN>127) { SRCD_TMIN=127 } IF(SRCD_TMAX<0) { SRCD_TMAX=0 } IF(SRCD_TMAX>127) { SRCD_TMAX=127 } } ELSE { VL="" } ML=VL+M } } ELSE { IF(M="#"||M="+"||M="-") { ML=ML+M } ELSE { IF(C>0) { ML=ML+VL+M } ELSE { FM=FM+VL+M } } } } BUF=BUF+"Sub"+CHR(123)+R+ML+CHR(125)+FIRST+"r" IF(DEBUG=1 || TEST=1) { Print(BUF) } } BUF } IF(TEST=1) { TR(1) Tempo 50 l4 RCDINIT(32,40,80,100,-20) ROCT(c#)ROCT(d#)ROCT(e) RCDINIT(32,40,80,100,-20) l4 RCD(ceg) l8 RCD(<b>fg) l8 RCD(ceg) RCDINIT(96,425,80,100,-10) l4 RCD(ceg) l8 RCD(<b>fg) l8 RCD(ceg) RCDINIT(193,765,80,100,-10) l4 RCD(ceg) l8 RCD(<b>fg) l8 RCD(ceg) RCDINIT(0,0,100,100) l4 RCD(ceg) l8 RCD(<b>fg) l8 RCD(ceg) }