diff options
author | pryazha <pryadeiniv@mail.ru> | 2025-06-15 16:07:54 +0500 |
---|---|---|
committer | pryazha <pryadeiniv@mail.ru> | 2025-06-15 16:07:54 +0500 |
commit | f30a4eba44c77d5c743fe9308dc697a3225e8dd8 (patch) | |
tree | c171da2e8d1127409e2ffe9e56e2e027bac48e28 /audio.h | |
parent | 92a8eb610f40c9770569ca63ca1bd705a6d3497d (diff) |
i don't even know
Diffstat (limited to 'audio.h')
-rw-r--r-- | audio.h | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -0,0 +1,68 @@ +extern i32 load_vorbis(arena_t *arena, sound_t *sounds, const char *filename); +extern void play_sound(sound_t *sounds, sound_queue_t *queue, sound_queue_node_t *nodes, i32 id); + +i32 find_sound(sound_t *sounds, const char *name) +{ + for (i32 i = 0; i < MAX_SOUNDS_LOADED; i++) { + sound_t *sound = sounds+i; + if (streq(sound->name, name)) + return i; + } + return -1; +} + +i32 load_sound(sound_t *sounds, sound_t new_sound) +{ + assert(sounds); + + i32 i; + sound_t *sound; + for (i = 0; i < MAX_SOUNDS_LOADED; ++i) { + sound = sounds+i; + if (!sound->data) + break; + } + + if (i == MAX_SOUNDS_LOADED) { + printf("warning: max sounds loaded\n"); + return -1; + } + + *sound = new_sound; + + return i; +} + +i32 enqueue_sound(sound_queue_t *queue, sound_queue_node_t *nodes, sound_t *sound) +{ + if (queue->count == MAX_SOUNDS_PLAYING) + return 0; + + sound_queue_node_t *node; + for (i32 i = 0; i < MAX_SOUNDS_PLAYING; ++i) { + node = nodes+i; + if (!node->sound) + break; + } + + node->sound = sound; + + dllpushfront(queue->first, queue->last, node); + + queue->count++; + + return 1; +} + +sound_t *dequeue_sound(sound_queue_t *queue) +{ + if (queue->count == 0) + return 0; + + sound_t *sound = queue->first->sound; + queue->first->sound = 0; + dllremove(queue->first, queue->last, queue->first); + queue->count--; + + return sound; +} |