CAPTURAR AUDIO bajo win32
Publicado por Alex (1 intervención) el 29/10/2002 04:35:29
Necesito saber como capturar audio de la entrada de micro para un programa.
Valora esta pregunta


0
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#pragma comment(lib, "winmm.lib")
#define BUFFER_SIZE 44100 // Tamaño del buffer para la captura
void CALLBACK waveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) {
if (uMsg == WIM_DATA) {
// Aquí puedes procesar los datos de audio capturados
printf("Datos de audio capturados.\n");
}
}
int main() {
HWAVEIN hWaveIn;
WAVEFORMATEX wfx;
WAVEHDR waveHdr;
char buffer[BUFFER_SIZE];
// Configurar el formato de audio
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = 1; // Mono
wfx.nSamplesPerSec = 44100; // Frecuencia de muestreo
wfx.wBitsPerSample = 16; // Bits por muestra
wfx.nBlockAlign = (wfx.nChannels * wfx.wBitsPerSample) / 8;
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
// Abrir el dispositivo de entrada de audio
if (waveInOpen(&hWaveIn, WAVE_MAPPER, &wfx, (DWORD_PTR)waveInProc, 0, CALLBACK_FUNCTION) != MMSYSERR_NOERROR) {
printf("Error al abrir el dispositivo de entrada de audio.\n");
return 1;
}
// Preparar el buffer para la captura
waveHdr.lpData = buffer;
waveHdr.dwBufferLength = BUFFER_SIZE;
waveHdr.dwFlags = 0;
waveHdr.dwLoops = 0;
waveInPrepareHeader(hWaveIn, &waveHdr, sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn, &waveHdr, sizeof(WAVEHDR));
// Iniciar la captura de audio
waveInStart(hWaveIn);
printf("Capturando audio... Presiona Enter para detener.\n");
getchar(); // Esperar a que el usuario presione Enter
// Detener la captura
waveInStop(hWaveIn);
waveInUnprepareHeader(hWaveIn, &waveHdr, sizeof(WAVEHDR));
waveInClose(hWaveIn);
printf("Captura de audio finalizada.\n");
return 0;
}
gcc -o audio_capture audio_capture.c -lwinmm
./audio_capture