From d408944a8c0ce626ff35c80b6b6e5fb2f7dc1fb9 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 6 Mar 2022 20:10:57 -0500 Subject: Implement xas_bank_player_set_flags() Implement xas_bank_player_set_flags() to allow setting certain playback flags, such as, XAS_BANK_PLAYER_LOOP --- include/xas/bank.h | 6 ++++++ src/bank.c | 13 ++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/include/xas/bank.h b/include/xas/bank.h index aed01ab..716ad64 100644 --- a/include/xas/bank.h +++ b/include/xas/bank.h @@ -8,6 +8,9 @@ #define XAS_BANK_PLAYER_DEFAULT_GAIN 1.0f +#define XAS_BANK_PLAYER_NONE 0 +#define XAS_BANK_PLAYER_LOOP (1 << 0) + enum xas_bank_player_status { XAS_BANK_PLAYER_STOPPED, XAS_BANK_PLAYER_PLAYING, @@ -29,6 +32,7 @@ typedef struct _xas_bank_player { xas_bank *bank; enum xas_bank_player_status status; + int flags; float gain; @@ -63,6 +67,8 @@ int xas_bank_player_start(xas_bank_player *player); int xas_bank_player_stop(xas_bank_player *player); +int xas_bank_player_set_flags(xas_bank_player *player, int flags); + int xas_bank_player_playing(xas_bank_player *player); xas_audio_stream *xas_bank_player_stream_new(xas_bank_player *player); diff --git a/src/bank.c b/src/bank.c index b7a3f0a..20a4569 100644 --- a/src/bank.c +++ b/src/bank.c @@ -140,6 +140,7 @@ xas_bank_player *xas_bank_player_new(xas_bank *bank) { player->bank = bank; player->status = XAS_BANK_PLAYER_STOPPED; player->gain = XAS_BANK_PLAYER_DEFAULT_GAIN; + player->flags = XAS_BANK_PLAYER_NONE; player->entry = 0; player->index = 0; @@ -195,6 +196,12 @@ int xas_bank_player_stop(xas_bank_player *player) { return 0; } +int xas_bank_player_set_flags(xas_bank_player *player, int flags) { + player->flags = flags; + + return 0; +} + int xas_bank_player_playing(xas_bank_player *player) { return player->status == XAS_BANK_PLAYER_PLAYING; } @@ -229,7 +236,11 @@ static ssize_t stream_fill(xas_bank_player *player, index_o += amount; if (player->index == entry->duration) { - xas_bank_player_stop(player); + if (player->flags & XAS_BANK_PLAYER_LOOP) { + player->index = 0; + } else { + xas_bank_player_stop(player); + } } } else { xas_audio_zero(bank->format, dest, index_o, left); -- cgit v1.2.3