vc++在Windows中查找扬声器输出的当前音量级别
我正在尝试编写一种音频可视化工具,我需要获取当前发送到扬声器的声音音量。我需要声音的实际音量,而不仅仅是设备的主音量。我一直在尝试使用this来实现它,但我不确定如何实现它。调用了IAudioCaptureClient::GetBuffer()方法之后,我不知道如何使用生成的数据包来查找所需的内容。音频为2声道,每个采样32位。任何帮助都将不胜感激
#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;
}