したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

おちゃめくらぶ掲示板

1831御茶目菜子:2013/12/22(日) 01:17:26
レスにょ
チラシ裏次郎さんへ
>ハードの割り込みの仕様か何かですかね(適当) MMLの変数設定も
>それに合わせて1/192秒単位でなされてるかも知れませんが
>マニュアルに注釈のある通り「BGMGETV」は1/60秒単位ですよね
>確かタッチ座標とかも1/60秒でしたか
>内部でプチコン用に数値を転送なり保管を1/60秒毎にしてて
>それを参照してる感じでしょうかね

処理に依存しないで常に一定サイクルで行うためには何らかの方法で割り込み処理を行う
必要があるにょ。
例えばシャープのポケコンPC-E500シリーズでは4m秒もしくは16m秒単位で割り込み処理を
可能にしているにょ。(このfastタイマ割り込みとは別に0.5秒もしくは2秒単位のslow
タイマ割り込みがある)
キーに対する割り込み処理があるからこそBREAKボタン(停止ボタン)1つで実行中に一時
停止が可能になるにょ。
ちなみにBUTTTON関数やタッチパネルのシステム変数はVSYNCの1/60秒単位のタイマーと
完全に同期していることは確認済みにょ。(ただし、タッチの方は1フレーム遅れで反映
されている)
マニュアルでBGMGETVは1/60秒単位で取得可能と書かれているので普通に考えたらMAINCNTL
と同期しているのだろうと思っていたけど試しにVSYNC 1を省いて動作チェックを行った
ところ同期をしてないことが分かったにょ。

>またGCLSの例はすごいですね!
>処理落ちですか〜... なるほど〜... はへ〜...

スリープ時間取得ルーチンの動作テスト用にMAINCNTLとTIME$の同期具合を確かめていたら
スリープ復帰直後はMAINCNTLが1カウントずつ増えていないことがあったためにょ。
それでどういう場合に2カウント増加するかを確かめたら昨日書いたような復帰直後の微妙な
処理落ちによって発生していることが分かったにょ。

>ただ、MMLの変数を使った時には、これ、必ず反応してたんですよね
>約1/60秒毎に変数を変えてるという点では違いは少ないはずなのに
>プログラムリストの実行には小さな負荷でも
>MMLの演奏には何かしら違う負荷になっているのかも

上記の実験によってあくまで動作保証をするために1/60秒単位とマニュアルに書いている
だけで実際はそれよりずっと高精度で取得していると思われるにょ。
約1/120秒単位でもちゃんと取得できたにょ。
これが約1/180秒単位にしたら取得できなくなることが多くなり、1/192秒単位、約1/270秒
単位にしたらまともに取得ができなくなったにょ。
実際にどれだけ取得できるかを検証してみたところ1000フレームあたりで4260回前後取得
可能だったにょ。
これから逆算するとBGMGETVは1/256秒単位くらいで取得していると推測できるにょ。

>というのがMMLを使用してスリープを検出する方法の
>良いところだと思うんですが自分は音楽にも詳しくないし
>平時には乱れなく周期を刻めるように工夫する方法からして分からない

BGMGETVの取得周期が分かればそこから時間を求めることが可能になるにょ。
といっても、あのサンプルプログラムではMAINCNTLとのずれがどの程度あるかということ
くらいしか分からないにょ。(何もしなくても乱れることがあるのは音叉による共鳴みたいに
ごくわずかな周期差があるため)
MAINCNTL無しで時間を取得するためにはBGMSETVと組み合わせてタイマーを作らなくては
いけないにょ。
ただし、BGMSETVの方は反映に1フレームかかってしまうため結局1フレーム単位のタイマー
しか作れなかったにょ。




掲示板管理者へ連絡 無料レンタル掲示板