- Ara nomes es pot carregar una musica a la vegada. Simplifica la gestió de memòria.

This commit is contained in:
2023-10-13 16:01:49 +02:00
parent 907fccf69c
commit 6e3a0e513e
3 changed files with 19 additions and 33 deletions

View File

@@ -106,7 +106,8 @@ namespace gamestate
} else if (command=="PLAYMUSIC") { } else if (command=="PLAYMUSIC") {
int res = fscanf(sequence_file, " '%[^']'", text); int res = fscanf(sequence_file, " '%[^']'", text);
audio::playMusic(audio::loadMusic(text)); audio::loadMusic(text);
audio::playMusic();
} else if (command=="FADEOUT") { } else if (command=="FADEOUT") {
draw::fadeout(); draw::fadeout();

View File

@@ -13,6 +13,9 @@ namespace audio
{ {
}; // Dummy structs }; // Dummy structs
static char *buffer = nullptr;
static Mix_Music *music = nullptr;
// Inicialitza el sistema de só // Inicialitza el sistema de só
void init() void init()
{ {
@@ -32,25 +35,25 @@ namespace audio
} }
// Carrega un arxiu de música en format OGG // 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; int filesize=0;
char *buffer = file::getFileBuffer(filename, filesize); buffer = file::getFileBuffer(filename, filesize);
const Mix_Music* m = Mix_LoadMUS_RW(SDL_RWFromMem(buffer, filesize), 1); 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)); return true;
mus->buffer = buffer;
mus->music = (void*)m;
return mus;
} }
// Comença a reproduïr la música en questió // 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"); 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 // Carrega un só des d'un arxiu WAV
const sound *loadSound(const std::string filename) const sound *loadSound(const std::string filename)
{ {

View File

@@ -23,11 +23,6 @@ namespace audio
// Estructures per a gestionar música i só // Estructures per a gestionar música i só
struct sound; struct sound;
struct music
{
char *buffer;
void *music;
};
/// @brief Inicialitza el sistema de só /// @brief Inicialitza el sistema de só
void init(); void init();
@@ -37,13 +32,12 @@ namespace audio
/// @brief Carrega un arxiu de música en format OGG /// @brief Carrega un arxiu de música en format OGG
/// @param filename nom de l'arxiu /// @param filename nom de l'arxiu
/// @return punter a la música /// @return true si tot be, false si ha fallat
music *loadMusic(const std::string filename); const bool loadMusic(const std::string filename);
/// @brief Comença a reproduïr la música en questió /// @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...) /// @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 /// @brief Pausa la música que està sonant ara
void pauseMusic(); void pauseMusic();
@@ -61,10 +55,6 @@ namespace audio
/// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED) /// @return estat actual de la música (MUSIC_INVALID, MUSIC_PLAYING, MUSIC_PAUSED o MUSIC_STOPPED)
const music_state getMusicState(); 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 /// @brief Carrega un só des d'un arxiu WAV
/// @param filename nom de l'arxiu /// @param filename nom de l'arxiu
/// @return un punter al só /// @return un punter al só