このプログラムでは再生位置をMMLで一番短い音符の192分音符(これを1tickとします)の数で求めますが、仕様上どうやっても1tickはズレがでます。そのため2tick以上ズレた場合をエラーとして検出しています(FIRST_ERRが最初にエラーが発生した時間、RECENT_ERRは最近発生した時間) そもそも1tickは大体のテンポで1フレームの長さより短いですし(テンポ120で約10.4msec、1フレームは約16.7msec)、仕様上フレーム単位でしかボタン判定できないし1tickの程度の誤差は気にしない!:p 一応新/旧3DS・BPM240 で1時間くらい2tick以上のズレは発生してません。もっと長くても多分大丈夫。