Начиная с Windows 7, существующие API были улучшены, и были добавлены новые API для поддержки нового сценария ios. API управления потоками и сеансами были улучшены, так что теперь приложение может перечислять и получать расширенный контроль над аудио сеансом. Используя новые API-интерфейсы, приложение может реализовывать пользовательские функции ослабления потока. Новые API, относящиеся к устройствам, предоставляют доступ к свойствам драйверов устройств конечных точек.
См .: API Core Audio
Вот простая демонстрационная версия для справки:
#include <Windows.h>
#include <stdio.h>
#include <mmeapi.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <audioclient.h>
#pragma comment(lib,"Winmm.lib")
bool GetVolumeLevel()
{
HRESULT hr;
IMMDeviceEnumerator* pDeviceEnumerator = 0;
IMMDevice* pDevice = 0;
IAudioEndpointVolume* pAudioEndpointVolume = 0;
try {
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&pDeviceEnumerator);
if (FAILED(hr)) throw "CoCreateInstance";
hr = pDeviceEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);
if (FAILED(hr)) throw "GetDefaultAudioEndpoint";
hr = pDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_ALL, NULL, (void**)&pAudioEndpointVolume);
if (FAILED(hr)) throw "pDevice->Active";
float fVolume;
hr = pAudioEndpointVolume->GetMasterVolumeLevelScalar(&fVolume);
printf("%lf", fVolume);
if (FAILED(hr)) throw "SetMasterVolumeLevelScalar";
pAudioEndpointVolume->Release();
pDevice->Release();
pDeviceEnumerator->Release();
return true;
}
catch (...) {
if (pAudioEndpointVolume) pAudioEndpointVolume->Release();
if (pDevice) pDevice->Release();
if (pDeviceEnumerator) pDeviceEnumerator->Release();
throw;
}
return false;
}
int main()
{
CoInitialize(0);
try {
GetVolumeLevel();
}
catch (...) {
//err handle..
}
CoUninitialize();
getchar();
return 0;
}
Он вернется к уровню громкости текущего динамика.
Вы можете сосредоточиться на этом API: IAudioEndpointVolume :: GetMasterVolumeLevelScal
Метод GetMasterVolumeLevelScalar возвращает уровень мастер-громкости аудиопотока, который входит в конечное аудиоустройство или покидает его. Уровень громкости выражается в виде нормализованного звукового значения в диапазоне от 0,0 до 1,0.