openal-capture.cpp
:
#include <AL/al.h>
#include <AL/alc.h>
#include <cstdio>
#include <unistd.h>
int main(int, char **)
{
ALCdevice * dev = alcCaptureOpenDevice(NULL, 48000, AL_FORMAT_MONO16, 4096);
if (dev == NULL) {
printf("error: cannot open capture device\n");
return -1;
}
ALubyte buffer[16384];
alcCaptureStart(dev);
for (int i = 0; i < 10240;) {
ALint n = 0;
alcGetIntegerv(dev, ALC_CAPTURE_SAMPLES, 1, &n);
if (n <= 0) continue;
alcCaptureSamples(dev, (ALCvoid *)buffer, n);
i += n;
printf("samples captured: %d (n=%d)\n", i, n);
}
alcCaptureStop(dev);
alcCaptureCloseDevice(dev);
return 0;
}