summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-03-11 22:29:10 +0100
committerkdx <kikoodx@paranoici.org>2023-03-11 22:29:10 +0100
commit2bbc1ff9cb14f322042fced03f9fffdd7d9cb044 (patch)
tree643c3805c61d295676bbce2c52eb83b7f6a502d9
parent26ef4ead5c75a48513e1aac45dcf3761ce943629 (diff)
downloadmusiclab-2bbc1ff9cb14f322042fced03f9fffdd7d9cb044.tar.gz
i'm boredHEADmain
-rw-r--r--clap.wavbin0 -> 38792 bytes
-rw-r--r--main.c44
2 files changed, 43 insertions, 1 deletions
diff --git a/clap.wav b/clap.wav
new file mode 100644
index 0000000..4deb8d4
--- /dev/null
+++ b/clap.wav
Binary files differ
diff --git a/main.c b/main.c
index f53e042..0932d7d 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,11 @@
#include <SDL2/SDL.h>
+#include <SDL2/SDL_events.h>
#include <SDL2/SDL_mixer.h>
+#include <SDL2/SDL_timer.h>
#include <stdio.h>
+#define NUM_CLAPS 10
+
int main(int argc, char **argv) {
(void)argc, (void)argv;
@@ -40,6 +44,44 @@ int main(int argc, char **argv) {
if (Mix_AllocateChannels(69) != 69)
fprintf(stderr, "%s\n", Mix_GetError());
- /* Cleanup is handled by previous atexit calls. */
+ Mix_Chunk *claps[NUM_CLAPS];
+ for (int i = 0; i < NUM_CLAPS; i++) {
+ claps[i] = Mix_LoadWAV("clap.wav");
+ if (claps[i] == NULL) {
+ fprintf(stderr, "%s\n", Mix_GetError());
+ for (int k = 0; k < i; k++)
+ Mix_FreeChunk(claps[k]);
+ break;
+ }
+ }
+
+ /* Main loop. */
+ int loop = 1;
+ Uint64 was_ticks = SDL_GetTicks64();
+ int clap_id = 0;
+ while (loop) {
+ /* Handle SDL_QUIT event (likely Ctrl-C). */
+ SDL_Event e;
+ while (SDL_PollEvent(&e))
+ if (e.type == SDL_QUIT)
+ loop = 0;
+
+ const Uint64 ticks = SDL_GetTicks64();
+ if (ticks == was_ticks)
+ continue;
+
+
+ /* Play clap sound every 200 milliseconds. */
+ if (ticks >= was_ticks + 200) {
+ was_ticks = ticks;
+ Mix_PlayChannel(-1, claps[clap_id], 0);
+ clap_id = (clap_id + 1) % NUM_CLAPS;
+ }
+ }
+
+ /* Most of cleanup is handled by previous atexit calls, although we
+ * still need to manually free audio chunks. */
+ for (int i = 0; i < NUM_CLAPS; i++)
+ Mix_FreeChunk(claps[i]);
return 0;
}