Mercurial > molko
diff src/libmlk-core/core/music.c @ 379:67c1c46af2c8
core: replace SDL2_mixer with OpenAL, closes #2528 @3h
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 05 Jan 2022 12:45:17 +0100 |
parents | 460c78706989 |
children | 222045c513ec |
line wrap: on
line diff
--- a/src/libmlk-core/core/music.c Sun Jan 02 10:22:48 2022 +0100 +++ b/src/libmlk-core/core/music.c Wed Jan 05 12:45:17 2022 +0100 @@ -19,12 +19,13 @@ #include <assert.h> #include <string.h> -#include <SDL_mixer.h> - #include "error.h" #include "music.h" #include "vfs.h" #include "vfs_p.h" +#include "sys_p.h" + +#define SOURCE(mus) ((const struct audiostream *)mus->handle)->source int music_open(struct music *mus, const char *path) @@ -32,8 +33,8 @@ assert(mus); assert(path); - if (!(mus->handle = Mix_LoadMUS(path))) - return errorf("%s", SDL_GetError()); + if (!(mus->handle = audiostream_open(path))) + return -1; return 0; } @@ -44,11 +45,8 @@ assert(mus); assert(buffer); - SDL_RWops *ops; - - if (!(ops = SDL_RWFromConstMem(buffer, buffersz)) || - !(mus->handle = Mix_LoadMUS_RW(ops, 1))) - return errorf("%s", SDL_GetError()); + if (!(mus->handle = audiostream_openmem(buffer, buffersz))) + return -1; return 0; } @@ -59,13 +57,6 @@ assert(mus); assert(vfs_file_ok(file)); - SDL_RWops *ops; - - if (!(ops = vfs_to_rw(file))) - return -1; - if (!(mus->handle = Mix_LoadMUS_RW(ops, 1))) - return errorf("%s", SDL_GetError()); - return 0; } @@ -76,49 +67,43 @@ } int -music_play(struct music *mus, enum music_flags flags, unsigned int fadein) +music_play(struct music *mus, enum music_flags flags) { assert(mus); - int loops = flags & MUSIC_LOOP ? -1 : 1; - int ret; + if (flags & MUSIC_LOOP) + alSourcei(SOURCE(mus), AL_LOOPING, AL_TRUE); + else + alSourcei(SOURCE(mus), AL_LOOPING, AL_TRUE); - if (fadein > 0) - ret = Mix_FadeInMusic(mus->handle, loops, fadein); - else - ret = Mix_PlayMusic(mus->handle, loops); - - if (ret < 0) - return errorf("%s", SDL_GetError()); + alSourceRewind(SOURCE(mus)); + alSourcePlay(SOURCE(mus)); return 0; } -int -music_playing(void) +void +music_pause(struct music *mus) { - return Mix_PlayingMusic(); -} + assert(music_ok(mus)); -void -music_pause(void) -{ - Mix_PauseMusic(); + alSourcePause(SOURCE(mus)); } void -music_resume(void) +music_resume(struct music *mus) { - Mix_ResumeMusic(); + assert(music_ok(mus)); + + alSourcePlay(SOURCE(mus)); } void -music_stop(unsigned int fadeout) +music_stop(struct music *mus) { - if (fadeout > 0) - Mix_FadeOutMusic(fadeout); - else - Mix_HaltMusic(); + assert(music_ok(mus)); + + alSourceStop(SOURCE(mus)); } void @@ -127,8 +112,8 @@ assert(mus); if (mus->handle) { - Mix_HaltMusic(); - Mix_FreeMusic(mus->handle); + music_stop(mus); + audiostream_finish(mus->handle); } memset(mus, 0, sizeof (*mus));