2009-04-04 3 views
0

私は、ロードされたコードによって引き起こされるボリュームの変更のためにデフォルトのオーディオセッションを監視するという目的で、VistaのCoreAudio、特にIAudionSessionEventsを使って遊んできました。SndVolが空のオーディオセッションを表示しないようにすることはできますか?

ただし、IAudioSessionEventsリスナーをインストールするとすぐに表示されます。SndVolは、関連するすべての音量コントロールでプログラムを一覧表示します。実際に何かを演奏するコードはロードされていないので、理想的ではありません。

基本的に、SndVolにそれをリストさせずにデフォルトのオーディオセッションを監視する方法はありますか?

Vista用のソリューションが推奨されますが、Windows 7で提供される新しいAPIに依存するものは何もありません。


ラリー・オスターマンしかし、私は新しいセッションの通知を受けたことがないのWindows 7で追加さISessionManager2とIAudioSessionNotificationインターフェースを指摘しました。誰でもWindows 7ビルド7000でこのAPIの問題や問題を認識していますか?

コード*エラーチェックの多くを省略IAudioSessionNotificationsを登録コード、:

BOOL success = false; 
HRESULT hr; 
IMMDeviceEnumerator *pEnumerator = NULL; 
IMMDevice *pDevice = NULL; 
IAudioSessionManager2* pManager = NULL; 
IClassFactory* pFactory = NULL; 

hr = CoInitialize(NULL); 

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pEnumerator); 

hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice); 

pDevice->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void**)&pManager); 

listener = NULL; 

hr = CoGetClassObject(CLSID_CustomFactory, CLSCTX_ALL, NULL, __uuidof(IClassFactory), (void**)&pFactory); 

hr = pFactory->CreateInstance(NULL, __uuidof(IAudioSessionNotification), (void**)&listener); 

hr = pManager->RegisterSessionNotification(listener); 

は*この質問の目的ではありませんが、私のCOMコードの建設的な批評は歓迎です。

答えて

1

オーディオセッションの内容を監視する場合は、IAudioSessionManagerインターフェイスを使用してIAudioSessionControlオブジェクトを取得する必要があります。あなたがIAudioClientを呼び出さない限り、誰かがIAudioClient :: Start()を呼び出したときに起こる、セッションがアクティブでない状態からアクティブな状態に遷移するとき、セッションはSndVolにのみ現れます::セッションを開始しないでくださいスライダー。

Windows 7には、セッションの作成と破棄をリッスンできる新しいAPIセット(IAudioSessionManager2)があります。 [スタート]()、まだセッション:

はまた、Windows 7のために、AUDCLNT_SESSIONFLAGS_HIDEフラグが(これに関するドキュメントはまだ更新されていないが、それはヘッダにあります)

+0

私は最も確かにIAudioClientを呼び出していないよありSndVolに現れます。 IAudioSessionControl :: RegisterAudioSessionNotification(...)を介してイベントハンドラをインストールすると、セッションがアクティブになります。少なくともWindows 7では7000をビルドします。 –

+0

IAudioSessionManager2 :: RegisterSessionNotification()は機能していないようです。私はインストールプロセスを含め、どのプロセスからでも新しいセッションの通知を受けません。あなたはこれについて何か知っていますか? Windows 7ビルド7000で動作します。 –

+0

なぜ動作しないのか分かりません。これはsndvolが内部で使用するのと同じメカニズムです。私たちはAPIを公開しました。 –

関連する問題