shithub: aubio

ref: d2af4085e1b9f8c0af6aad661a7059ac8690e037
dir: /examples/devaudioio.c/

View raw version
#include <aubio.h>
#include "config.h"
#include "utils.h"
#include "aubio_priv.h"
#include "devaudioio.h"
#include <bio.h>

static Biobuf *f;
static s16int *fbuf;
static fvec_t *ibuf, *obuf;
static int nframes;

void
new_aubio_devaudio(int hop_size)
{
	if((f = Bopen("/dev/audio", OREAD)) == nil){
		AUBIO_ERR("failed to open /dev/audio for reading\n");
		AUBIO_QUIT(AUBIO_FAIL);
	}
	nframes = hop_size;
	ibuf = new_fvec(hop_size);
	obuf = new_fvec(hop_size);
	if(ibuf == nil || obuf == nil || (fbuf = malloc(nframes*2*2)) == nil){
		AUBIO_ERR("no memory\n");
		AUBIO_QUIT(AUBIO_FAIL);
	}
}

int
aubio_devaudio_get_samplerate(void)
{
	return 44100;
}

void
aubio_devaudio_activate(aubio_process_func_t func, aubio_print_func_t printf)
{
	double l;
	int i;

	while(9){
		if(Bread(f, fbuf, nframes*2*2) != nframes*2*2)
			break;
		for(i = 0; i < nframes; i++){
			fvec_get_sample(obuf, i);
			l = (fbuf[i*2+0] + fbuf[i*2+1]) / 8192;
			// ignoring right channel
			fvec_set_sample(ibuf, l, i);
		}
		func(ibuf, obuf);
		printf();
	}
}