Skip to content

Commit

Permalink
Slightly optimized and fixed float SDL_MixAudioFormat
Browse files Browse the repository at this point in the history
  • Loading branch information
0x1F9F1 authored and slouken committed Apr 15, 2024
1 parent 33f28d6 commit 46cecc4
Showing 1 changed file with 14 additions and 18 deletions.
32 changes: 14 additions & 18 deletions src/audio/SDL_mixer.c
Expand Up @@ -231,57 +231,53 @@ int SDL_MixAudioFormat(Uint8 *dst, const Uint8 *src, SDL_AudioFormat format,

case SDL_AUDIO_F32LE:
{
const float fmaxvolume = 1.0f / ((float)SDL_MIX_MAXVOLUME);
const float fvolume = (float)volume;
const float fvolume = volume / ((float)SDL_MIX_MAXVOLUME);
const float *src32 = (float *)src;
float *dst32 = (float *)dst;
float src1, src2;
double dst_sample;
// !!! FIXME: are these right?
const double max_audioval = 3.402823466e+38F;
const double min_audioval = -3.402823466e+38F;
float dst_sample;
const float max_audioval = 1.0f;
const float min_audioval = -1.0f;

len /= 4;
while (len--) {
src1 = ((SDL_SwapFloatLE(*src32) * fvolume) * fmaxvolume);
src1 = SDL_SwapFloatLE(*src32) * fvolume;
src2 = SDL_SwapFloatLE(*dst32);
src32++;

dst_sample = ((double)src1) + ((double)src2);
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
*(dst32++) = SDL_SwapFloatLE((float)dst_sample);
*(dst32++) = SDL_SwapFloatLE(dst_sample);
}
} break;

case SDL_AUDIO_F32BE:
{
const float fmaxvolume = 1.0f / ((float)SDL_MIX_MAXVOLUME);
const float fvolume = (float)volume;
const float fvolume = volume / ((float)SDL_MIX_MAXVOLUME);
const float *src32 = (float *)src;
float *dst32 = (float *)dst;
float src1, src2;
double dst_sample;
// !!! FIXME: are these right?
const double max_audioval = 3.402823466e+38F;
const double min_audioval = -3.402823466e+38F;
float dst_sample;
const float max_audioval = 1.0f;
const float min_audioval = -1.0f;

len /= 4;
while (len--) {
src1 = ((SDL_SwapFloatBE(*src32) * fvolume) * fmaxvolume);
src1 = SDL_SwapFloatBE(*src32) * fvolume;
src2 = SDL_SwapFloatBE(*dst32);
src32++;

dst_sample = ((double)src1) + ((double)src2);
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
*(dst32++) = SDL_SwapFloatBE((float)dst_sample);
*(dst32++) = SDL_SwapFloatBE(dst_sample);
}
} break;

Expand Down

0 comments on commit 46cecc4

Please sign in to comment.