summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXANTRONIX Development2022-02-23 20:21:57 -0500
committerXANTRONIX Development2022-02-23 20:22:52 -0500
commit8a197be597ea6ffd1463e417394b14804e5fcc01 (patch)
tree2b9352432c88cd13a2c54005b113c84b255251af
parent4d8f0128df8a49428a155f16a0de34621bed0f56 (diff)
downloadxas-8a197be597ea6ffd1463e417394b14804e5fcc01.tar.gz
xas-8a197be597ea6ffd1463e417394b14804e5fcc01.tar.bz2
xas-8a197be597ea6ffd1463e417394b14804e5fcc01.zip
Implement xas_bank_load_file()
Implement xas_bank_load_file() to load a sample from a RIFF file on disk into a sample bank
-rw-r--r--include/xas/bank.h4
-rw-r--r--src/bank.c32
2 files changed, 36 insertions, 0 deletions
diff --git a/include/xas/bank.h b/include/xas/bank.h
index be623f0..33be492 100644
--- a/include/xas/bank.h
+++ b/include/xas/bank.h
@@ -42,6 +42,10 @@ ssize_t xas_bank_record(xas_bank *bank,
size_t entry_index,
size_t count);
+ssize_t xas_bank_load_file(xas_bank *bank,
+ size_t entry_index,
+ const char *path);
+
xas_bank_player *xas_bank_player_new(xas_bank *bank);
void xas_bank_player_destroy(xas_bank_player *player);
diff --git a/src/bank.c b/src/bank.c
index 9cb276a..1623834 100644
--- a/src/bank.c
+++ b/src/bank.c
@@ -1,6 +1,9 @@
#include <stdlib.h>
#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <xas/riff.h>
#include <xas/bank.h>
xas_bank *xas_bank_new(xas_audio_format format,
@@ -86,6 +89,35 @@ error_invalid_format:
return -1;
}
+ssize_t xas_bank_load_file(xas_bank *bank,
+ size_t entry_index,
+ const char *path) {
+ ssize_t ret;
+
+ xas_audio_stream *riff;
+
+ if ((riff = xas_riff_open_file(path, O_RDONLY)) == NULL) {
+ goto error_riff_open_file;
+ }
+
+ if ((ret = xas_bank_record(bank,
+ riff,
+ entry_index,
+ bank->entry_size)) < 0) {
+ goto error_record;
+ }
+
+ xas_audio_stream_destroy(riff);
+
+ return ret;
+
+error_record:
+ xas_audio_stream_destroy(riff);
+
+error_riff_open_file:
+ return -1;
+}
+
xas_bank_player *xas_bank_player_new(xas_bank *bank) {
xas_bank_player *player;