#ifndef _XAS_DRONE_H #define _XAS_DRONE_H #include #include #include #define XAS_DRONE_CHAMBER_BASS_FREQUENCY 20 /* Hz */ #define XAS_DRONE_CHAMBER_BASS_TYPE XAS_SYNTH_SQUARE enum xas_drone_chamber_event_type { XAS_DRONE_CHAMBER_EVENT_NONE, XAS_DRONE_CHAMBER_EVENT_SYNTH, XAS_DRONE_CHAMBER_EVENT_DRONE_SPEECH }; typedef struct _xas_drone xas_drone; struct _xas_drone { xas_bank *bank; xas_spatial_scene *scene; xas_spatial_object *obj; float speech_speed; const char **speech_lines; xas_drone *next; }; typedef struct _xas_drone_chamber_interval { struct timeval duration; size_t freq_l, freq_r; enum xas_synth_type type_l, type_r; } xas_drone_chamber_interval; typedef struct _xas_drone_chamber_speech { size_t drone_index, speech_line; } xas_drone_chamber_speech; typedef struct _xas_drone_chamber_event { enum xas_drone_chamber_event_type type; union { xas_drone_chamber_interval interval; xas_drone_chamber_speech speech; }; } xas_drone_chamber_event; typedef struct _xas_drone_chamber { xas_spatial_scene *scene; xas_drone **drones; size_t drone_count; xas_spatial_object *synth_bass, *synth_l, *synth_r; } xas_drone_chamber; xas_drone *xas_drone_new(xas_spatial_scene *scene, xas_spatial_coord position, float speech_speed, size_t speech_sample_count, size_t speech_line_count, const char **speech_lines); void xas_drone_destroy(xas_drone *drone); xas_spatial_object *xas_drone_get_spatial_object(xas_drone *drone); xas_drone_chamber *xas_drone_chamber_new(xas_spatial_scene *scene, xas_spatial_coord location, size_t drone_count); void xas_drone_chamber_destroy(xas_drone_chamber *chamber); void xas_drone_chamber_insert_drone(xas_drone_chamber *chamber, xas_drone *drone, size_t index); int xas_drone_chamber_event_seq(xas_drone_chamber *chamber, xas_drone_chamber_event *ev, xas_seq *seq, int advance, struct timeval *now); int xas_drone_chamber_chorus_seq(xas_drone_chamber *chamber, xas_seq *seq, int advance, struct timeval *now); #endif /* _XAS_DRONE_H */