aboutsummaryrefslogtreecommitdiff
path: root/src/audio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio.c')
-rw-r--r--src/audio.c55
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;
+}