diff options
Diffstat (limited to 'src/audio.c')
-rw-r--r-- | src/audio.c | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/audio.c b/src/audio.c index bc139a2..6a11bc4 100644 --- a/src/audio.c +++ b/src/audio.c @@ -1,33 +1,72 @@ -#include <SDL2/SDL_audio.h> +#include <assert.h> +#include <unistd.h> #include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> #include <SDL2/SDL.h> #include <SDL2/SDL_mixer.h> #include "base.h" -#define MIXER_FLAGS MIX_INIT_OGG | MIX_INIT_FLAC - -int main (int argc, char *argv[] ) { +#define MIXER_FLAGS (MIX_INIT_FLAC | MIX_INIT_OGG) +bool initSDL(void) { // initialization of SDLs audio system and the mixer if (SDL_Init(SDL_INIT_AUDIO) != 0) { - fprintf(stderr, "error initializing sdl_mixer: %s\n", SDL_GetError()); + fprintf(stderr, "error initializing SDL_audio: %s\n", SDL_GetError()); + exit(EXIT_FAILURE); } s32 mixflags = Mix_Init(MIXER_FLAGS); if ((mixflags & MIXER_FLAGS) != mixflags) { - fprintf(stderr, "error initializing sdl_mixer: %s\n", Mix_GetError()); + fprintf(stderr, "error initializing SDL_mixer: %s\n", Mix_GetError()); + exit(EXIT_FAILURE); } // setting up the default audio device for playback (using common defaults) - Mix_OpenAudio(48000, AUDIO_F32SYS, 2, 2048); + if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, AUDIO_S16SYS, MIX_DEFAULT_CHANNELS, 2048) != 0) { + fprintf(stderr, "error opening audio device: %s\n", Mix_GetError()); + exit(EXIT_FAILURE); + } + return true; +} +void cleanup(Mix_Music* musicfile) { + Mix_HaltMusic(); + Mix_FreeMusic(musicfile); Mix_CloseAudio(); Mix_Quit(); SDL_Quit(); - return 0; } +int main (int argc, char **argv) { + + bool initialized = initSDL(); + assert(initialized == true); + + Mix_Music *musicfile = NULL; + musicfile = Mix_LoadMUS(argv[1]); + if (musicfile == NULL) { + fprintf(stderr, "error opening file: %s\n", Mix_GetError()); + exit(EXIT_FAILURE); + } + + if (Mix_PlayMusic(musicfile, 0) == -1) { + fprintf(stderr, "error playing music: '%s'\n", argv[1]); + } + + fprintf(stderr, "currently playing: '%s'\n", argv[1]); + + u8 key; + + while (Mix_PlayingMusic() != 0) { + if (Mix_PlayingMusic() == 0) break; + if (read(STDIN_FILENO, &key, 1) != 1 || key == 'q') break; + } + + cleanup(musicfile); + return 0; +} |