From 4674ef57800c28218039a44364b45aa4fd526862 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Fri, 17 May 2024 18:55:50 +0300
Subject: [PATCH] update after SDL3 SDL_MIX_MAXVOLUME removal and SDL_MixAudio
api change
---
external/SDL | 2 +-
include/SDL3_mixer/SDL_mixer.h | 2 +-
src/mixer.c | 18 ++++++++++--------
src/music.c | 6 +++---
4 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/external/SDL b/external/SDL
index 7cddde32..961488b0 160000
--- a/external/SDL
+++ b/external/SDL
@@ -1 +1 @@
-Subproject commit 7cddde32acf7e22430603f87a93359d979724711
+Subproject commit 961488b0dc992365adcc7f9c668da5e62afa3e00
diff --git a/include/SDL3_mixer/SDL_mixer.h b/include/SDL3_mixer/SDL_mixer.h
index 90acfa0d..c371b925 100644
--- a/include/SDL3_mixer/SDL_mixer.h
+++ b/include/SDL3_mixer/SDL_mixer.h
@@ -187,7 +187,7 @@ extern DECLSPEC void SDLCALL Mix_Quit(void);
#define MIX_DEFAULT_FREQUENCY 44100
#define MIX_DEFAULT_FORMAT SDL_AUDIO_S16
#define MIX_DEFAULT_CHANNELS 2
-#define MIX_MAX_VOLUME SDL_MIX_MAXVOLUME /* Volume of a chunk */
+#define MIX_MAX_VOLUME 128 /* Volume of a chunk */
/**
* The internal format for an audio chunk
diff --git a/src/mixer.c b/src/mixer.c
index 4a61ae55..4d2704ca 100644
--- a/src/mixer.c
+++ b/src/mixer.c
@@ -396,6 +396,7 @@ mix_channels(void *udata, SDL_AudioStream *astream, int len, int total)
}
if (mix_channel[i].playing > 0) {
int volume = (master_vol * (mix_channel[i].volume * mix_channel[i].chunk->volume)) / (MIX_MAX_VOLUME * MIX_MAX_VOLUME);
+ float fvolume = (float)volume / (float)MIX_MAX_VOLUME;
int index = 0;
int remaining = len;
while (mix_channel[i].playing > 0 && index < len) {
@@ -406,7 +407,7 @@ mix_channels(void *udata, SDL_AudioStream *astream, int len, int total)
}
mix_input = Mix_DoEffects(i, mix_channel[i].samples, mixable);
- SDL_MixAudioFormat(stream+index, mix_input, mixer.format, mixable, volume);
+ SDL_MixAudio(stream+index, mix_input, mixer.format, mixable, fvolume);
if (mix_input != mix_channel[i].samples)
SDL_free(mix_input);
@@ -422,6 +423,7 @@ mix_channels(void *udata, SDL_AudioStream *astream, int len, int total)
/* Update the volume after the application callback */
volume = (master_vol * (mix_channel[i].volume * mix_channel[i].chunk->volume)) / (MIX_MAX_VOLUME * MIX_MAX_VOLUME);
+ fvolume = (float)volume / (float)MIX_MAX_VOLUME;
}
}
@@ -435,7 +437,7 @@ mix_channels(void *udata, SDL_AudioStream *astream, int len, int total)
}
mix_input = Mix_DoEffects(i, mix_channel[i].chunk->abuf, remaining);
- SDL_MixAudioFormat(stream+index, mix_input, mixer.format, remaining, volume);
+ SDL_MixAudio(stream+index, mix_input, mixer.format, remaining, fvolume);
if (mix_input != mix_channel[i].chunk->abuf)
SDL_free(mix_input);
@@ -530,16 +532,16 @@ int Mix_OpenAudio(SDL_AudioDeviceID devid, const SDL_AudioSpec *spec)
mix_channel[i].chunk = NULL;
mix_channel[i].playing = 0;
mix_channel[i].looping = 0;
- mix_channel[i].volume = SDL_MIX_MAXVOLUME;
- mix_channel[i].fade_volume = SDL_MIX_MAXVOLUME;
- mix_channel[i].fade_volume_reset = SDL_MIX_MAXVOLUME;
+ mix_channel[i].volume = MIX_MAX_VOLUME;
+ mix_channel[i].fade_volume = MIX_MAX_VOLUME;
+ mix_channel[i].fade_volume_reset = MIX_MAX_VOLUME;
mix_channel[i].fading = MIX_NO_FADING;
mix_channel[i].tag = -1;
mix_channel[i].expire = 0;
mix_channel[i].effects = NULL;
mix_channel[i].paused = 0;
}
- Mix_VolumeMusic(SDL_MIX_MAXVOLUME);
+ Mix_VolumeMusic(MIX_MAX_VOLUME);
_Mix_InitEffects();
@@ -1769,8 +1771,8 @@ int Mix_MasterVolume(int volume)
if (volume < 0) {
return prev_volume;
}
- if (volume > SDL_MIX_MAXVOLUME) {
- volume = SDL_MIX_MAXVOLUME;
+ if (volume > MIX_MAX_VOLUME) {
+ volume = MIX_MAX_VOLUME;
}
SDL_AtomicSet(&master_volume, volume);
return prev_volume;
diff --git a/src/music.c b/src/music.c
index 90a82e3d..1299763a 100644
--- a/src/music.c
+++ b/src/music.c
@@ -317,7 +317,7 @@ int music_pcm_getaudio(void *context, void *data, int bytes, int volume,
if (volume == MIX_MAX_VOLUME) {
dst += consumed;
} else {
- SDL_MixAudioFormat(snd, dst, music_spec.format, (Uint32)consumed, volume);
+ SDL_MixAudio(snd, dst, music_spec.format, (Uint32)consumed, volume/(float)MIX_MAX_VOLUME);
snd += consumed;
}
len -= consumed;
@@ -1193,8 +1193,8 @@ int Mix_VolumeMusic(int volume)
if (volume < 0) {
return prev_volume;
}
- if (volume > SDL_MIX_MAXVOLUME) {
- volume = SDL_MIX_MAXVOLUME;
+ if (volume > MIX_MAX_VOLUME) {
+ volume = MIX_MAX_VOLUME;
}
music_volume = volume;
Mix_LockAudio();