メモ

 この前のMDXフォーマットに関して。


.wはhigh-lowの順で続くワード(奇数番地可)
と書いてあるけど、「ワード = WORD」ではなくて、

どうも「符号付2バイト」の値みたい。

(detune65000overとか、リピート終端で65530バイト後に移動とかありえん(汗))

 後、この仕様より、演奏データ65536どころか、32768バイト超えとかはありえない…?



・[???]の所は内容不詳…という所なんだろうけど、

上記に注意すれば、detuneはそのまんまでOK。

…でも、tempoの値はどうもそのまんまtempoに直結するわけではなく、

調べた所によると、「OPMの制御timer」の値がそのまま入ってくるらしい…。

しかも、制御timerは二つあって*1そのうちtimerBの方だとか(汗)

…で、現在、その値から「BPM」か「1frameあたりの時間*2」を計算できないかいろいろ調べ中。





 --- 追記(08/12/08 0:34)

 と、思ったら、ゴニョゴニョなソースを読んでたら、

ドンピシャで1クロックあたりの時間が出せましたよ。


// 「t」がmdxから拾える値
clock_time(ms) = 1024 * (256 - t) / 4000;
実際はさらにx1000してμs単位になってますが。

 で、

/*
timebase = 192 / 4; // 08/12/15 0:07修正
// (全音符 / 192)ベースなので、
// (4分 / 192)ベースに変換
*/

tempo = 60000.0 / timebase / (double)(clock_time(ms));
こんな感じにしてやれば、BPM(=一般的なテンポ)が取得できますよと。




*1:分解能というか、精度が違うらしい

*2:今回の場合だと、192分音符の時間