vs. 33 %
#TITLE 1/3
#BPM 120
#wav01 kick.wav
#00102:0.3333333333333333
#00111:010101
#00202:0.3333333333333333
#00211:010101
#00302:0.3333333333333333
#00311:010101
#00411:010101010101010101
#TITLE 33 %
#BPM 120
#wav01 kick.wav
#00102:0.33
#00111:010101
#00202:0.33
#00211:010101
#00302:0.33
#00311:010101
#00411:010101010101010101
前述のBMS二例の差異が顕著に現れるBMX2WAVのlogによれば、前者は「分解能: 18」、後者は「分解能: 900」です。解釈の違いは、たとえばBMSONへの変換時などに影響を及ぼすでしょう。
人間可読な値“1/3
”として小節長を解釈した場合の、最小のBMSON。
{
"version": "1.0.0",
"info": {
"title": "1/3",
"init_bpm": 120,
"resolution": 9
},
"lines": [
{"y": 36},
{"y": 48},
{"y": 60},
{"y": 72},
{"y": 108}
],
"sound_channels": [
{
"name": "kick.wav",
"notes": [
{"x": 1, "y": 36},
{"x": 1, "y": 40},
{"x": 1, "y": 44},
{"x": 1, "y": 48},
{"x": 1, "y": 52},
{"x": 1, "y": 56},
{"x": 1, "y": 60},
{"x": 1, "y": 64},
{"x": 1, "y": 68},
{"x": 1, "y": 72},
{"x": 1, "y": 76},
{"x": 1, "y": 80},
{"x": 1, "y": 84},
{"x": 1, "y": 88},
{"x": 1, "y": 92},
{"x": 1, "y": 96},
{"x": 1, "y": 100},
{"x": 1, "y": 104}
]
}
]
}
前述のBMSONを、BmsONE以外のBMSON実装にも解釈できるように修正した版。
{
"version": "1.0.0",
"info": {
"title": "1/3",
"init_bpm": 120,
"resolution": 360
},
"lines": [
{"y": 0},
{"y": 1440},
{"y": 1920},
{"y": 2400},
{"y": 2880},
{"y": 4320}
],
"sound_channels": [
{
"name": "kick.wav",
"notes": [
{"c": false, "l": 0, "x": 1, "y": 1440},
{"c": false, "l": 0, "x": 1, "y": 1600},
{"c": false, "l": 0, "x": 1, "y": 1760},
{"c": false, "l": 0, "x": 1, "y": 1920},
{"c": false, "l": 0, "x": 1, "y": 2080},
{"c": false, "l": 0, "x": 1, "y": 2240},
{"c": false, "l": 0, "x": 1, "y": 2400},
{"c": false, "l": 0, "x": 1, "y": 2560},
{"c": false, "l": 0, "x": 1, "y": 2720},
{"c": false, "l": 0, "x": 1, "y": 2880},
{"c": false, "l": 0, "x": 1, "y": 3040},
{"c": false, "l": 0, "x": 1, "y": 3200},
{"c": false, "l": 0, "x": 1, "y": 3360},
{"c": false, "l": 0, "x": 1, "y": 3520},
{"c": false, "l": 0, "x": 1, "y": 3680},
{"c": false, "l": 0, "x": 1, "y": 3840},
{"c": false, "l": 0, "x": 1, "y": 4000},
{"c": false, "l": 0, "x": 1, "y": 4160}
]
}
]
}
「『4/4拍子小節の三等分の長さ』を三等分するrhythm」を、精密に等間隔となる座標へ換算した例が、前述のBMSON codesです。一方、百分率として解釈した結果は以下のようになるでしょう。
小節長0.33
を字義通りに解釈した場合の、最小のBMSON。
{
"version": "1.0.0",
"info": {
"title": "33 %",
"init_bpm": 120,
"resolution": 225
},
"lines": [
{"y": 900},
{"y": 1197},
{"y": 1494},
{"y": 1791},
{"y": 2691}
],
"sound_channels": [
{
"name": "kick.wav",
"notes": [
{"x": 1, "y": 900},
{"x": 1, "y": 999},
{"x": 1, "y": 1098},
{"x": 1, "y": 1197},
{"x": 1, "y": 1296},
{"x": 1, "y": 1395},
{"x": 1, "y": 1494},
{"x": 1, "y": 1593},
{"x": 1, "y": 1692},
{"x": 1, "y": 1791},
{"x": 1, "y": 1891},
{"x": 1, "y": 1991},
{"x": 1, "y": 2091},
{"x": 1, "y": 2191},
{"x": 1, "y": 2291},
{"x": 1, "y": 2391},
{"x": 1, "y": 2491},
{"x": 1, "y": 2591}
]
}
]
}
元々のBMSの小節長合計が2.99
(暗黙の小節長として、#00002:1
および#00402:1
が加算される)なので、変換後の座標にも「4/4拍子小節における1小節の長さ」の1 %
に相当する不足が反映されます。#BPM 120
における小節長0.01
は、時間に換算すると0.02
秒に相当します。つまり、計算上は解釈よりも0.02
秒ほど再生時間が短くなります。
小節長の値として0.33
が与えられたとき、これをと解釈するべきなのか、はたまた33 %
とみなすべきなのか、構文解析器だけでは判断しきれないように思います。これを解決する方法を考えていますが、私の頭では変換器に挙動制御用optionsを用意する程度の発想しか出せていません。