refactor(audio,transitions): durada de música pre-calculada al loadMusic i Direction (FADE_IN/FADE_OUT) a FadeToBlack

This commit is contained in:
JailDesigner committed 2026-05-06 19:10:18 +02:00
1 parent b6d6ee471c
commit 3f09858203
6 files changed
+58 -10

No files matched your search

+10
View File
@@ -2,6 +2,7 @@
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <cstdio>
#include <memory>
#include <optional>
@@ -564,6 +565,15 @@ namespace Ja {
music->spec.channels = static_cast<int>(INFO.channels);
music->spec.freq = static_cast<int>(INFO.sample_rate);
music->spec.format = SDL_AUDIO_S16;
// Pre-càlcul de la durada en ms a partir del header. stb_vorbis ja
// ha decodificat la informació necessària a `stb_vorbis_open_memory`;
// aquesta consulta no descodifica àudio, només llig el comptador
// de samples. Si el sample_rate fos 0 (header malmès) deixem
// duration_ms a 0.
if (INFO.sample_rate > 0) {
const auto SAMPLES = stb_vorbis_stream_length_in_samples(music->vorbis);
music->duration_ms = static_cast<int>((static_cast<std::uint64_t>(SAMPLES) * 1000ULL) / INFO.sample_rate);
}
music->state = MusicState::STOPPED;
return music.release();