#include <stdio.h>
#include <stdlib.h>
#include "portaudio.h"
#define SAMPLE_RATE (44100)
#define FRAMES_PER_BUFFER (64)
#define NUM_SECONDS (5)
static int paCallback(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo *timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData) {
// Pasar datos del micrófono al parlante
memcpy(outputBuffer, inputBuffer, framesPerBuffer * sizeof(float));
return paContinue;
}
int main() {
PaError err;
PaStream *stream;
err = Pa_Initialize();
if (err != paNoError) {
printf("Error al inicializar PortAudio: %s\n", Pa_GetErrorText(err));
return 1;
}
err = Pa_OpenDefaultStream(&stream, 1, 1, paFloat32, SAMPLE_RATE,
FRAMES_PER_BUFFER, paCallback, NULL);
if (err != paNoError) {
printf("Error al abrir el flujo de audio: %s\n", Pa_GetErrorText(err));
return 1;
}
err = Pa_StartStream(stream);
if (err != paNoError) {
printf("Error al iniciar el flujo de audio: %s\n", Pa_GetErrorText(err));
return 1;
}
printf("Capturando y reproduciendo audio durante %d segundos...\n", NUM_SECONDS);
Pa_Sleep(NUM_SECONDS * 1000);
err = Pa_StopStream(stream);
if (err != paNoError) {
printf("Error al detener el flujo de audio: %s\n", Pa_GetErrorText(err));
return 1;
}
err = Pa_CloseStream(stream);
if (err != paNoError) {
printf("Error al cerrar el flujo de audio: %s\n", Pa_GetErrorText(err));
return 1;
}
Pa_Terminate();
return 0;
}