diff --git a/source/gamestate_sequence.cpp b/source/gamestate_sequence.cpp index 414eccf..56c6684 100644 --- a/source/gamestate_sequence.cpp +++ b/source/gamestate_sequence.cpp @@ -106,7 +106,8 @@ namespace gamestate } else if (command=="PLAYMUSIC") { int res = fscanf(sequence_file, " '%[^']'", text); - audio::playMusic(audio::loadMusic(text)); + audio::loadMusic(text); + audio::playMusic(); } else if (command=="FADEOUT") { draw::fadeout(); diff --git a/source/jaudio.cpp b/source/jaudio.cpp index a0f1b18..a971b48 100644 --- a/source/jaudio.cpp +++ b/source/jaudio.cpp @@ -13,6 +13,9 @@ namespace audio { }; // Dummy structs + static char *buffer = nullptr; + static Mix_Music *music = nullptr; + // Inicialitza el sistema de só void init() { @@ -32,25 +35,25 @@ namespace audio } // Carrega un arxiu de música en format OGG - music *loadMusic(const std::string filename) + const bool loadMusic(const std::string filename) { + if (music != nullptr) { + Mix_FreeMusic(music); + free(buffer); + } int filesize=0; - char *buffer = file::getFileBuffer(filename, filesize); - const Mix_Music* m = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); + buffer = file::getFileBuffer(filename, filesize); + music = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); - if (m==nullptr) return nullptr; + if (music==nullptr) return false; - music *mus = (music *)malloc(sizeof(music)); - mus->buffer = buffer; - mus->music = (void*)m; - - return mus; + return true; } // Comença a reproduïr la música en questió - void playMusic(const music *mus, const int loop) + void playMusic(const int loop) { - if (Mix_PlayMusic((Mix_Music *)mus->music, loop) == -1) { + if (Mix_PlayMusic(music, loop) == -1) { printf("Failed Mix_PlayMusic()\n"); } } @@ -96,14 +99,6 @@ namespace audio } } - // Allibera una música - void deleteMusic(music *mus) - { - Mix_FreeMusic((Mix_Music *)mus->music); - free(mus->buffer); - free(mus); - } - // Carrega un só des d'un arxiu WAV const sound *loadSound(const std::string filename) { diff --git a/source/jaudio.h b/source/jaudio.h index 141bfa8..f953388 100644 --- a/source/jaudio.h +++ b/source/jaudio.h @@ -23,11 +23,6 @@ namespace audio // Estructures per a gestionar música i só struct sound; - struct music - { - char *buffer; - void *music; - }; /// @brief Inicialitza el sistema de só void init(); @@ -37,13 +32,12 @@ namespace audio /// @brief Carrega un arxiu de música en format OGG /// @param filename nom de l'arxiu - /// @return punter a la música - music *loadMusic(const std::string filename); + /// @return true si tot be, false si ha fallat + const bool loadMusic(const std::string filename); /// @brief Comença a reproduïr la música en questió - /// @param mus punter a la música /// @param loop quants bucles farà (-1=infinit, 0=no repeteix, 1=repeteix 1 vegada...) - void playMusic(const music *mus, const int loop = -1); + void playMusic(const int loop = -1); /// @brief Pausa la música que està sonant ara void pauseMusic(); @@ -61,10 +55,6 @@ namespace audio /// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED) const music_state getMusicState(); - /// @brief Allibera una música - /// @param mus punter a la música a alliberar - void deleteMusic(music *mus); - /// @brief Carrega un só des d'un arxiu WAV /// @param filename nom de l'arxiu /// @return un punter al só