Core Audio APIs 控制音量

   Core Audio API关于音量控制方面的函数主要有:

   ·ISimpleAudioVolume

   ·IChannelAudioVolume

   ·IAudioStreamVolume

   ·IAdudioEndpointVolume

   其中,前三种适用于共享模式,第四种可用于独占模式,也可用于共享模式。前面三种API的用法很相似,在此只介绍IChannelAudioVolume的用法,下面直接上代码:

 hr = CoCreateInstance(
           CLSID_MMDeviceEnumerator, NULL,
           CLSCTX_ALL, IID_IMMDeviceEnumerator,
           (void**)&pEnumerator);
    EXIT_ON_ERROR(hr)

    hr = pEnumerator->GetDefaultAudioEndpoint(
                        eCapture, eConsole, &pDevice);
    EXIT_ON_ERROR(hr);
    hr = pDevice->Activate(
                    IID_IAudioClient, CLSCTX_ALL,
                    NULL, (void**)&pAudioClient);
    EXIT_ON_ERROR(hr)

    hr = pAudioClient->GetMixFormat(&pwfx);
    EXIT_ON_ERROR(hr)
    hr = pAudioClient->Initialize(
                         AUDCLNT_SHAREMODE_SHARED,
                         0,
                         hnsRequestedDuration,
                         0,
                         pwfx,
                         NULL);
    EXIT_ON_ERROR(hr)

    hr = pAudioClient->GetBufferSize(&bufferFrameCount);
    EXIT_ON_ERROR(hr)
    hr = pAudioClient->GetService(
                         IID_IAudioCaptureClient,
                         (void**)&pCaptureClient);
  
//前面的代码不解释,下面是创建一个音量控制的指针,获取接口,设置音量,很简单吧

IChannelAudioVolume *   _IChannelAudioVolume;
hr = pAudioClient->GetService(IID_IChannelAudioVolume,(void**)&_IChannelAudioVolume);

float volume[2] = {1.0,1.0};
_IChannelAudioVolume->SetAllVolumes(2,volume,NULL);

    关于IAUDIOEndpointVolume的用法,略显复杂,不过官网给出了详细的参考代码,大家可自行去查看,

 

              https://msdn.microsoft.com/en-us/library/dd370839(v=vs.85).aspx

 

具体思路是:

  • 自定义一个回调类(从IAudioEndPointVolumeCallback派生,重写相应的一些函数)
  • 定义IAudioEndpointVolume指针,并获取相应的接口
  • 注册回调(主要是为了客户端程序在获悉音量变化时,做出相应的处理,比如调节音量滑动条等待)。

 

参考:

https://www.yuque.com/docs/share/505a97a0-89d7-4c80-993a-0bc3b5a367ec

你可能感兴趣的:(windows,音频)