#include <windows.h>
#include <audioclient.h>
#include <mmdeviceapi.h>
#include <iostream>
#include <vector>
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
void CaptureAudio() {
CoInitialize(NULL); // Inicializar COM
// Obtener el dispositivo de audio predeterminado
IMMDeviceEnumerator* deviceEnumerator = NULL;
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
IMMDevice* device = NULL;
deviceEnumerator->GetDefaultAudioEndpoint(eCapture, eConsole, &device);
// Crear el cliente de audio
IAudioClient* audioClient = NULL;
device->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void**)&audioClient);
// Configurar el formato de audio
WAVEFORMATEX* waveFormat = NULL;
audioClient->GetMixFormat(&waveFormat);
waveFormat->wFormatTag = WAVE_FORMAT_PCM;
waveFormat->nChannels = 1; // Mono
waveFormat->nSamplesPerSec = 44100; // Frecuencia de muestreo
waveFormat->wBitsPerSample = 16; // Bits por muestra
waveFormat->nBlockAlign = (waveFormat->nChannels * waveFormat->wBitsPerSample) / 8;
waveFormat->nAvgBytesPerSec = waveFormat->nSamplesPerSec * waveFormat->nBlockAlign;
// Inicializar el cliente de audio
audioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 10000000, 0, waveFormat, NULL);
// Crear un buffer para capturar audio
UINT32 bufferFrameCount;
audioClient->GetBufferSize(&bufferFrameCount);
BYTE* audioBuffer = new BYTE[bufferFrameCount * waveFormat->nBlockAlign];
// Comenzar la captura
audioClient->Start();
// Capturar audio
while (true) {
UINT32 numFramesAvailable;
audioClient->GetCurrentPadding(&numFramesAvailable);
UINT32 numFramesToRead = bufferFrameCount - numFramesAvailable;
if (numFramesToRead > 0) {
// Leer el audio
audioClient->GetBuffer(&audioBuffer, &numFramesToRead);
// Aquí puedes procesar el audio capturado
audioClient->ReleaseBuffer(numFramesToRead);
}
}
// Detener la captura
audioClient->Stop();
// Liberar recursos
delete[] audioBuffer;
CoTaskMemFree(waveFormat);
audioClient->Release();
device->Release();
deviceEnumerator->Release();
CoUninitialize();
}
int main() {
CaptureAudio();
return 0;
}