From a9357c66381489db7f862a3231d2178fd0049848 Mon Sep 17 00:00:00 2001 From: JailDoctor Date: Fri, 13 Oct 2023 14:51:22 +0200 Subject: [PATCH] =?UTF-8?q?-=20Llevat=20el=20apanyo=20per=20a=20usar=20ogg?= =?UTF-8?q?s=20quan=20me=20deien=20mp3.=20Ja=20no=20fa=20falta.=20-=20Arre?= =?UTF-8?q?glat=20el=20leak=20de=20mem=C3=B2ria=20al=20carregar=20m=C3=BAs?= =?UTF-8?q?ica.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/jaudio.cpp | 38 ++++++++++++++------------------------ source/jaudio.h | 8 ++++++-- 2 files changed, 20 insertions(+), 26 deletions(-) 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