« ギターサークルの練習日 | トップページ | 携帯電話の契約とか機種とか、、 »

2015年6月 1日 (月)

Python メトロノーム Musician の検討5

2015-06-01(月)晴れ

 相変わらず、しつこく、どうでも良いようなことをしています。でも、検討と試作、テストは、概ね完了したような気がします。

 前回は制御方法を簡単にする事を検討しました。もう一つ残っているのは、テンポの正確さの確保です。専用の機械でなく、しかも携帯電話のプログラム制御となると、処理の輻輳などでテンポの正確さが落ちることがあります。音を出さないで画面の点滅だけだと、十分に速いので問題はありません。問題は音を出したときです。

 仕様の40~220拍/分の範囲でみると、一つの音だけを使っているVer3.2では下図のようななります。

Musician07 

(A)の部分はテンポが遅いので処理速度も充分であり、正確に動く範囲
(C)は、前に出した音(サウンドオブジェクト)がビジーなので、Pythonがエラーを
   検知する範囲です。動かないと、はっきり分かります。
(B)が問題で、エラーにはならないが、処理時間が無視できずにテンポが遅くなる範囲です。一見、問題なく動いているようで、実は不正確、、ということです。ただ、音を一つしか使わない場合は(C)のエラー検知範囲が広く、あまり困らないようです。

Musician08

 拍子機能を入れると、「ピ」「カチ」 という2つの音を使います。2拍子だと交互に使うことになります。これは、「Python メトロノーム Musician の検討3」で出てきた、2つのサウンドオブジェクトを交互に使う、裏技的な動きです。交互に使われるので、次の使用までに時間的余裕があり、Pythonがサウンドオブジェクトのビジーを検知できません。エラーにはなりませんが、処理の輻輳などでテンポが遅くなります。図2のように(B)の範囲が、かなり大きくなります。

 そこで、3つの対策ルーチンを入れることにしました。

(1)ビジーエラーを自分で検出する。毎回、両方ののサウンドオブジェクトのビジー状態を自分で調べて、エラー検出を行う。

(2)ハードウエア・クロック(1マイクロ秒で単位で動いている)を使って、音の処理に戻ってくるまでの周期を調べる。何パーセントかずれるのが続いたらエラーにする。(下記(3)の修正が効かないくらいのケース)

(3)周期を決めるタイマのタイマ値を、少し小さめから開始する。ハードウエア・クロックを使って、毎回、正しい周期との差分をみて、徐々に増やして修正し合わせ込んでゆく(概ね4拍くらいで合わせ込みが終わるようにする)。
 合わせて、上下に一定幅を超えてずれたら、少しずつ修正する。

 基本的には(1)の対策で、Ver3.2と同程度にはなりました。また、(3)により、携帯電話によって異なる処理時間の影響を除くことが出来ました。(1)、(3)が効いているので、(2)が検出されることはないようですが、入れたままとします。

 これで何とか、検討と試作、テストは、概ね完了したようです。
 

|

« ギターサークルの練習日 | トップページ | 携帯電話の契約とか機種とか、、 »

Python」カテゴリの記事

アプリケーション」カテゴリの記事

携帯電話」カテゴリの記事

音楽」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/61656940

この記事へのトラックバック一覧です: Python メトロノーム Musician の検討5:

« ギターサークルの練習日 | トップページ | 携帯電話の契約とか機種とか、、 »