treballant en la classe Audio

This commit is contained in:
2025-03-28 23:27:33 +01:00
parent 31a0ad6fd5
commit d2417f48d9
29 changed files with 321 additions and 253 deletions

129
source/audio.cpp Normal file
View File

@@ -0,0 +1,129 @@
#include "audio.h"
#include "jail_audio.h"
#include "options.h"
#include "resource.h"
#include <SDL3/SDL.h>
// [SINGLETON] Hay que definir las variables estáticas, desde el .h sólo la hemos declarado
Audio *Audio::audio_ = nullptr;
// [SINGLETON] Crearemos el objeto asset con esta función estática
void Audio::init()
{
Audio::audio_ = new Audio();
}
// [SINGLETON] Destruiremos el objeto asset con esta función estática
void Audio::destroy()
{
delete Audio::audio_;
}
// [SINGLETON] Con este método obtenemos el objeto asset y podemos trabajar con él
Audio *Audio::get()
{
return Audio::audio_;
}
// Constructor
Audio::Audio()
{
// Inicializa SDL
if (!SDL_Init(SDL_INIT_AUDIO))
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_AUDIO could not initialize! SDL Error: %s", SDL_GetError());
}
else
{
SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "\n** SDL_AUDIO: INITIALIZING\n");
JA_Init(48000, SDL_AUDIO_S16LE, 2);
enable(options.audio.enabled);
setMusicVolume(options.audio.music.volume);
setSoundVolume(options.audio.sound.volume);
SDL_LogInfo(SDL_LOG_CATEGORY_TEST, "** SDL_AUDIO: INITIALIZATION COMPLETE\n");
}
}
// Destructor
Audio::~Audio()
{
JA_Quit();
}
// Reproduce la música
void Audio::playMusic(const std::string &name, const int loop)
{
if (enabled_ && music_enabled_)
{
JA_PlayMusic(Resource::get()->getMusic(name), loop);
}
}
// Pausa la música
void Audio::pauseMusic()
{
if (enabled_ && music_enabled_)
{
JA_PauseMusic();
}
}
// Detiene la música
void Audio::stopMusic()
{
if (enabled_ && music_enabled_)
{
JA_StopMusic();
}
}
// Reproduce un sonido
void Audio::playSound(const std::string &name)
{
if (enabled_ && sound_enabled_)
{
JA_PlaySound(Resource::get()->getSound(name));
}
}
// Detiene todos los sonidos
void Audio::stopAllSounds()
{
if (enabled_ && sound_enabled_)
{
JA_StopChannel(-1);
}
}
// Realiza un fundido de salida de la música
void Audio::fadeOutMusic(int milliseconds)
{
if (enabled_ && music_enabled_)
{
JA_FadeOutMusic(milliseconds);
}
}
// Establece el volumen de los sonidos
void Audio::setSoundVolume(int volume)
{
if (enabled_ && sound_enabled_)
{
volume = std::clamp(volume, 0, 100);
const int COVERTED_VOLUME = static_cast<int>((volume / 100.0) * 128);
JA_SetSoundVolume(COVERTED_VOLUME);
}
}
// Establece el volumen de la música
void Audio::setMusicVolume(int volume)
{
if (enabled_ && music_enabled_)
{
volume = std::clamp(volume, 0, 100);
const int COVERTED_VOLUME = static_cast<int>((volume / 100.0) * 128);
JA_SetMusicVolume(COVERTED_VOLUME);
}
}