- Llevat el apanyo per a usar oggs quan me deien mp3. Ja no fa falta.

- Arreglat el leak de memòria al carregar música.
This commit is contained in:
2023-10-13 14:51:22 +02:00
parent d20bc2ef73
commit a9357c6638
2 changed files with 20 additions and 26 deletions

View File

@@ -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);
char *buffer = file::getFileBuffer(filename, filesize);
const Mix_Music* m = 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);
if (m==nullptr) return nullptr;
if (m==nullptr) {
printf("FAILED!\n");
} else {
printf("OK!\n");
}
return m;
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

View File

@@ -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