diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 4 | ||||
| -rw-r--r-- | src/synth.c | 46 | 
2 files changed, 48 insertions, 2 deletions
| diff --git a/src/Makefile b/src/Makefile index d638619..a8853be 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,9 +7,9 @@ CC		 = $(CROSS)cc  CFLAGS		+= -I$(INCLUDE_PATH)  LDFLAGS		+= -HEADERS		= audio.h mixer.h riff.h +HEADERS		= audio.h mixer.h synth.h riff.h -OBJS		= audio.o mixer.o riff.o +OBJS		= audio.o mixer.o synth.o riff.o  VERSION_MAJOR	= 0  VERSION_MINOR	= 0.1 diff --git a/src/synth.c b/src/synth.c new file mode 100644 index 0000000..96c6d83 --- /dev/null +++ b/src/synth.c @@ -0,0 +1,46 @@ +#include <stdlib.h> + +#include <xas/synth.h> + +xas_synth *xas_synth_new(size_t sample_rate, +                             xas_synth_callback_sample  sample, +                             xas_synth_callback_destroy destroy, +                             void *ctx) { +    xas_synth *synth; + +    if ((synth = malloc(sizeof(*synth))) == NULL) { +        goto error_malloc_synth; +    } + +    synth->sample_rate = sample_rate; +    synth->sample      = sample; +    synth->destroy     = destroy; +    synth->ctx         = ctx; + +    return synth; + +error_malloc_synth: +    return NULL; +} + +void xas_synth_destroy(xas_synth *synth) { +    if (synth->destroy) { +        synth->destroy(synth, synth->ctx); +    } +} + +int16_t xas_synth_sample(xas_synth *synth) { +   return synth->sample(synth, synth->ctx); +} + +ssize_t xas_synth_fill(xas_synth *synth, +                         int16_t *samples, +                         size_t count) { +    size_t i; + +    for (i=0; i<count; i++) { +        samples[i] = synth->sample(synth, synth->ctx); +    } + +    return count; +} | 
 
    