none
Windowsの音量(ミキサー)を制御したい RRS feed

  • 質問

  • C++でプログラムしています。

    スピーカーのミュートと解除をプログラムで行おうとしています。

    XPでMIXERCONTROLDETAILSというのでミュートの状態を取得できました。

    MIXERCONTROLDETAILS test;
    test.paDetails = &mute;
    muteId = mute.dwControlID;

    同じプログラムをWindows7で実行したところ、ミュートの状態が取得
    できませんでした。

    XPと7では取得方法(関数)が異なるのでしょうか?

     

    2011年10月13日 13:54

回答

  • Vista 以降、オーディオ関連の API は変更されてますね。

    http://www.codeguru.com/forum/showthread.php?t=418069

    わかりやすいサンプルコードがありました。その他の詳しいことは適当にインターフェイス名で検索してみてください。

    2011年10月13日 22:21
  • こんな感じで取得できます。
    mutedが1の時mute状態になってます。


    HRESULT hr;
    HRESULT mute;
    BOOL muted = false;

    CoInitialize(NULL);
    IMMDeviceEnumerator *deviceEnumerator = NULL;
    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
    IMMDevice *defaultDevice = NULL;

    hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
    deviceEnumerator->Release();
    deviceEnumerator = NULL;

    IAudioEndpointVolume *endpointVolume = NULL;
    hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
    defaultDevice->Release();
    defaultDevice = NULL;

    mute = endpointVolume->GetMute( &muted );

    //endpointVolume->SetMute(TRUE, NULL);

    endpointVolume->Release();

    CoUninitialize();

    2011年10月14日 4:04

すべての返信

  • Vista 以降、オーディオ関連の API は変更されてますね。

    http://www.codeguru.com/forum/showthread.php?t=418069

    わかりやすいサンプルコードがありました。その他の詳しいことは適当にインターフェイス名で検索してみてください。

    2011年10月13日 22:21
  • こんな感じで取得できます。
    mutedが1の時mute状態になってます。


    HRESULT hr;
    HRESULT mute;
    BOOL muted = false;

    CoInitialize(NULL);
    IMMDeviceEnumerator *deviceEnumerator = NULL;
    hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
    IMMDevice *defaultDevice = NULL;

    hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
    deviceEnumerator->Release();
    deviceEnumerator = NULL;

    IAudioEndpointVolume *endpointVolume = NULL;
    hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
    defaultDevice->Release();
    defaultDevice = NULL;

    mute = endpointVolume->GetMute( &muted );

    //endpointVolume->SetMute(TRUE, NULL);

    endpointVolume->Release();

    CoUninitialize();

    2011年10月14日 4:04
  • こんにちは、坂本一 さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
    しばらく経ちましたが、みなさんからのアドバイスは確認されましたか?

    みなさんから参考になる情報をいただいているかと思われましたので、勝手ながら私のほうで回答としてマークさせていただきました。
    Hongliang さん、りな さん、情報ありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたしますね。

    坂本一 さん、不明点などがある場合には詳細を投稿してご質問を続けてくださいね。

    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                                                                 
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年10月31日 7:11
    モデレータ