SDL_mixer: added Timidity_GetSongTime and music->TIMIDITY_Tell (from libtimidity.)

From 41dda1cdffedd4697af4af5e9c361dd7f6396b29 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Thu, 18 Mar 2021 10:50:20 +0300
Subject: [PATCH] added Timidity_GetSongTime and music->TIMIDITY_Tell (from
 libtimidity.)

---
 src/codecs/music_timidity.c    | 8 +++++++-
 src/codecs/timidity/playmidi.c | 7 +++++++
 src/codecs/timidity/timidity.h | 1 +
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/codecs/music_timidity.c b/src/codecs/music_timidity.c
index 2e4e154..5c835de 100644
--- a/src/codecs/music_timidity.c
+++ b/src/codecs/music_timidity.c
@@ -216,6 +216,12 @@ static int TIMIDITY_Seek(void *context, double position)
     return 0;
 }
 
+static double TIMIDITY_Tell(void *context)
+{
+    TIMIDITY_Music *music = (TIMIDITY_Music *)context;
+    return Timidity_GetSongTime(music->song) / 1000.0;
+}
+
 static double TIMIDITY_Duration(void *context)
 {
     TIMIDITY_Music *music = (TIMIDITY_Music *)context;
@@ -257,7 +263,7 @@ Mix_MusicInterface Mix_MusicInterface_TIMIDITY =
     TIMIDITY_GetAudio,
     NULL,   /* Jump */
     TIMIDITY_Seek,
-    NULL,   /* Tell */
+    TIMIDITY_Tell,
     TIMIDITY_Duration,
     NULL,   /* LoopStart */
     NULL,   /* LoopEnd */
diff --git a/src/codecs/timidity/playmidi.c b/src/codecs/timidity/playmidi.c
index 3f12ef4..a3b2df9 100644
--- a/src/codecs/timidity/playmidi.c
+++ b/src/codecs/timidity/playmidi.c
@@ -646,6 +646,13 @@ Uint32 Timidity_GetSongLength(MidiSong *song)
   return retvalue;
 }
 
+Uint32 Timidity_GetSongTime(MidiSong *song)
+{
+  Uint32 retvalue = (song->current_sample / song->rate) * 1000;
+  retvalue       += (song->current_sample % song->rate) * 1000 / song->rate;
+  return retvalue;
+}
+
 int Timidity_PlaySome(MidiSong *song, void *stream, Sint32 len)
 {
   Sint32 start_sample, end_sample, samples;
diff --git a/src/codecs/timidity/timidity.h b/src/codecs/timidity/timidity.h
index a3d94c9..310e1b5 100644
--- a/src/codecs/timidity/timidity.h
+++ b/src/codecs/timidity/timidity.h
@@ -155,6 +155,7 @@ extern MidiSong *Timidity_LoadSong(SDL_RWops *rw, SDL_AudioSpec *audio);
 extern void Timidity_Start(MidiSong *song);
 extern void Timidity_Seek(MidiSong *song, Uint32 ms);
 extern Uint32 Timidity_GetSongLength(MidiSong *song); /* returns millseconds */
+extern Uint32 Timidity_GetSongTime(MidiSong *song);   /* returns millseconds */
 extern void Timidity_FreeSong(MidiSong *song);
 extern void Timidity_Exit(void);