#ifndef _XAS_DRONE_H #define _XAS_DRONE_H #include #include #include #include #include #define XAS_DRONE_VOX_BUFFER_SIZE 735 #define XAS_DRONE_VOX_TEXT2WAVE_PATH "/usr/bin/text2wave" #define XAS_DRONE_CHAMBER_BASS_FREQUENCY 20 /* Hz */ #define XAS_DRONE_CHAMBER_BASS_TYPE XAS_SYNTH_SQUARE typedef struct _xas_drone { xas_bank *bank; xas_spatial_scene *scene; xas_spatial_object *obj; } xas_drone; typedef struct _xas_drone_vox { xas_drone *drone; xas_vox *obj; } xas_drone_vox; 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 { xas_drone **drones; size_t drone_count; xas_spatial_object *synth_bass, *synth_l, *synth_r; } xas_drone_chamber; /* * Methods for individual drones */ xas_drone *xas_drone_new(xas_spatial_scene *scene, xas_spatial_coord position, size_t bank_entry_size, size_t bank_entry_count); void xas_drone_destroy(xas_drone *drone); xas_spatial_object *xas_drone_get_spatial_object(xas_drone *drone); int xas_drone_speech_import(xas_drone *drone, const char *voice, float speed, size_t speech_sample_first, size_t speech_sample_count, const char **speech_lines); /* * Methods for drone vocalisations */ xas_drone_vox *xas_drone_vox_new(xas_drone *drone); void xas_drone_vox_destroy(xas_drone_vox *vox); int xas_drone_vox_set_voice(xas_drone_vox *vox, const char *voice); int xas_drone_vox_set_speed(xas_drone_vox *vox, float speed); int xas_drone_vox_vsayf(xas_drone_vox *vox, const char *format, va_list args); int xas_drone_vox_sayf(xas_drone_vox *vox, const char *format, ...); int xas_drone_vox_say(xas_drone_vox *vox, const char *text); int xas_drone_vox_save(xas_drone_vox *vox, size_t sample_index); /* * Drone conversion chamber methods */ 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); void xas_drone_chamber_set_drone_gain(xas_drone_chamber *chamber, float gain); void xas_drone_chamber_set_synth_gain(xas_drone_chamber *chamber, float gain); void xas_drone_chamber_set_bass_gain(xas_drone_chamber *chamber, float gain); void xas_drone_chamber_bass_start(xas_drone_chamber *chamber); void xas_drone_chamber_bass_stop(xas_drone_chamber *chamber); void xas_drone_chamber_bass_set_type(xas_drone_chamber *chamber, enum xas_synth_type type); void xas_drone_chamber_bass_set_frequency(xas_drone_chamber *chamber, size_t freq); int xas_drone_chamber_seq_intervals(xas_drone_chamber *chamber, xas_drone_chamber_interval *intervals, xas_seq *seq, size_t count, struct timeval *now); int xas_drone_chamber_seq_speech(xas_drone_chamber *chamber, xas_drone *drone, xas_seq *seq, size_t speech_part, struct timeval *now); int xas_drone_chamber_seq_chorus(xas_drone_chamber *chamber, xas_seq *seq, size_t speech_part, struct timeval *now); #endif /* _XAS_DRONE_H */