diff options
| -rw-r--r-- | examples/Makefile | 2 | ||||
| -rw-r--r-- | examples/seq.c (renamed from examples/script.c) | 35 | ||||
| -rw-r--r-- | include/xas/script.h | 95 | ||||
| -rw-r--r-- | include/xas/seq.h | 95 | ||||
| -rw-r--r-- | src/Makefile | 4 | ||||
| -rw-r--r-- | src/seq.c (renamed from src/script.c) | 182 | 
6 files changed, 214 insertions, 199 deletions
| diff --git a/examples/Makefile b/examples/Makefile index b167416..756fa89 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -8,7 +8,7 @@ LIBNAME		= xas  CFLAGS		+= -I$(INCLUDE_PATH)  LDFLAGS		+= -L../src -l$(LIBNAME) -lm -EXAMPLES	= test open say spatial script +EXAMPLES	= test open say spatial seq  all: $(EXAMPLES) diff --git a/examples/script.c b/examples/seq.c index f9faccc..3c0293a 100644 --- a/examples/script.c +++ b/examples/seq.c @@ -10,7 +10,7 @@  #include <xas/audio.h>  #include <xas/riff.h>  #include <xas/spatial.h> -#include <xas/script.h> +#include <xas/seq.h>  static void usage(int argc, char **argv, const char *message, ...) {      va_list args; @@ -31,7 +31,7 @@ static void usage(int argc, char **argv, const char *message, ...) {  int main(int argc, char **argv) {      xas_spatial_scene *scene; -    xas_script *script; +    xas_seq *seq;      xas_spatial_object *synth_l,                           *synth_r, @@ -69,8 +69,8 @@ int main(int argc, char **argv) {          goto error_spatial_scene_new;      } -    if ((script = xas_script_new(scene, buffer_size)) == NULL) { -        goto error_script_new; +    if ((seq = xas_seq_new(scene, buffer_size)) == NULL) { +        goto error_seq_new;      }      if ((voice = xas_spatial_scene_add_vox(scene, @@ -98,11 +98,26 @@ int main(int argc, char **argv) {      xas_vox_set_parameter_float(voice->ctx, "Duration_Stretch", 1.3); -    xas_script_add_set_frequency(script, synth_l, (struct timeval){ 0, 0 }, 220); -    xas_script_add_event_on( script, synth_l, (struct timeval){ 0, 0 }); -    xas_script_add_event_off(script, synth_l, (struct timeval){ 60, 0 }); +    xas_seq_add_set_frequency(seq, synth_l, (struct timeval){ 0, 0 }, 220); +    xas_seq_add_set_frequency(seq, synth_r, (struct timeval){ 0, 0 }, 420); +    xas_seq_add_event_on(     seq, synth_l, (struct timeval){ 0, 0 }); +    xas_seq_add_event_on(     seq, synth_r, (struct timeval){ 0, 0 }); -    xas_script_destroy(script); +    xas_seq_add_set_position(seq, +                               synth_l, +                               (struct timeval){ 15, 0 }, +                               (xas_spatial_coord){ -10.0, 0.0, 0.0 }); + +    xas_seq_add_phrase(seq, +                         voice, +                         (struct timeval){ 10, 0 }, +                         "I will eat your soul."); + +    xas_seq_add_event_off(seq, synth_l, (struct timeval){ 60, 0 }); + +    xas_seq_play(seq, wave); + +    xas_seq_destroy(seq);      xas_spatial_scene_destroy(scene);      xas_audio_stream_destroy(wave); @@ -112,9 +127,9 @@ error_spatial_scene_stream_new:  error_spatial_scene_add_synth_r:  error_spatial_scene_add_synth_l:  error_spatial_scene_add_vox: -    xas_script_destroy(script); +    xas_seq_destroy(seq); -error_script_new: +error_seq_new:      xas_spatial_scene_destroy(scene);  error_spatial_scene_new: diff --git a/include/xas/script.h b/include/xas/script.h deleted file mode 100644 index ff07b49..0000000 --- a/include/xas/script.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef _XAS_SCRIPT_H -#define _XAS_SCRIPT_H - -#include <sys/types.h> -#include <sys/time.h> - -#include <xas/audio.h> -#include <xas/spatial.h> - -enum xas_script_event_type { -    XAS_SCRIPT_EVENT_OFF, -    XAS_SCRIPT_EVENT_ON, -    XAS_SCRIPT_EVENT_SET_POSITION, -    XAS_SCRIPT_EVENT_SET_GAIN, -    XAS_SCRIPT_EVENT_SET_FREQUENCY, -    XAS_SCRIPT_EVENT_SET_BANK_INDEX, -    XAS_SCRIPT_EVENT_SPEECH -}; - -enum xas_script_object_type { -    XAS_SCRIPT_OBJECT_ANY, -    XAS_SCRIPT_OBJECT_SYNTH, -    XAS_SCRIPT_OBJECT_VOX, -    XAS_SCRIPT_OBJECT_BANK_PLAYER -}; - -typedef struct _xas_script_event xas_script_event; - -struct _xas_script_event { -    enum xas_script_event_type type; -    enum xas_script_object_type objtype; - -    xas_spatial_object *object; - -    struct timeval timestamp; - -    union { -        float gain; -        xas_spatial_coord point; -        size_t index; -        size_t frequency; -        const char *phrase; -    }; - -    xas_script_event *next; -}; - -typedef struct _xas_script { -    xas_spatial_scene *scene; - -    xas_script_event *first; - -    size_t buffer_size; -} xas_script; - -xas_script *xas_script_new(xas_spatial_scene *scene, size_t buffer_size); - -void xas_script_destroy(xas_script *script); - -int xas_script_add_event_off(xas_script *script, -                               xas_spatial_object *object, -                               struct timeval timestamp); - -int xas_script_add_event_on(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp); - -int xas_script_add_set_position(xas_script *script, -                                  xas_spatial_object *object, -                                  struct timeval timestamp, -                                  xas_spatial_coord point); - -int xas_script_add_set_gain(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp, -                              float gain); - -int xas_script_add_set_bank(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp, -                              size_t index); - -int xas_script_add_set_frequency(xas_script *script, -                                   xas_spatial_object *object, -                                   struct timeval timestamp, -                                   size_t frequency); - -int xas_script_add_phrase(xas_script *script, -                            xas_spatial_object *object, -                            struct timeval timestamp, -                            const char *phrase); - -int xas_script_play(xas_script *script, xas_audio_stream *sink); - -#endif /* _XAS_SCRIPT_H */ diff --git a/include/xas/seq.h b/include/xas/seq.h new file mode 100644 index 0000000..74b198f --- /dev/null +++ b/include/xas/seq.h @@ -0,0 +1,95 @@ +#ifndef _XAS_SEQ_H +#define _XAS_SEQ_H + +#include <sys/types.h> +#include <sys/time.h> + +#include <xas/audio.h> +#include <xas/spatial.h> + +enum xas_seq_event_type { +    XAS_SEQ_EVENT_OFF, +    XAS_SEQ_EVENT_ON, +    XAS_SEQ_EVENT_SET_POSITION, +    XAS_SEQ_EVENT_SET_GAIN, +    XAS_SEQ_EVENT_SET_FREQUENCY, +    XAS_SEQ_EVENT_SET_BANK_INDEX, +    XAS_SEQ_EVENT_SPEECH +}; + +enum xas_seq_object_type { +    XAS_SEQ_OBJECT_ANY, +    XAS_SEQ_OBJECT_SYNTH, +    XAS_SEQ_OBJECT_VOX, +    XAS_SEQ_OBJECT_BANK_PLAYER +}; + +typedef struct _xas_seq_event xas_seq_event; + +struct _xas_seq_event { +    enum xas_seq_event_type type; +    enum xas_seq_object_type objtype; + +    xas_spatial_object *object; + +    struct timeval timestamp; + +    union { +        float gain; +        xas_spatial_coord point; +        size_t index; +        size_t frequency; +        const char *phrase; +    }; + +    xas_seq_event *next; +}; + +typedef struct _xas_seq { +    xas_spatial_scene *scene; + +    xas_seq_event *first; + +    size_t buffer_size; +} xas_seq; + +xas_seq *xas_seq_new(xas_spatial_scene *scene, size_t buffer_size); + +void xas_seq_destroy(xas_seq *seq); + +int xas_seq_add_event_off(xas_seq *seq, +                            xas_spatial_object *object, +                            struct timeval timestamp); + +int xas_seq_add_event_on(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp); + +int xas_seq_add_set_position(xas_seq *seq, +                               xas_spatial_object *object, +                               struct timeval timestamp, +                               xas_spatial_coord point); + +int xas_seq_add_set_gain(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp, +                           float gain); + +int xas_seq_add_set_bank(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp, +                           size_t index); + +int xas_seq_add_set_frequency(xas_seq *seq, +                                xas_spatial_object *object, +                                struct timeval timestamp, +                                size_t frequency); + +int xas_seq_add_phrase(xas_seq *seq, +                         xas_spatial_object *object, +                         struct timeval timestamp, +                         const char *phrase); + +int xas_seq_play(xas_seq *seq, xas_audio_stream *sink); + +#endif /* _XAS_SEQ_H */ diff --git a/src/Makefile b/src/Makefile index ce60d40..099c3ee 100644 --- a/src/Makefile +++ b/src/Makefile @@ -8,10 +8,10 @@ CFLAGS		+= -I$(INCLUDE_PATH)  LDFLAGS		+=  HEADERS		= audio.h riff.h mixer.h object.h synth.h vox.h bank.h \ -		  spatial.h script.h +		  spatial.h seq.h  OBJS		= audio.o riff.o mixer.o object.o synth.o vox.o bank.o \ -		  spatial.o script.o +		  spatial.o seq.o  VERSION_MAJOR	= 0  VERSION_MINOR	= 0.1 @@ -5,50 +5,50 @@  #include <xas/bank.h>  #include <xas/synth.h>  #include <xas/vox.h> -#include <xas/script.h> +#include <xas/seq.h> -xas_script *xas_script_new(xas_spatial_scene *scene, size_t buffer_size) { -    xas_script *script; +xas_seq *xas_seq_new(xas_spatial_scene *scene, size_t buffer_size) { +    xas_seq *seq; -    if ((script = malloc(sizeof(*script))) == NULL) { -        goto error_malloc_script; +    if ((seq = malloc(sizeof(*seq))) == NULL) { +        goto error_malloc_seq;      } -    script->scene       = scene; -    script->first       = NULL; -    script->buffer_size = buffer_size; +    seq->scene       = scene; +    seq->first       = NULL; +    seq->buffer_size = buffer_size; -    return script; +    return seq; -error_malloc_script: +error_malloc_seq:      return NULL;  } -void xas_script_destroy(xas_script *script) { -    xas_script_event *event = script->first; +void xas_seq_destroy(xas_seq *seq) { +    xas_seq_event *event = seq->first;      while (event) { -        xas_script_event *next = event->next; +        xas_seq_event *next = event->next;          free(event);          event = next;      } -    free(script); +    free(seq);  } -static void add_event(xas_script *script, xas_script_event *ev) { -    xas_script_event *current = script->first; +static void add_event(xas_seq *seq, xas_seq_event *ev) { +    xas_seq_event *current = seq->first; -    if (script->first == NULL) { -        script->first = ev; +    if (seq->first == NULL) { +        seq->first = ev;          return;      }      while (current) { -        xas_script_event *next = current->next; +        xas_seq_event *next = current->next;          if (next == NULL) {              current->next = ev; @@ -68,22 +68,22 @@ static void add_event(xas_script *script, xas_script_event *ev) {      }  } -int xas_script_add_event_off(xas_script *script, -                               xas_spatial_object *object, -                               struct timeval timestamp) { -    xas_script_event *ev; +int xas_seq_add_event_off(xas_seq *seq, +                            xas_spatial_object *object, +                            struct timeval timestamp) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_OFF; -    ev->objtype   = XAS_SCRIPT_OBJECT_ANY; +    ev->type      = XAS_SEQ_EVENT_OFF; +    ev->objtype   = XAS_SEQ_OBJECT_ANY;      ev->object    = object;      ev->timestamp = timestamp;      ev->next      = NULL; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -91,22 +91,22 @@ error_malloc_ev:      return -1;  } -int xas_script_add_event_on(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp) { -    xas_script_event *ev; +int xas_seq_add_event_on(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_ON; -    ev->objtype   = XAS_SCRIPT_OBJECT_ANY; +    ev->type      = XAS_SEQ_EVENT_ON; +    ev->objtype   = XAS_SEQ_OBJECT_ANY;      ev->object    = object;      ev->timestamp = timestamp;      ev->next      = NULL; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -114,24 +114,24 @@ error_malloc_ev:      return -1;  } -int xas_script_add_set_position(xas_script *script, -                                  xas_spatial_object *object, -                                  struct timeval timestamp, -                                  xas_spatial_coord point) { -    xas_script_event *ev; +int xas_seq_add_set_position(xas_seq *seq, +                               xas_spatial_object *object, +                               struct timeval timestamp, +                               xas_spatial_coord point) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_SET_POSITION; -    ev->objtype   = XAS_SCRIPT_OBJECT_ANY; +    ev->type      = XAS_SEQ_EVENT_SET_POSITION; +    ev->objtype   = XAS_SEQ_OBJECT_ANY;      ev->object    = object;      ev->timestamp = timestamp;      ev->point     = point;      ev->next      = NULL; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -139,24 +139,24 @@ error_malloc_ev:      return -1;  } -int xas_script_add_set_gain(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp, -                              float gain) { -    xas_script_event *ev; +int xas_seq_add_set_gain(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp, +                           float gain) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_ON; -    ev->objtype   = XAS_SCRIPT_OBJECT_ANY; +    ev->type      = XAS_SEQ_EVENT_ON; +    ev->objtype   = XAS_SEQ_OBJECT_ANY;      ev->object    = object;      ev->timestamp = timestamp;      ev->gain      = gain;      ev->next      = NULL; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -164,24 +164,24 @@ error_malloc_ev:      return -1;  } -int xas_script_add_set_bank(xas_script *script, -                              xas_spatial_object *object, -                              struct timeval timestamp, -                              size_t index) { -    xas_script_event *ev; +int xas_seq_add_set_bank(xas_seq *seq, +                           xas_spatial_object *object, +                           struct timeval timestamp, +                           size_t index) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_SET_BANK_INDEX; -    ev->objtype   = XAS_SCRIPT_OBJECT_BANK_PLAYER; +    ev->type      = XAS_SEQ_EVENT_SET_BANK_INDEX; +    ev->objtype   = XAS_SEQ_OBJECT_BANK_PLAYER;      ev->object    = object;      ev->timestamp = timestamp;      ev->next      = NULL;      ev->index     = index; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -189,24 +189,24 @@ error_malloc_ev:      return -1;  } -int xas_script_add_set_frequency(xas_script *script, -                                   xas_spatial_object *object, -                                   struct timeval timestamp, -                                   size_t frequency) { -    xas_script_event *ev; +int xas_seq_add_set_frequency(xas_seq *seq, +                                xas_spatial_object *object, +                                struct timeval timestamp, +                                size_t frequency) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_SET_FREQUENCY; -    ev->objtype   = XAS_SCRIPT_OBJECT_SYNTH; +    ev->type      = XAS_SEQ_EVENT_SET_FREQUENCY; +    ev->objtype   = XAS_SEQ_OBJECT_SYNTH;      ev->object    = object;      ev->timestamp = timestamp;      ev->next      = NULL;      ev->frequency = frequency; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -214,24 +214,24 @@ error_malloc_ev:      return -1;  } -int xas_script_add_phrase(xas_script *script, -                            xas_spatial_object *object, -                            struct timeval timestamp, -                            const char *phrase) { -    xas_script_event *ev; +int xas_seq_add_phrase(xas_seq *seq, +                         xas_spatial_object *object, +                         struct timeval timestamp, +                         const char *phrase) { +    xas_seq_event *ev;      if ((ev = malloc(sizeof(*ev))) == NULL) {          goto error_malloc_ev;      } -    ev->type      = XAS_SCRIPT_EVENT_SPEECH; -    ev->objtype   = XAS_SCRIPT_OBJECT_VOX; +    ev->type      = XAS_SEQ_EVENT_SPEECH; +    ev->objtype   = XAS_SEQ_OBJECT_VOX;      ev->object    = object;      ev->timestamp = timestamp;      ev->next      = NULL;      ev->phrase    = phrase; -    add_event(script, ev); +    add_event(seq, ev);      return 0; @@ -239,28 +239,28 @@ error_malloc_ev:      return -1;  } -static int event_trigger(xas_spatial_scene *scene, xas_script_event *ev) { +static int event_trigger(xas_spatial_scene *scene, xas_seq_event *ev) {      switch (ev->type) { -        case XAS_SCRIPT_EVENT_OFF: +        case XAS_SEQ_EVENT_OFF:              return xas_spatial_object_stop(ev->object); -        case XAS_SCRIPT_EVENT_ON: +        case XAS_SEQ_EVENT_ON:              return xas_spatial_object_start(ev->object); -        case XAS_SCRIPT_EVENT_SET_POSITION: +        case XAS_SEQ_EVENT_SET_POSITION:              xas_spatial_scene_position_object(scene,                                                  ev->object,                                                  ev->point);              break; -        case XAS_SCRIPT_EVENT_SET_GAIN: +        case XAS_SEQ_EVENT_SET_GAIN:              xas_object_set_gain(ev->object->ctx, ev->gain);              break; -        case XAS_SCRIPT_EVENT_SET_FREQUENCY: -            if (ev->objtype != XAS_SCRIPT_OBJECT_SYNTH) { +        case XAS_SEQ_EVENT_SET_FREQUENCY: +            if (ev->objtype != XAS_SEQ_OBJECT_SYNTH) {                  goto error_invalid_event;              } @@ -268,8 +268,8 @@ static int event_trigger(xas_spatial_scene *scene, xas_script_event *ev) {              break; -        case XAS_SCRIPT_EVENT_SET_BANK_INDEX: -            if (ev->objtype != XAS_SCRIPT_OBJECT_BANK_PLAYER) { +        case XAS_SEQ_EVENT_SET_BANK_INDEX: +            if (ev->objtype != XAS_SEQ_OBJECT_BANK_PLAYER) {                  goto error_invalid_event;              } @@ -277,8 +277,8 @@ static int event_trigger(xas_spatial_scene *scene, xas_script_event *ev) {              break; -        case XAS_SCRIPT_EVENT_SPEECH: -            if (ev->objtype != XAS_SCRIPT_OBJECT_VOX) { +        case XAS_SEQ_EVENT_SPEECH: +            if (ev->objtype != XAS_SEQ_OBJECT_VOX) {                  goto error_invalid_event;              } @@ -303,20 +303,20 @@ static inline void timerupdate(struct timeval *tv,      tv->tv_usec = usec % 1000000;  } -int xas_script_play(xas_script *script, xas_audio_stream *sink) { -    xas_script_event *ev = script->first; +int xas_seq_play(xas_seq *seq, xas_audio_stream *sink) { +    xas_seq_event *ev = seq->first;      xas_audio_stream *source;      size_t frame       = 0, -           sample_rate = script->scene->format.sample_rate, -           buffer_size = script->buffer_size; +           sample_rate = seq->scene->format.sample_rate, +           buffer_size = seq->buffer_size;      suseconds_t interval = 1000000 / (sample_rate / buffer_size);      int16_t *samples; -    if ((source = xas_spatial_scene_stream_new(script->scene, -                                                 script->buffer_size)) == NULL) { +    if ((source = xas_spatial_scene_stream_new(seq->scene, +                                                 seq->buffer_size)) == NULL) {          goto error_spatial_scene_stream_new;      } @@ -328,7 +328,7 @@ int xas_script_play(xas_script *script, xas_audio_stream *sink) {          timerupdate(&tv, interval, frame);          while (ev && !timercmp(&tv, &ev->timestamp, <)) { -            if (event_trigger(script->scene, ev) < 0) { +            if (event_trigger(seq->scene, ev) < 0) {                  goto error_event_trigger;              } | 
 
    