diff options
author | kdx <kikoodx@paranoici.org> | 2023-03-11 22:29:10 +0100 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-03-11 22:29:10 +0100 |
commit | 2bbc1ff9cb14f322042fced03f9fffdd7d9cb044 (patch) | |
tree | 643c3805c61d295676bbce2c52eb83b7f6a502d9 | |
parent | 26ef4ead5c75a48513e1aac45dcf3761ce943629 (diff) | |
download | musiclab-main.tar.gz |
-rw-r--r-- | clap.wav | bin | 0 -> 38792 bytes | |||
-rw-r--r-- | main.c | 44 |
2 files changed, 43 insertions, 1 deletions
diff --git a/clap.wav b/clap.wav Binary files differnew file mode 100644 index 0000000..4deb8d4 --- /dev/null +++ b/clap.wav @@ -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; } |