summaryrefslogtreecommitdiff
path: root/audio.c
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-10-12 15:25:23 +0500
committerpryazha <pryadeiniv@mail.ru>2025-10-12 15:25:23 +0500
commit818f818f583881156eb279c71b1359bf2c4f3580 (patch)
tree874e8d2fdc5334bc70925aa87923791f7662ddb8 /audio.c
parent3cf987880e384140bf996c37f820ddeea38bc60e (diff)
change identation, maybe will change back, add own gl functions loading, and glx example
Diffstat (limited to 'audio.c')
-rw-r--r--audio.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/audio.c b/audio.c
new file mode 100644
index 0000000..40d5ac2
--- /dev/null
+++ b/audio.c
@@ -0,0 +1,71 @@
+#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