メモ
この前のMDXフォーマットに関して。
と書いてあるけど、「ワード = WORD」ではなくて、
.wはhigh-lowの順で続くワード(奇数番地可)
どうも「符号付2バイト」の値みたい。
(detune65000overとか、リピート終端で65530バイト後に移動とかありえん(汗))
後、この仕様より、演奏データ65536どころか、32768バイト超えとかはありえない…?
・[???]の所は内容不詳…という所なんだろうけど、
上記に注意すれば、detuneはそのまんまでOK。
…でも、tempoの値はどうもそのまんまtempoに直結するわけではなく、
調べた所によると、「OPMの制御timer」の値がそのまま入ってくるらしい…。
しかも、制御timerは二つあって*1そのうちtimerBの方だとか(汗)
…で、現在、その値から「BPM」か「1frameあたりの時間*2」を計算できないかいろいろ調べ中。
--- 追記(08/12/08 0:34)
と、思ったら、ゴニョゴニョなソースを読んでたら、
ドンピシャで1クロックあたりの時間が出せましたよ。
実際はさらにx1000してμs単位になってますが。
// 「t」がmdxから拾える値
clock_time(ms) = 1024 * (256 - t) / 4000;
で、
こんな感じにしてやれば、BPM(=一般的なテンポ)が取得できますよと。
/*
timebase = 192 / 4; // 08/12/15 0:07修正
// (全音符 / 192)ベースなので、
// (4分 / 192)ベースに変換
*/
tempo = 60000.0 / timebase / (double)(clock_time(ms));