From d8eb90df1afc698d25accd195ce4449d52b3cae8 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 27 Mar 2025 13:48:29 +0100 Subject: [PATCH] =?UTF-8?q?-=20[FIX]=20Arreglada=20la=20pausa=20i=20contin?= =?UTF-8?q?uaci=C3=B3=20de=20m=C3=BAsica=20i=20s=C3=B3=20per=20a=20que=20s?= =?UTF-8?q?iguen=20independents=20-=20[FIX]=20Condicions=20de=20petada=20a?= =?UTF-8?q?l=20stopar=20sons?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jail_audio.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/jail_audio.cpp b/jail_audio.cpp index 31d720a..23c3ffe 100644 --- a/jail_audio.cpp +++ b/jail_audio.cpp @@ -151,7 +151,7 @@ void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) if (!sdlAudioDevice) SDL_CloseAudioDevice(sdlAudioDevice); sdlAudioDevice = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &JA_audioSpec); SDL_Log( (sdlAudioDevice==0) ? "Failed to initialize SDL audio!\n" : "OK!\n"); - SDL_PauseAudioDevice(sdlAudioDevice); + //SDL_PauseAudioDevice(sdlAudioDevice); JA_timerID = SDL_AddTimer(30, JA_UpdateCallback, nullptr); } @@ -216,7 +216,7 @@ void JA_PlayMusic(JA_Music_t *music, const int loop) if (!SDL_PutAudioStreamData(current_music->stream, current_music->buffer, current_music->length)) printf("[ERROR] SDL_PutAudioStreamData failed!\n"); SDL_SetAudioStreamGain(current_music->stream, JA_musicVolume); if (!SDL_BindAudioStream(sdlAudioDevice, current_music->stream)) printf("[ERROR] SDL_BindAudioStream failed!\n"); - SDL_ResumeAudioStreamDevice(current_music->stream); + //SDL_ResumeAudioStreamDevice(current_music->stream); } void JA_PauseMusic() @@ -225,7 +225,8 @@ void JA_PauseMusic() if (!current_music || current_music->state == JA_MUSIC_INVALID) return; current_music->state = JA_MUSIC_PAUSED; - SDL_PauseAudioStreamDevice(current_music->stream); + //SDL_PauseAudioStreamDevice(current_music->stream); + SDL_UnbindAudioStream(current_music->stream); } void JA_ResumeMusic() @@ -234,7 +235,8 @@ void JA_ResumeMusic() if (!current_music || current_music->state == JA_MUSIC_INVALID) return; current_music->state = JA_MUSIC_PLAYING; - SDL_ResumeAudioStreamDevice(current_music->stream); + //SDL_ResumeAudioStreamDevice(current_music->stream); + SDL_BindAudioStream(sdlAudioDevice, current_music->stream); } void JA_StopMusic() @@ -244,7 +246,7 @@ void JA_StopMusic() current_music->pos = 0; current_music->state = JA_MUSIC_STOPPED; - SDL_PauseAudioStreamDevice(current_music->stream); + //SDL_PauseAudioStreamDevice(current_music->stream); SDL_DestroyAudioStream(current_music->stream); current_music->stream = nullptr; } @@ -389,7 +391,8 @@ void JA_PauseChannel(const int channel) if (channels[i].state == JA_CHANNEL_PLAYING) { channels[i].state = JA_CHANNEL_PAUSED; - SDL_PauseAudioStreamDevice(channels[i].stream); + //SDL_PauseAudioStreamDevice(channels[i].stream); + SDL_UnbindAudioStream(channels[i].stream); } } else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) @@ -397,7 +400,8 @@ void JA_PauseChannel(const int channel) if (channels[channel].state == JA_CHANNEL_PLAYING) { channels[channel].state = JA_CHANNEL_PAUSED; - SDL_PauseAudioStreamDevice(channels[channel].stream); + //SDL_PauseAudioStreamDevice(channels[channel].stream); + SDL_UnbindAudioStream(channels[channel].stream); } } } @@ -412,7 +416,8 @@ void JA_ResumeChannel(const int channel) if (channels[i].state == JA_CHANNEL_PAUSED) { channels[i].state = JA_CHANNEL_PLAYING; - SDL_ResumeAudioStreamDevice(channels[i].stream); + //SDL_ResumeAudioStreamDevice(channels[i].stream); + SDL_BindAudioStream(sdlAudioDevice, channels[i].stream); } } else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) @@ -420,7 +425,8 @@ void JA_ResumeChannel(const int channel) if (channels[channel].state == JA_CHANNEL_PAUSED) { channels[channel].state = JA_CHANNEL_PLAYING; - SDL_ResumeAudioStreamDevice(channels[channel].stream); + //SDL_ResumeAudioStreamDevice(channels[channel].stream); + SDL_BindAudioStream(sdlAudioDevice, channels[channel].stream); } } } @@ -433,6 +439,7 @@ void JA_StopChannel(const int channel) { for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) { if (channels[i].state != JA_CHANNEL_FREE) SDL_DestroyAudioStream(channels[i].stream); + channels[channel].stream = nullptr; channels[i].state = JA_CHANNEL_FREE; channels[i].pos = 0; channels[i].sound = NULL; @@ -441,6 +448,7 @@ void JA_StopChannel(const int channel) else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) { if (channels[channel].state != JA_CHANNEL_FREE) SDL_DestroyAudioStream(channels[channel].stream); + channels[channel].stream = nullptr; channels[channel].state = JA_CHANNEL_FREE; channels[channel].pos = 0; channels[channel].sound = NULL;