ビーエム・エスパーザ(必殺技)
BMX2WAV v2の#RANDOM
–#ENDRANDOM
は、たぶん変数のblock scopeとして理解できる。
#title flow test
#bpm 60
#wav11 01.wav
#wav22 02.wav
#wav44 04.wav
#wav66 06.wav
#wav88 08.wav
#wav99 09.wav
#wavbb 11.wav
#00111:1100000000000000
#random 2
#00112:0022000000000000
#if 1
#wav33 03.wav
#00113:0000330000000000
#endif
#00114:0000004400000000
#random 2
#if 1
#wavcc 12.wav
#00213:000000cc00000000
#endif
#if 2
#wavdd 13.wav
#00214:00000000dd000000
#endif
#endrandom
#if 2
#wav55 05.wav
#00115:0000000055000000
#endif
#00122:0000000000660000
#if 1
#wav77 07.wav
#00123:0000000000007700
#endif
#00124:0000000000000088
#endrandom
#00225:9900000000000000
#if 2
#wavaa 10.wav
#00211:00aa000000000000
#endif
#00212:0000bb0000000000
title = "flow test";
bpm = 60;
wav["11"] = "01.wav";
wav["22"] = "02.wav";
wav["44"] = "04.wav";
wav["66"] = "06.wav";
wav["88"] = "08.wav";
wav["99"] = "09.wav";
wav["BB"] = "11.wav";
data["001"]["11"] = ["11",,,,,,,];
{
let value = getRandomInteger(1, 2);
data["001"]["12"] = [,"22",,,,,,];
if (value === 1) {
wav["33"] = "03.wav";
data["001"]["13"] = [,,"33",,,,,];
}
data["001"]["14"] = [,,,"44",,,,];
{
let value = getRandomInteger(1, 2);
if (value === 1) {
wav["CC"] = "12.wav";
data["002"]["13"] = [,,,"CC",,,,];
}
if (value === 2) {
wav["DD"] = "13.wav";
data["002"]["14"] = [,,,,"DD",,,];
}
} // end of inner let scope
if (value === 2) {
wav["55"] = "05.wav";
data["001"]["15"] = [,,,,"55",,,];
}
data["001"]["22"] = [,,,,,"66",,];
if (value === 1) {
wav["77"] = "07.wav";
data["001"]["23"] = [,,,,,,"77",];
}
data["001"]["24"] = [,,,,,,,"88"];
} // end of outer let scope
data["002"]["25"] = ["99",,,,,,,];
if (value === 2) { // undefined global value
wav["AA"] = "10.wav";
data["002"]["11"] = [,"AA",,,,,,];
}
data["002"]["12"] = [,,"BB",,,,,];
Scopeの外のcode blockは、少なくともBMX2WAV上では(分岐指定時に明示的にcheckしない限り)演奏されない。この日記を書いているうちに書式違反に寛容になれそうな方法を思いついた! 寝る。