diff options
-rw-r--r-- | include/xas/drone.h | 5 | ||||
-rw-r--r-- | src/drone.c | 30 |
2 files changed, 35 insertions, 0 deletions
diff --git a/include/xas/drone.h b/include/xas/drone.h index 1af22be..1f329ae 100644 --- a/include/xas/drone.h +++ b/include/xas/drone.h @@ -62,6 +62,11 @@ ssize_t xas_drone_sample_record(xas_drone *drone, size_t sample_index, size_t sample_len); + +ssize_t xas_drone_sample_import(xas_drone *drone, + const char *file, + size_t sample_index); + int xas_drone_speech_import(xas_drone *drone, const char *voice, float speed, diff --git a/src/drone.c b/src/drone.c index 13610fa..188f546 100644 --- a/src/drone.c +++ b/src/drone.c @@ -1,7 +1,9 @@ #include <stdlib.h> #include <string.h> +#include <fcntl.h> #include <errno.h> +#include <xas/riff.h> #include <xas/vox.h> #include <xas/drone.h> @@ -73,6 +75,34 @@ error_invalid: return -1; } +ssize_t xas_drone_sample_import(xas_drone *drone, + const char *path, + size_t sample_index) { + ssize_t ret; + xas_audio_stream *source; + + if ((source = xas_riff_open_file(path, O_RDONLY)) == NULL) { + goto error_riff_open_file; + } + + if ((ret = xas_drone_sample_record(drone, + source, + sample_index, + drone->bank->entry_size)) < 0) { + goto error_sample_record; + } + + xas_audio_stream_destroy(source); + + return ret; + +error_sample_record: + xas_audio_stream_destroy(source); + +error_riff_open_file: + return -1; +} + int xas_drone_speech_import(xas_drone *drone, const char *voice, float speed, |