#include "audio.h" struct sound * find_sound(struct prge_context ctx, struct string name) { for (i32 i = 0; i < cache.count; i++) { struct sound *sound = sounds + i; if (strings_equal(sound->name, name)) return sound; } return 0; } struct sound * load_sound(struct sound *sounds, struct sound new_sound) { assert(sounds); i32 i; struct sound *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(struct sound_queue *queue, sound_queue_node_t *nodes, struct sound *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; } struct sound *dequeue_sound(struct sound_queue *queue) { if (queue->count == 0) return 0; struct sound *sound = queue->first->sound; queue->first->sound = 0; dllremove(queue->first, queue->last, queue->first); queue->count--; return sound; } #endif