From f9bf1c9d67d7e7cf0c5f257be3a30b2908cc1ccc Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 20 Aug 2026 23:40:40 +0300
Subject: [PATCH] timidity: fix S32 and F32 output:
timidity internal output isn't full-width 32 bits:
GUARD_BITS should be taken into account.
Reference issue: https://github.com/icculus/SDL_sound/issues/128 .
---
src/timidity/output.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/timidity/output.c b/src/timidity/output.c
index 7df26369..7e8c92d1 100644
--- a/src/timidity/output.c
+++ b/src/timidity/output.c
@@ -75,7 +75,7 @@ void timi_s32tof32(void *dp, Sint32 *lp, Sint32 c)
float *sp=(float *)(dp);
while (c--)
{
- *sp++ = (float)(*lp++) / 2147483647.0f;
+ *sp++ = (float)(*lp++) / (float)(1<<(32 - GUARD_BITS - 1));
}
}
@@ -84,7 +84,7 @@ void timi_s32tof32x(void* dp, Sint32* lp, Sint32 c)
float* sp = (float*)(dp);
while (c--)
{
- *sp++ = SDL_SwapFloat((float)(*lp++) / 2147483647.0f);
+ *sp++ = SDL_SwapFloat((float)(*lp++) / (float)(1<<(32 - GUARD_BITS - 1)));
}
}
@@ -93,7 +93,7 @@ void timi_s32tos32(void *dp, Sint32 *lp, Sint32 c)
Sint32 *sp=(Sint32 *)(dp);
while (c--)
{
- *sp++ = (*lp++);
+ *sp++ = (*lp++)<<GUARD_BITS;
}
}
@@ -102,6 +102,6 @@ void timi_s32tos32x(void *dp, Sint32 *lp, Sint32 c)
Sint32 *sp=(Sint32 *)(dp);
while (c--)
{
- *sp++ = SDL_Swap32(*lp++);
+ *sp++ = SDL_Swap32((*lp++)<<GUARD_BITS);
}
}