• ベストアンサー

メトロノームが一定のリズムで鳴ってくれない

こんにちは、VBのプログラミングについて教えて下さい。 VBでメトロノームみたいなプログラムを作ろうと思い、タイマーコントロールを使って一定の間隔でWAVを鳴らすプログラムを作りました。とりあえず完成し、それなりに動くのですが、実行中に他のアプリケーションを操作すると一瞬リズムが乱れてしまいます・・・。 出来れば他のアプリケーションを操作しても、リズムが乱れないようにしたいのですが、どのような手法がありますでしょうか? どうぞ宜しくお願いします!

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.3

MMTimerに対して補足しておきます。 「Intervalプロパティに 55 以下を指定すると、正確なイベントを発生できません。」 と書かれていましたが、55というのはマシンスペックなどの環境に左右されますし 1000と設定しても実際は徐々にずれていきます。 そもそもタイマーイベント(タイマーコントロールの発生するイベント)というのは 時間を測る為のものではなく定期的に実行する為のイベントです。 通常Windowsで時間を測るにはGetTickCount()APIを使用します。 ゲームプログラミング的な手法ですが、 Timerイベントは1ms毎に実行するように設定しておき そこでGetTickCount()APIで監視すればどうでしょうか。

Elvin
質問者

お礼

ご回答ありがとうございました。GetTickCount()APIを使うような手法もあるんですね。複数のイベントを実行する場合に使えそうです(複数の音を違うタイミングで鳴らすような場合)。大変参考になりました!どうもありがとうございます!!

その他の回答 (2)

回答No.2

プロセスの優先度は,WindowsAPIでできます. ↓(参考) http://tokyo.cool.ne.jp/kanain/APIHTM/Propri.html 加えて,タイマーにMMTimerを使えば,ほぼずれないと思います. ↓ http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/chtml/chtml.cgi?key=mmtimer

Elvin
質問者

お礼

参考URLありがとうございます!早速参考にしてプログラムを修正してみようと思います。どうもありがとうございました!!

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.1

 貴方のOSが判らないのですが。 Win2K等の場合、Ctrl+Alt+Deleteで、タスクマネージャーを起動し、「プロセス」タブの中で当該のプログラムを右クリックし、その中の「優先度の設定」で、優先度を上げてみて、如何でしょう。

Elvin
質問者

お礼

ご回答ありがとうございます!OSはWIN2Kを使ってます。タスクマネージャの「優先度の設定」は知りませんでした。大変参考になりました。どうもありがとうございます!早速優先度を「高」に設定してテストしてみました。今までのように頻繁にリズムがずれることは無くなりましたが、たまに若干ずれる時があります。さらに優先度が高い「リアルタイム」も試してみたいと思います。どうもありがとうございました。

関連するQ&A