From fe6455f35b9636cd42273b0175f0c4445ab30dfb Mon Sep 17 00:00:00 2001
From: Cameron Cawley <[EMAIL REDACTED]>
Date: Tue, 29 Mar 2022 22:24:44 +0100
Subject: [PATCH] timidity: Support byteswapped float output
Ported from https://github.com/icculus/SDL_sound/pull/47
(cherry picked from commit 5a4422f112122b2b071bc11e14b5c22b5de9fd94)
---
src/timidity/output.c | 9 +++++++++
src/timidity/output.h | 5 +++++
src/timidity/timidity.c | 7 +++++--
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/timidity/output.c b/src/timidity/output.c
index 8bab4c40..7df26369 100644
--- a/src/timidity/output.c
+++ b/src/timidity/output.c
@@ -79,6 +79,15 @@ void timi_s32tof32(void *dp, Sint32 *lp, Sint32 c)
}
}
+void timi_s32tof32x(void* dp, Sint32* lp, Sint32 c)
+{
+ float* sp = (float*)(dp);
+ while (c--)
+ {
+ *sp++ = SDL_SwapFloat((float)(*lp++) / 2147483647.0f);
+ }
+}
+
void timi_s32tos32(void *dp, Sint32 *lp, Sint32 c)
{
Sint32 *sp=(Sint32 *)(dp);
diff --git a/src/timidity/output.h b/src/timidity/output.h
index 6451db3f..e272bfd6 100644
--- a/src/timidity/output.h
+++ b/src/timidity/output.h
@@ -36,6 +36,7 @@ extern void timi_s32tof32(void *dp, Sint32 *lp, Sint32 c);
extern void timi_s32tos32(void *dp, Sint32 *lp, Sint32 c);
/* byte-exchanged 32-bit */
+extern void timi_s32tof32x(void* dp, Sint32* lp, Sint32 c);
extern void timi_s32tos32x(void *dp, Sint32 *lp, Sint32 c);
/* little-endian and big-endian specific */
@@ -44,11 +45,15 @@ extern void timi_s32tos32x(void *dp, Sint32 *lp, Sint32 c);
#define timi_s32tos16b timi_s32tos16x
#define timi_s32tos32l timi_s32tos32
#define timi_s32tos32b timi_s32tos32x
+#define timi_s32tof32l timi_s32tof32
+#define timi_s32tof32b timi_s32tof32x
#else
#define timi_s32tos16l timi_s32tos16x
#define timi_s32tos16b timi_s32tos16
#define timi_s32tos32l timi_s32tos32x
#define timi_s32tos32b timi_s32tos32
+#define timi_s32tof32l timi_s32tof32x
+#define timi_s32tof32b timi_s32tof32
#endif
#endif /* TIMIDITY_OUTPUT_H */
diff --git a/src/timidity/timidity.c b/src/timidity/timidity.c
index 563bba90..427a20cc 100644
--- a/src/timidity/timidity.c
+++ b/src/timidity/timidity.c
@@ -576,8 +576,11 @@ static void do_song_load(SDL_IOStream *io, const SDL_AudioSpec *audio, MidiSong
case SDL_AUDIO_S32BE:
song->write = timi_s32tos32b;
break;
- case SDL_AUDIO_F32:
- song->write = timi_s32tof32;
+ case SDL_AUDIO_F32LE:
+ song->write = timi_s32tof32l;
+ break;
+ case SDL_AUDIO_F32BE:
+ song->write = timi_s32tof32b;
break;
default:
SDL_SetError("Unsupported audio format");