diff --git a/source/core/audio/audio.cpp b/source/core/audio/audio.cpp index d5fbd5b..7e5e1a6 100644 --- a/source/core/audio/audio.cpp +++ b/source/core/audio/audio.cpp @@ -51,8 +51,6 @@ void Audio::playMusic(const std::string& name, const int loop, const int crossfa return; } - if (!music_enabled_) { return; } - auto* resource = AudioResource::getMusic(name); if (resource == nullptr) { return; } @@ -62,7 +60,7 @@ void Audio::playMusic(const std::string& name, const int loop, const int crossfa // Reprodueix la música per punter (amb crossfade opcional) void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms) { - if (!music_enabled_ || music == nullptr) { return; } + if (music == nullptr) { return; } playMusicInternal(music, loop, crossfade_ms); // Si el Ja::Music es va crear con filename (loadMusic con 3 arguments), el @@ -72,9 +70,12 @@ void Audio::playMusic(Ja::Music* music, const int loop, const int crossfade_ms) } // Camí comú dels dos overloads: fa el dispatch crossfade vs stop+play i -// actualitza el loop cachejat. Els callers s'encarreguen del gating -// (music_enabled_, nullptr, same-track early return) y del nom. L'estat el -// manté Ja (Ja::playMusic posa PLAYING al Ja::Music* corresponent). +// actualitza el loop cachejat. Els callers s'encarreguen del same-track early +// return i del nom. El gate de música deshabilitada NO atura la reproducció: +// effectiveVolume porta el volum efectiu a 0 i la pista continua sonant +// silenciada, per garantir que reactivar la música la torne a sentir sense +// haver de reiniciar la pista. L'estat el manté Ja (Ja::playMusic posa +// PLAYING al Ja::Music* corresponent). void Audio::playMusicInternal(Ja::Music* music, const int loop, const int crossfade_ms) { const bool CURRENTLY_PLAYING = (getMusicState() == MusicState::PLAYING); if (crossfade_ms > 0 && CURRENTLY_PLAYING) { @@ -91,41 +92,35 @@ void Audio::playMusicInternal(Ja::Music* music, const int loop, const int crossf // Pausa la música (l'estat el transiciona Engine::pauseMusic) void Audio::pauseMusic() { - if (music_enabled_ && getMusicState() == MusicState::PLAYING) { + if (getMusicState() == MusicState::PLAYING) { engine_->pauseMusic(); } } // Continua la música pausada (l'estat el transiciona Engine::resumeMusic) void Audio::resumeMusic() { - if (music_enabled_ && getMusicState() == MusicState::PAUSED) { + if (getMusicState() == MusicState::PAUSED) { engine_->resumeMusic(); } } // Atura la música (l'estat el transiciona Engine::stopMusic) void Audio::stopMusic() { - if (music_enabled_) { - engine_->stopMusic(); - } + engine_->stopMusic(); } void Audio::setMusicSpeed(float ratio) { - if (music_enabled_) { - engine_->setMusicSpeed(ratio); - } + engine_->setMusicSpeed(ratio); } // Reprodueix un so per nom void Audio::playSound(const std::string& name, Group group) { - if (sound_enabled_) { - engine_->playSound(AudioResource::getSound(name), 0, static_cast(group)); - } + engine_->playSound(AudioResource::getSound(name), 0, static_cast(group)); } // Reprodueix un so per punter directe void Audio::playSound(Ja::Sound* sound, Group group) { - if (sound_enabled_ && sound != nullptr) { + if (sound != nullptr) { engine_->playSound(sound, 0, static_cast(group)); } } @@ -136,7 +131,6 @@ void Audio::playSound(Ja::Sound* sound, Group group) { // Si l'engine torna -1 (sense canal lliure) o el so no existeix, no fem // la crida al ratio — sin efectes col·laterals. void Audio::playSound(const std::string& name, Group group, float speed) { - if (!sound_enabled_) { return; } auto* sound = AudioResource::getSound(name); if (sound == nullptr) { return; } const int CH = engine_->playSound(sound, 0, static_cast(group)); @@ -149,7 +143,6 @@ void Audio::playSound(const std::string& name, Group group, float speed) { // existeix o l'engine retorna -1 (sin de canals d'efecte plé), cau a playSound // sec — l'usuari sent el so aún que la cua no s'apliqui. void Audio::playSoundWithEcho(const std::string& name, const std::string& preset_name, Group group) { - if (!sound_enabled_) { return; } auto* sound = AudioResource::getSound(name); if (sound == nullptr) { return; } @@ -168,7 +161,6 @@ void Audio::playSoundWithEcho(const std::string& name, const std::string& preset // Reprodueix un so processat per un reverb definit a sounds.yaml. Mateix // fallback que playSoundWithEcho. void Audio::playSoundWithReverb(const std::string& name, const std::string& preset_name, Group group) { - if (!sound_enabled_) { return; } auto* sound = AudioResource::getSound(name); if (sound == nullptr) { return; } @@ -186,14 +178,12 @@ void Audio::playSoundWithReverb(const std::string& name, const std::string& pres // Atura tots los sons void Audio::stopAllSounds() { - if (sound_enabled_) { - engine_->stopChannel(-1); - } + engine_->stopChannel(-1); } // Fa una fosa de sortida de la música void Audio::fadeOutMusic(int milliseconds) { - if (music_enabled_ && getMusicState() == MusicState::PLAYING) { + if (getMusicState() == MusicState::PLAYING) { engine_->fadeOutMusic(milliseconds); } } @@ -269,12 +259,12 @@ void Audio::applySettings(const Config& config) { enable(config_.enabled); } -// Estableix l'estat general +// Estableix l'estat general. Re-aplica els volums actuals; effectiveVolume +// retalla a 0 quan enabled_ és false, sense perdre els valors guardats. void Audio::enable(bool value) { enabled_ = value; - - setSoundVolume(enabled_ ? config_.sound_volume : MIN_VOLUME); - setMusicVolume(enabled_ ? config_.music_volume : MIN_VOLUME); + setSoundVolume(config_.sound_volume); + setMusicVolume(config_.music_volume); } // Estableix l'estat dels sons i reaplica el volum porque los canals actius