- 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") {
int res = fscanf(sequence_file, " '%[^']'", text);
audio::playMusic(audio::loadMusic(text));
audio::loadMusic(text);
audio::playMusic();
} else if (command=="FADEOUT") {
draw::fadeout();

View File

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

View File

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