diff --git a/source/jaudio.cpp b/source/jaudio.cpp index 35b8ae5..a0f1b18 100644 --- a/source/jaudio.cpp +++ b/source/jaudio.cpp @@ -12,9 +12,6 @@ namespace audio struct sound { }; // Dummy structs - struct music - { - }; // Inicialitza el sistema de só void init() @@ -35,34 +32,25 @@ namespace audio } // Carrega un arxiu de música en format OGG - const music *loadMusic(const std::string filename) + music *loadMusic(const std::string filename) { - size_t index = 0; - index = filename.find("mp3", index); - std::string peiv(filename); - peiv.replace(index, 3, "ogg"); - - printf("Loading '%s'...", peiv.c_str()); - int filesize=0; - char *buffer = file::getFileBuffer(peiv, filesize); - const music* m = (music *)Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); - - // [TODO] ATENCIÓ. Ací leakeja com un burro, algo hi ha que inventar, pero el buffer ha de sobreviure tot el temps que dure la musica viva - //free(buffer); + char *buffer = file::getFileBuffer(filename, filesize); + const Mix_Music* m = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); - if (m==nullptr) { - printf("FAILED!\n"); - } else { - printf("OK!\n"); - } - return m; + if (m==nullptr) return nullptr; + + music *mus = (music *)malloc(sizeof(music)); + mus->buffer = buffer; + mus->music = (void*)m; + + return mus; } // Comença a reproduïr la música en questió void playMusic(const music *mus, const int loop) { - if (Mix_PlayMusic((Mix_Music *)mus, loop) == -1) { + if (Mix_PlayMusic((Mix_Music *)mus->music, loop) == -1) { printf("Failed Mix_PlayMusic()\n"); } } @@ -111,7 +99,9 @@ namespace audio // Allibera una música void deleteMusic(music *mus) { - Mix_FreeMusic((Mix_Music *)mus); + Mix_FreeMusic((Mix_Music *)mus->music); + free(mus->buffer); + free(mus); } // Carrega un só des d'un arxiu WAV diff --git a/source/jaudio.h b/source/jaudio.h index 4c6c70e..141bfa8 100644 --- a/source/jaudio.h +++ b/source/jaudio.h @@ -23,7 +23,11 @@ namespace audio // Estructures per a gestionar música i só struct sound; - struct music; + struct music + { + char *buffer; + void *music; + }; /// @brief Inicialitza el sistema de só void init(); @@ -34,7 +38,7 @@ namespace audio /// @brief Carrega un arxiu de música en format OGG /// @param filename nom de l'arxiu /// @return punter a la música - const music *loadMusic(const std::string filename); + music *loadMusic(const std::string filename); /// @brief Comença a reproduïr la música en questió /// @param mus punter a la música