summaryrefslogtreecommitdiffstats
path: root/include/xas/bank.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/xas/bank.h')
-rw-r--r--include/xas/bank.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/include/xas/bank.h b/include/xas/bank.h
index 3ff5994..92074f6 100644
--- a/include/xas/bank.h
+++ b/include/xas/bank.h
@@ -9,8 +9,22 @@
#define XAS_BANK_PLAYER_DEFAULT_GAIN 1.0f
-#define XAS_BANK_PLAYER_NONE 0
-#define XAS_BANK_PLAYER_LOOP (1 << 0)
+#define XAS_BANK_PLAYER_DURATION_MAX 10.0f
+
+#define XAS_BANK_PLAYER_NONE 0
+#define XAS_BANK_PLAYER_LOOP (1 << 0)
+#define XAS_BANK_PLAYER_SCALE_TIME (1 << 1)
+#define XAS_BANK_PLAYER_SCALE_PITCH (1 << 2)
+
+#define XAS_BANK_PLAYER_SOLA_SEQUENCE 100
+#define XAS_BANK_PLAYER_SOLA_OVERLAP 20
+#define XAS_BANK_PLAYER_SOLA_WINDOW 15
+
+#define XAS_BANK_PLAYER_SOLA_FLAT_DURATION \
+ (XAS_BANK_PLAYER_SOLA_SEQUENCE - 2 * (XAS_BANK_PLAYER_SOLA_OVERLAP))
+
+#define XAS_BANK_PLAYER_SOLA_SEQUENCE_SKIP(scale) \
+ ((XAS_BANK_PLAYER_SOLA_SEQUENCE - XAS_BANK_PLAYER_SOLA_OVERLAP) * scale)
enum xas_bank_player_status {
XAS_BANK_PLAYER_STOPPED,
@@ -35,10 +49,20 @@ typedef struct _xas_bank_player {
enum xas_bank_player_status status;
int flags;
- float gain;
+ float gain,
+ duration,
+ pitch;
size_t entry,
index;
+
+ void *buffer;
+ size_t buffer_size;
+
+ size_t sola_sequence,
+ sola_overlap,
+ sola_window,
+ sola_flat;
} xas_bank_player;
xas_bank *xas_bank_new(xas_audio_format format,
@@ -66,6 +90,10 @@ void xas_bank_player_destroy(xas_bank_player *player);
void xas_bank_player_set_gain(xas_bank_player *player, float gain);
+void xas_bank_player_set_duration(xas_bank_player *player, float factor);
+
+void xas_bank_player_set_pitch(xas_bank_player *player, float factor);
+
int xas_bank_player_set_entry(xas_bank_player *player, size_t entry);
int xas_bank_player_start(xas_bank_player *player);