none
Vista環境で、サウンドミキサーの制御について RRS feed

  • 質問

  • Windows Vista Ultimate上で、VisualStudio2005(VisualC++ 2005)とWindowsSDKを使用して、サウンドミキサーを制御するアプリを作っています。
    例として、下記の構成のサウンドカードを想定するとします。
     再生
         スピーカー(Realtek High Definition Audio)
         *Realtek HD Audio output(メインボリューム)
            +マイク
            +ライン入力
     録音
            *Front Mic
            *ライン入力

    IMMDeviceEnumeratorから、再生側は、RenderのIMMDeviceCollection、録音側は、CaptureのIMMDeviceCollection、を取得してIMMDeviceCollection->IMMDevice->IAudioEndpointVolumeの順でインターフェイスを取得して、IAudioEndpointVolumeを通してコントロール(ボリューム変更やミュートチェックなど)を行っています。
     しかし、上記の*を付けたものに関しては、IMMDeviceEnumeratorのEnumAudioEndpoints命令でデバイスを列挙させてIMMDeviceCollectionインターフェイスを取得できますが、+を付けたものについては、同様にデバイスを列挙させても検出ができないので、IMMDeviceCollectionインターフェイスを取得することができません。
    +を付けたものに対して、ボリューム変更やミュートチェックを行いたいのですが、どうすれば良いでしょうか?

    2007年1月17日 12:55

すべての返信

  • 再生側にぶらさがっている入力ディバイスの制御は下記インターフェースを使えば実現できます。
     ・IAudioMute Interface
     ・IAudioVolumeLevel Interface
    入力ディバイスのConnectorからIConnector::GetConnectedToを用いて
    上記インターフェースまでたどりつけるはずです。
    あるいは、入力ディバイスと出力ディバイスのシングルパスを
    用いて上記のインターフェースを取得する方法もあります。

    私が調べた限りではEndpointVolume APIでは再生側にぶら下がっている
    入力ディバイスの制御はできませんでした。
    2007年5月8日 2:59