diff --git a/src/engine/audio/audio_engine.cpp b/src/engine/audio/audio_engine.cpp index f9386d3..deb24df 100644 --- a/src/engine/audio/audio_engine.cpp +++ b/src/engine/audio/audio_engine.cpp @@ -95,6 +95,8 @@ void AudioChannel::stop() { m_active = false; m_currentFile = nullptr; m_position = 0; + m_currentSpeed = 1.0f; + m_targetSpeed = 1.0f; } void AudioChannel::setVolume(float vol) { @@ -379,10 +381,12 @@ void AudioEngine::audioCallback(float *buffer, size_t frames) { } } -int AudioEngine::findFreeChannel() const { +int AudioEngine::findFreeChannel() { // Skip channel 0 (reserved for music) for (size_t i = 1; i < MAX_CHANNELS; ++i) { if (!m_channels[i].isActive()) { + // Optionally force a stop to ensure clean state + m_channels[i].stop(); return static_cast(i); } } diff --git a/src/engine/audio/audio_engine.h b/src/engine/audio/audio_engine.h index 803b1e0..9965971 100644 --- a/src/engine/audio/audio_engine.h +++ b/src/engine/audio/audio_engine.h @@ -114,7 +114,7 @@ class AudioEngine { void processCommands(); void mixAudio(float *buffer, size_t frames); - [[nodiscard]] int findFreeChannel() const; + [[nodiscard]] int findFreeChannel(); }; }; // namespace ste \ No newline at end of file