-[NEW] Precàrrega de la música
This commit is contained in:
@@ -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);
|
|
||||||
//auto mus = Mix_LoadMUS_RW(rwops, 1);
|
|
||||||
//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;
|
musica_actual = filename;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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 = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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...)
|
||||||
|
|||||||
@@ -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,9 +140,12 @@ 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()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user