#ifndef _XAS_SCRIPT_H #define _XAS_SCRIPT_H #include #include #include #include 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_speech(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 */