« Python メトロノーム Musician の検討1 | トップページ | Python メトロノーム Musician の検討3 »

2015年5月18日 (月)

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

2015-05-18(月)曇り、いちじ少し晴れ

 昨日の記事の検討課題の(1)、機種により速度(1分あたりの拍の数)が異なる件の検討です。スクリプト「Musician」のメトロノーム機能のコーディングをみて、図式化してみました。

Musician01

 元々の処理は上図の通り、(A)の部分の処理(カチっという音の処理や画面の点滅の処理)と、タイマによる時間待ち(B)が直列になっています。
 (B)の、タイマによる時間待ちはスクリプトの処理というより、ハードウエアか悪くてもOSより下の処理で、時間は比較的正確です。この長さを変えて、拍の速度を変えているわけです((A)プラス(B)が、周期になる)。

 しかし、(A)の部分の処理時間が、機種によりかなり違います(注1)。だから、元々のものでは、機種毎にタイマ値を調整したモジュールを作成する必要がありました。実際、3機種用のモジュールを作成しましたが面倒です。

注1:機種の違いを見るため、(B)をゼロにして、どの位の速度が出るかテストしてみました。
 ・X02NK(N95) 200回/分
 ・E52      140回/分
 ・6120Classic  75回/分
大分、違うことが分かりました。

 そこで、処理を変えることにしました。

Musician02

 タイマは起動してしまえば、タイムアウトまでは何もすることはありません。ですから、タイマを起動した後に(A)の処理を行います。タイムアウトしたらループさせるわけです。(B)の時間は正確だから、拍の速度も正確になります。
 (A)は機種により異なりますが、機種の中では大きな変動はありませんから、(A)部分を起動する周期が一定なら、拍も安定します。

 あと、図2の方式では、追随できない速度の場合エラー検知が出来るという利点があります。図1の方式では、(A)が指定された拍の速度のループ周期より大きくなるケースでも、正常のごとく動きます。ただループ周期が、必要値より長くなり、実際の拍が遅くなっています。
 図2では、まだ(A)の処理中にタイムアウトが来ると、オーディオ起動がダブるため、エラー検知が出来ます。だから、実際は遅いのに動いているように見える、、というのはなくなります。

 ということで、図2の処理になるよう、処理を大きく変更しました。
次回は、実際に動いたモジュールの画面です。(まだ、変更が進んでいる途中ですが、、。)

|

« Python メトロノーム Musician の検討1 | トップページ | Python メトロノーム Musician の検討3 »

Python」カテゴリの記事

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

電子機器、電子機器小物」カテゴリの記事

音楽」カテゴリの記事

コメント

コメントを書く



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




トラックバック

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

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

« Python メトロノーム Musician の検討1 | トップページ | Python メトロノーム Musician の検討3 »