DirectSound APIを使用してオーディオデータをレンダリングするコンソールプログラムを作成しています。私は、DirectSound Programming Guide (from Microsoft)に従うときに不思議な問題に遭遇しました。 documentationによると:コンソールプログラムでDirectSound SetCooperativeLevelにHWNDを提供する方法は?
デバイスオブジェクトを作成した後、あなたはIDirectSound8::SetCooperativeLevelメソッドを使用して、デバイスのための協力レベルを設定する必要があります。これを行わないと、音が聞こえません。
問題は私がコンソールプログラムを書いていることです。SetCooperativeLevel
は最初の引数としてHWNDが必要です。私はコンソールプログラムで対処するHWNDを持っていません。私はnullポインタを提供しようとしましたが、エラーコードDSERR_INVALIDPARAM
で失敗しました。
コンソールプログラムでは、どのようなHWND値をIDirectSound8::SetCooperativeLevel
に入力する必要がありますか?プログラムのオーディオ部分は共有ライブラリとして構築される予定であるため、「外部」プログラムの知識はほとんどありません。
アドバイスありがとうございます!
注:私は、SDL、OpenAL、SFML(OpenALベース)を使用するような単純なオーディオのレンダリングには多少良い解決策があることを知っていますが、私の現在のプロジェクトではDirectSoundが強制されています。
編集:私はGLOBAL_FOCUSバッファを作成するときSetCooperativeLevel
ためのHWNDとしてデスクトップウィンドウまたはコンソールウィンドウを使用して疑問を削除し、Microsoftのエンジニアからmessageを見つけました。
あなたが言ったように、入力フォーカスは、オーディオをレンダリングするときに干渉してはなりません。私は 'SetCooperativeLevel'に' GetDesktopWindow() 'によって返されたHWNDを提供することを無邪気にテストしました。しかし、私は隠されたウィンドウハンドルを使用することに比べて何らかの欠点があるかどうかわかりません。 – overcoder
あなたが制御しないHWNDを渡すことは非常に悪い考えのようです。これはおそらくうまくいくでしょう。あなたのコードが日常的に、または「新しい古いもの」で解剖されるまで、それはおそらくうまくいくでしょう。 – snemarch
@overcoder、私は別のプログラムが同じことをすることにしたら何が起こるか心配です。 – bdonlan