-[NEW] Precàrrega de la música

This commit is contained in:
2026-03-04 08:13:37 +01:00
parent b31a578731
commit 00c4a08915
3 changed files with 55 additions and 18 deletions

View File

@@ -15,9 +15,11 @@ namespace audio
}; };
//char *music_buffer = nullptr; //char *music_buffer = nullptr;
JA_Music_t *music = nullptr; //JA_Music_t *music = nullptr;
std::vector<sound_cache_t> sounds; std::vector<sound_cache_t> sounds;
std::vector<sound_cache_t> songs;
std::string musica_actual = ""; std::string musica_actual = "";
int musica = -1;
// Inicialitza el sistema de só // Inicialitza el sistema de só
void init() void init()
@@ -30,49 +32,71 @@ namespace audio
// Tanca el sistema de só (no shit, sherlock) // Tanca el sistema de só (no shit, sherlock)
void quit() void quit()
{ {
if (music) JA_DeleteMusic(music); //if (music) JA_DeleteMusic(music);
for (auto sound : songs) JA_DeleteSound(sound.chunk);
songs.clear();
for (auto sound : sounds) JA_DeleteSound(sound.chunk); // Mix_FreeChunk(sound.chunk); for (auto sound : sounds) JA_DeleteSound(sound.chunk); // Mix_FreeChunk(sound.chunk);
sounds.clear(); sounds.clear();
JA_Quit(); // Mix_CloseAudio(); JA_Quit(); // Mix_CloseAudio();
} }
void loadMusic(const std::string filename)
{
int size;
char *buffer = file::getFileBuffer(filename, size);
auto chunk = JA_LoadSound((uint8_t *)buffer, size);
free(buffer);
//auto chunk = Mix_LoadWAV_RW(SDL_RWFromMem(buffer, size), 1);
//if (!chunk) printf("ERROR: %s\n", SDL_GetError());
sound_cache_t sound = { filename, chunk };
songs.push_back(sound);
}
// Comença a reproduïr la música en questió // Comença a reproduïr la música en questió
void playMusic(const std::string filename, const int loop) void playMusic(const std::string filename, const int loop)
{ {
if (!config::isMusicEnabled()) return; if (!config::isMusicEnabled()) return;
// Si hi havia musica carregada, alliberem memòria // Si hi havia musica carregada, alliberem memòria
//if (music_buffer) free(music_buffer); //if (music) JA_DeleteMusic(music); //Mix_FreeMusic(music);
if (music) JA_DeleteMusic(music); //Mix_FreeMusic(music); stopMusic();
//int size;
//char *buffer = file::getFileBuffer(filename, size);
//music = JA_LoadMusic((uint8_t*)buffer, size);
//free(buffer);
//JA_PlayMusic(music, loop);
int size; for (auto song : songs)
char *buffer = file::getFileBuffer(filename, size); {
music = JA_LoadMusic((uint8_t*)buffer, size); if (song.name == filename) {
free(buffer); musica = JA_PlaySound(song.chunk, loop);
//auto rwops = SDL_RWFromMem(music_buffer, size); musica_actual = filename;
//auto mus = Mix_LoadMUS_RW(rwops, 1); return;
//free(music_buffer); // [RZC 03/10/2024] Si allibere el buffer, no funciona la música. Porca miseria! Per aixó l'allibere abans de carregar si ja estava usat. }
//Mix_PlayMusic((Mix_Music *)mus, loop); }
JA_PlayMusic(music, loop);
musica_actual = filename;
} }
// Pausa la música que està sonant ara // Pausa la música que està sonant ara
void pauseMusic() void pauseMusic()
{ {
JA_PauseMusic(); //Mix_PauseMusic(); //JA_PauseMusic(); //Mix_PauseMusic();
if (musica != -1) JA_PauseChannel(musica);
} }
// Continua la música pausada // Continua la música pausada
void resumeMusic() void resumeMusic()
{ {
if (!config::isMusicEnabled()) return; if (!config::isMusicEnabled()) return;
JA_ResumeMusic(); //Mix_ResumeMusic(); //JA_ResumeMusic(); //Mix_ResumeMusic();
if (musica != -1) JA_ResumeChannel(musica);
} }
// Para la música que estava sonant // Para la música que estava sonant
void stopMusic() void stopMusic()
{ {
JA_StopMusic(); //Mix_HaltMusic(); //JA_StopMusic(); //Mix_HaltMusic();
if (musica != -1) JA_StopChannel(musica);
musica = -1;
musica_actual = ""; musica_actual = "";
} }

View File

@@ -27,6 +27,8 @@ namespace audio
/// @brief Tanca el sistema de só /// @brief Tanca el sistema de só
void quit(); void quit();
void loadMusic(const std::string filename);
/// @brief Comença a reproduïr la música des d'un arxiu /// @brief Comença a reproduïr la música des d'un arxiu
/// @param filename nom de l'arxiu /// @param filename nom de l'arxiu
/// @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...)

View File

@@ -112,6 +112,14 @@ void game::init()
draw::init("The Pool", 320, 240, zoom, fullscreen); draw::init("The Pool", 320, 240, zoom, fullscreen);
console::init(); console::init();
printf("Carregant mus_menu.ogg...");
audio::loadMusic("mus_menu.ogg");
printf("Carregant mus_ingame.ogg...");
audio::loadMusic("mus_ingame.ogg");
printf("Carregant mus_gameover.ogg...");
audio::loadMusic("mus_gameover.ogg");
printf("Carregant arxius de só...");
audio::loadSound("snd_logo.wav"); audio::loadSound("snd_logo.wav");
audio::loadSound("snd_walk.wav"); audio::loadSound("snd_walk.wav");
audio::loadSound("snd_push.wav"); audio::loadSound("snd_push.wav");
@@ -132,8 +140,11 @@ void game::init()
current_module = M_GAME; current_module = M_GAME;
modules::game::init(); modules::game::init();
} else } else {
//current_module = M_GAME;
//modules::game::init();
modules::logo::init(); modules::logo::init();
}
} }
bool game::loop() bool game::loop()