В Windows Vista и более поздних версиях возможно получить основной уровень звука с помощью MMDevice Api:
CoInitialize(NULL);
IMMDeviceEnumerator *pEnum = NULL;
IMMDevice *pDevice = NULL;
IAudioMeterInformation *pMeter = NULL;
float peak;
HRESULT hr;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator),
(void**)&pEnum);
hr = pEnum -> GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
pDevice -> Activate(__uuidof(IAudioMeterInformation),
CLSCTX_ALL,
NULL,
(void**)&pMeter);
pMeter -> GetPeakValue(&peak); // I need this value
Но как получить эту информацию в Windows XP?
Из MSDN, Пиковые метры:
Если конечное аудиоустройство реализует аппаратный измеритель пиков, интерфейс IAudioMeterInformation использует аппаратный измеритель пиков. В противном случае интерфейс реализует измеритель пиков в программном обеспечении.
До Vista не было аппаратного пикового измерения на устройствах или KMixer (предшественник WASAPI для внутреннего микширования звука). Не было никакой реализации программного обеспечения для предоставления данных измерений. Так что у вас просто нет данных, вы не можете их получить.
Если у вас есть данные, которые вы отправляете на воспроизведение, вы можете использовать программный замер по этому каналу.
Других решений пока нет …