summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/xas/drone.h5
-rw-r--r--src/drone.c30
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,