凪といいます。遅ればせながら正攻法での解です。、
//-------
Function GetTime{
Int CT=Time;
Array TT=();
TT(0) = (Time(3:1:0)-Time(2:1:0)) / (Time(2:2:0)-Time(2:1:0));
TT(1) = TimeBase*4 / ((Time(3:1:0)-Time(2:1:0)) / TT(0));
RESULT=TT;
Time(CT); //Time書きもどし
} //Func
System.MeasureShift=0
TimeBase=98
TimeSignature=(15,7)
l7 ccccc ccccc ccccc
//TimeSignature=(15,8)
//l8 ccccc ccccc ccccc
Print(GetTime());
PrintTime;
//------
Twitter / sparkkamakiri様 10月1日より、この解へ至る方法論を提示されていたので、
これを元に一部改編しました。、本職のひとは一味ちがうな、、と思います。
変更点...
System.MeasureShiftへ対応しました。
分母数を出力してます。
Twitterアカウントの持ちあわせはなく連絡不可のため、またメールの要件ほどでもないと判断しまして、こちらに直接記入する運びとなりましたが、sparkkamakiri様に於いては、事後承諾ということでよろしいでしょうか?、、
問題があれば、修正するなり、取り下げるなど迅速にいたします。
それと確認していて、気になった点がありました、出力値と表示が一致しない点です。
[4,8,16]などの通常の数字では、演奏モニターへの出力と、PrintTimeの出力は一致しますが、、
それ以外の[12]などの分母数字は、何故か切り上げているみたいです。
つまり、5/12のような拍子であれば、演奏モニターは、5/16での時間表示になってずれます。
ただし、PrintTime側ではあってます、、表示がうまくいっていない気がします。
参考として、15/7は、15/8での時間表示になっていました。
それと、これは蛇足かもしれませんが...過去の質問掲示板でも変拍子の件で話題に上がっていたようなので、、
TimeSignature命令の、扱いの難しさの仕組みを解いてみました。
http://oto.chu.jp/cgi/sakura-q/cbbs.cgi?mode=al2&namber=13232&rev=&no=0
http://oto.chu.jp/cgi/sakura-q/srch.cgi?no=0&word=%95%CF%94%8F%8Eq&andor=and&logs=all&KYO=1&PAGE=20
TimeSignature命令によって変更される時間表示は、単純に現在のタイム値から、割り出しているようなので、
もしTimeSignatureが上書きされると、記述されたポイントから合算するのではなく、
最初から全て計算し直しするので、見慣れない数値が表示され、混乱に陥るのではないかと考えています。
TimeBase=96として、3/4拍子の場合、Track(0);Time(2:1:0);//=288(PrintTime)
拍子を、12/8拍子で書き換えた瞬間、Track(0);Time(1:7:0);//=288(PrintTime)
//-------
TimeBase=96;
TimeSignature=(3,4)
l4 ccc
PrintTime; //Time値 288 -> Time(2:1:0);
TimeSignature=(12,8);
PrintTime; //Time値は同じ 288 ->Time(1:7:0);
l8 cccc cccc cccc
//-------
タイム値を加算しない状態として、このポイントで拍子だけを変更すると、
単純に現在の小節表示が変更され、l4ccc -> l8ccc ccc 分移動したTime(1:7:0);という表示に変化します。