From 5e36a3241c8b0cee8b9cfd072e8b80add88e2487 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 13 Mar 2022 19:47:25 -0400 Subject: Instantiate vox stream only upon generation --- src/drone.c | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/drone.c b/src/drone.c index e4a0cb7..3c611e4 100644 --- a/src/drone.c +++ b/src/drone.c @@ -115,19 +115,10 @@ xas_drone_vox *xas_drone_vox_new(xas_drone *drone) { goto error_vox_new; } - if ((vox->source = xas_vox_stream_new(vox->obj)) == NULL) { - goto error_vox_stream_new; - } - vox->drone = drone; - vox->voice = XAS_DRONE_VOX_DEFAULT_VOICE; - vox->speed = XAS_DRONE_VOX_DEFAULT_SPEED; return vox; -error_vox_stream_new: - xas_vox_destroy(vox->obj); - error_vox_new: free(vox); @@ -136,17 +127,18 @@ error_malloc_vox: } void xas_drone_vox_destroy(xas_drone_vox *vox) { - xas_audio_stream_destroy(vox->source); xas_vox_destroy(vox->obj); free(vox); } -void xas_drone_vox_set_voice(xas_drone_vox *vox, const char *voice) { - vox->voice = voice; +int xas_drone_vox_set_voice(xas_drone_vox *vox, const char *voice) { + return xas_vox_set_voice(vox->obj, voice); } -void xas_drone_vox_set_speed(xas_drone_vox *vox, float speed) { - vox->speed = speed; +int xas_drone_vox_set_speed(xas_drone_vox *vox, float speed) { + return xas_vox_set_parameter_float(vox->obj, + "Duration_Stretch", + 1.0f / speed); } int xas_drone_vox_say(xas_drone_vox *vox, const char *text) { @@ -173,14 +165,10 @@ int xas_drone_vox_sayf(xas_drone_vox *vox, const char *format, ...) { } int xas_drone_vox_save(xas_drone_vox *vox, size_t sample_index) { - if (vox->voice && xas_vox_set_voice(vox->obj, vox->voice) < 0) { - goto error_vox_set_voice; - } + xas_audio_stream *source; - if (xas_vox_set_parameter_float(vox->obj, - "Duration_Stretch", - 1.0f / vox->speed) < 0) { - goto error_vox_set_parameter_float; + if ((source = xas_vox_stream_new(vox->obj)) == NULL) { + goto error_vox_stream_new; } if (xas_vox_generate(vox->obj) < 0) { @@ -188,18 +176,21 @@ int xas_drone_vox_save(xas_drone_vox *vox, size_t sample_index) { } if (xas_bank_record(vox->drone->bank, - vox->source, + source, sample_index, vox->drone->bank->entry_size) < 0) { goto error_bank_record; } + xas_audio_stream_destroy(source); + return 0; error_bank_record: error_vox_generate: -error_vox_set_parameter_float: -error_vox_set_voice: + xas_audio_stream_destroy(source); + +error_vox_stream_new: return -1; } -- cgit v1.2.3