MIDIのデバイスに"一切"手をつけず、他のソフトとか、(もしくはプログラムミスで)で
開かれているかを判断するにはどんなAPIがあるでしょうか?
意図がわからないのですが・・・。
一切手をつけなければ、わかるはずがないのでは?
自アプリであれば、MIDIデバイスを開いたときに
フラグを立てれば捕捉はてきますが
プログラムミス等は不可能ですし。
何か理由があれば、他の回避方法を
誰かが提案してくれるかもしれませんよ。
他のMIDIプレイヤーがMIDIデバイスを使ってるか、判別したいんです。
でもだからといって、こちらで一旦開いてすぐに閉じようとすると、エラーが起こっちゃう。
(midioutopen→midioutclose)
どうやら横取り(他のプレイヤーがMIDIデバイスを手放した直後にデバイスをとるという、まあ…)はできるようですけど。
それに、MIDI関連は下手をすると、強制終了がつきまといます。
その辺はしっかりしておきたいですから。
それに、何だかmci関連と、midiout関連は、ほとんど同じ場所にあるけど、違う…?
プログラムミスは冗談です^^;まあ、ないと思います。
> こちらで一旦開いてすぐに閉じようとすると
> エラーが起こっちゃう。
エラーとは何なんでしょう?
他のアプリが開いていれば、オープンで失敗するので
そこで、使用中(再生中かは知らないけど)と判別できますよね?
> 他のプレイヤーがMIDIデバイスを手放した直後に
> デバイスをとるという
横取りした瞬間に、他のプレイヤーが確保できない時の処理を
行っていないためにエラーが発生するということでしょうか?
> MIDI関連は下手をすると、強制終了がつきまといます。
まぁ、強制終了はMIDIに限ったことではありませんが
MIDIで失敗すると、OSが死んだり、MIDIデバイスが
再起動しないと使用できなくなったりと色々重大な問題が
多々発生はしますよね。
mci関連midiout関連は違いますね。
midiOutの上位にmciが存在します。
mciはmidiの他にwaveやavi等、いわゆるマルチメディア系の
低レベルAPIを内部でゴリゴリ呼び出してます。
んで、自信は簡単なインターフェースを提供する
高レベルAPIってわけです、はい。
>エラーとは何なんでしょう?
>他のアプリが開いていれば、オープンで失敗するので
>そこで、使用中(再生中かは知らないけど)と判別できますよね?
エラー…じゃなくて強制終了ですね^^;
あまりにも頻繁に起こるもので…。
こういうのはたまに、数ミリ秒ほどウェイトをかけると治ったりしますけどね。
>横取りした瞬間に、他のプレイヤーが確保できない時の処理を
>行っていないためにエラーが発生するということでしょうか?
これは単純におもしろ現象だと思います^^;
ブラウザでもなんでもすることなので。
>まぁ、強制終了はMIDIに限ったことではありませんが
>MIDIで失敗すると、OSが死んだり、MIDIデバイスが
>再起動しないと使用できなくなったりと色々重大な問題が
>多々発生はしますよね。
そもそもデバイスを操ること自体がちょっと危険なんですよね。
VBの中では、VBを終了すれば、デバイスは戻るけど…。
DirectMusicでは…。強制終了ばっかり。
もうOS自体に無理が出てるかも…。ずいぶん前のだし。
>mci関連midiout関連は違いますね。
DLLからDLLを呼び出すんですね。(同じ所だったかな…?)
mci "open 〜〜"は、MIDIデバイスが開いてようとなんだろうとできるし。
(うちではmciSendStringをmciと宣言してるんです^^;書くのメンドウだし)
ツイート | ![]() |