diff --git a/src/controllers/application_controller.cpp b/src/controllers/application_controller.cpp index d5724a0..bb7d73b 100644 --- a/src/controllers/application_controller.cpp +++ b/src/controllers/application_controller.cpp @@ -92,6 +92,16 @@ void ApplicationController::ProcessFrame(float deltaTime) { sceneService->UpdateScene(deltaTime); } + // Update audio + auto audioService = registry_.GetService(); + if (audioService) { + // Cast to implementation to access Update method + auto audioServiceImpl = std::dynamic_pointer_cast(audioService); + if (audioServiceImpl) { + audioServiceImpl->Update(); + } + } + // Update GUI input to script service if (inputService) { inputService->UpdateGuiInput(); diff --git a/src/services/impl/sdl_audio_service.hpp b/src/services/impl/sdl_audio_service.hpp index 4f91729..162fb46 100644 --- a/src/services/impl/sdl_audio_service.hpp +++ b/src/services/impl/sdl_audio_service.hpp @@ -39,16 +39,17 @@ public: float GetVolume() const override; bool IsBackgroundPlaying() const override; + // Update method to be called regularly (e.g., from main loop) + void Update(); + private: struct AudioData { - std::vector buffer; - size_t position = 0; - bool loop = false; OggVorbis_File vorbisFile; bool isOpen = false; + bool loop = false; + size_t position = 0; }; - static void AudioCallback(void* userdata, Uint8* stream, int len); bool LoadAudioFile(const std::filesystem::path& path, AudioData& audioData); void CleanupAudioData(AudioData& audioData); @@ -56,8 +57,7 @@ private: float volume_ = 1.0f; bool initialized_ = false; - SDL_AudioSpec audioSpec_; - SDL_AudioDeviceID audioDevice_ = 0; + SDL_AudioStream* audioStream_ = nullptr; std::unique_ptr backgroundAudio_; std::mutex audioMutex_;