From a6cd12a94469bc6d2039a57b4c6cad72c547bca8 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 20 Apr 2026 11:57:10 +0200 Subject: [PATCH] fix(core/audio): toggle* i enable[Sound|Music] reapliquen volum (PATCH-01) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Abans, toggleEnabled/toggleSound/toggleMusic i les variants sense bool només flipaven el flag intern; els canals actius no notaven el canvi fins a la pròxima crida explícita a setSoundVolume/setMusicVolume — silenciós i fàcil de perdre. Ara: - toggleEnabled passa per enable(bool), que ja reaplicava els volums. - enableSound(bool) i enableMusic(bool) es mouen a audio.cpp i reapliquen el volum gated cap a Ja::*. - Les variants enableSound()/disableSound()/enableMusic()/disableMusic() i els toggles passen per aquestes dues funcions, així que qualsevol camí d'activació produeix el mateix efecte sobre l'estat sonor. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/audit-core-audio.md | 4 ++-- source/core/audio/audio.cpp | 14 ++++++++++++++ source/core/audio/audio.hpp | 22 +++++++++++----------- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/docs/audit-core-audio.md b/docs/audit-core-audio.md index 45ad09e..02c309b 100644 --- a/docs/audit-core-audio.md +++ b/docs/audit-core-audio.md @@ -22,7 +22,7 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic | HC-02 | Formato/canales/freq hardcodeado en 3+ sitios | DONE | | INCONS-02 | Doble `MusicState` + `getRealMusicState` como cache paralelo | PENDING | | HC-01 | Parámetros de audio no configurables (viola convención del proyecto) | DONE | -| PATCH-01 | `toggleEnabled/toggleSound/toggleMusic` no reaplican volumen | PENDING | +| PATCH-01 | `toggleEnabled/toggleSound/toggleMusic` no reaplican volumen | DONE | --- @@ -50,7 +50,7 @@ Los IDs se mantienen estables una vez asignados. Cada entrada apunta al(los) fic | ID | Fichero:línea | Hallazgo | Severidad | Estado | Notas | |----|---------------|----------|-----------|--------|-------| -| PATCH-01 | `audio.hpp:98,105,111` | `toggleEnabled/toggleSound/toggleMusic` sólo flipan el flag; no reaplican volúmenes | Importante | PENDING | Llamar a `enable(!enabled_)` y equivalentes | +| PATCH-01 | `audio.hpp:98,105,111` | `toggleEnabled/toggleSound/toggleMusic` sólo flipan el flag; no reaplican volúmenes | Importante | DONE | `toggle*()` i variants sense bool passen per `enable[Sound|Music](bool)`. Aquestes funcions ara reapliquen el volum cap a `Ja::` perquè els canals actius responguin al toggle | | PATCH-02 | `audio.cpp:98` | `music_.name.clear()` en overload por puntero → `getCurrentMusicName()` miente | Importante | PENDING | Derivar nombre de `Ja::Music::filename` | | PATCH-03 | `audio.cpp:14-21` | `#undef L,C,R,PLAYBACK_*` workaround para macros filtradas por stb_vorbis | Importante | WONTFIX | Documentado; aislar stb_vorbis en TU propio sería más invasivo — se hará con COUP-01 | | PATCH-04 | `jail_audio.hpp:501-507` | `setMusicPosition`/`getMusicPosition` stubs no-op | Importante | PENDING | Borrar si nadie los llama | diff --git a/source/core/audio/audio.cpp b/source/core/audio/audio.cpp index e8dce69..4d3fb5f 100644 --- a/source/core/audio/audio.cpp +++ b/source/core/audio/audio.cpp @@ -207,6 +207,20 @@ void Audio::enable(bool value) { setMusicVolume(enabled_ ? config_.music_volume : MIN_VOLUME); } +// Estableix l'estat dels sons i reaplica el volum perquè els canals actius +// responguin a l'instant (evita que el toggle només surti efecte al pròxim +// setSoundVolume explícit). +void Audio::enableSound(bool value) { + sound_enabled_ = value; + setSoundVolume(config_.sound_volume); +} + +// Estableix l'estat de la música i reaplica el volum per la mateixa raó. +void Audio::enableMusic(bool value) { + music_enabled_ = value; + setMusicVolume(config_.music_volume); +} + // Inicialitza SDL Audio void Audio::initSDLAudio() { if (!SDL_Init(SDL_INIT_AUDIO)) { diff --git a/source/core/audio/audio.hpp b/source/core/audio/audio.hpp index 37c3e52..c5dc874 100644 --- a/source/core/audio/audio.hpp +++ b/source/core/audio/audio.hpp @@ -91,21 +91,21 @@ class Audio { } // --- Configuración general --- - void enable(bool value); // Establecer estado general - void toggleEnabled() { enabled_ = !enabled_; } // Alternar estado general - void applySettings(const Config& config); // Aplica una nova configuració + void enable(bool value); // Establecer estado general (reaplica volums) + void toggleEnabled() { enable(!enabled_); } // Alternar estado general (reaplica volums) + void applySettings(const Config& config); // Aplica una nova configuració // --- Configuración de sonidos --- - void enableSound() { sound_enabled_ = true; } // Habilitar sonidos - void disableSound() { sound_enabled_ = false; } // Deshabilitar sonidos - void enableSound(bool value) { sound_enabled_ = value; } // Establecer estado de sonidos - void toggleSound() { sound_enabled_ = !sound_enabled_; } // Alternar estado de sonidos + void enableSound() { enableSound(true); } // Habilitar sonidos + void disableSound() { enableSound(false); } // Deshabilitar sonidos + void enableSound(bool value); // Establecer estado de sonidos (reaplica volum) + void toggleSound() { enableSound(!sound_enabled_); } // Alternar estado de sonidos (reaplica volum) // --- Configuración de música --- - void enableMusic() { music_enabled_ = true; } // Habilitar música - void disableMusic() { music_enabled_ = false; } // Deshabilitar música - void enableMusic(bool value) { music_enabled_ = value; } // Establecer estado de música - void toggleMusic() { music_enabled_ = !music_enabled_; } // Alternar estado de música + void enableMusic() { enableMusic(true); } // Habilitar música + void disableMusic() { enableMusic(false); } // Deshabilitar música + void enableMusic(bool value); // Establecer estado de música (reaplica volum) + void toggleMusic() { enableMusic(!music_enabled_); } // Alternar estado de música (reaplica volum) // --- Consultas de estado --- [[nodiscard]] auto isEnabled() const -> bool { return enabled_; }