#pragma once #include #include #include #include // Forward-declaració per no incloure jail_audio.hpp (cicle d'inclusió: este // header viu sota los params declarats a jail_audio.hpp, i alhora jail_audio // usa applyEcho/applyReverb). namespace Ja { struct Sound; struct EchoParams; struct ReverbParams; } // namespace Ja // Processadors d'efectes para sons puntuals. Reben un Ja::Sound (qualsevol // format suportat pel decodificador WAV: U8/S16, mono o estèreo) i tornen un // buffer PCM en S16 + el seu spec, llest per empenyer a un SDL_AudioStream. // // El buffer de sortida inclou la cua (decay) generada per l'efecte: per al // reverb, hasta a 1500 ms; para l'eco, hasta a 800 ms. Aquests caps eviten // allargar indefinidament la reproducció cuando los parámetros reinjecten mucho. // // Si el format del so d'origen no es pot processar, retornen std::nullopt // (el caller ha de fer fallback a reproducció seca). namespace AudioEffects { struct ProcessedSound { std::vector bytes; // PCM S16 entrellaçat (LRLRLR... si stereo) SDL_AudioSpec spec; // Format/canals/freqüència del buffer }; [[nodiscard]] auto applyEcho(const Ja::Sound& src, const Ja::EchoParams& params) -> std::optional; [[nodiscard]] auto applyReverb(const Ja::Sound& src, const Ja::ReverbParams& params) -> std::optional; } // namespace AudioEffects