foxygit / doom Log in
commit 0b8c63530f113a7fd92cbe3f54539f33c2cf095b
Author:     Roman Fomin <rfomin@gmail.com>
AuthorDate: Mon Oct 25 10:51:46 2021 +0700
Commit:     Roman Fomin <rfomin@gmail.com>
CommitDate: Mon Oct 25 10:51:46 2021 +0700

    set initial tempo
---
 src/i_winmusic.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/i_winmusic.c b/src/i_winmusic.c
index 5c70a43a..f444d112 100644
--- a/src/i_winmusic.c
+++ b/src/i_winmusic.c
@@ -421,7 +421,8 @@ void I_WIN_RegisterSong(char *filename)
 {
     int i;
     midi_file_t *file;
-    MIDIPROPTIMEDIV prop;
+    MIDIPROPTIMEDIV timediv;
+    MIDIPROPTEMPO tempo;
     MMRESULT mmr;

     file = MIDI_LoadFile(filename);
@@ -438,9 +439,9 @@ void I_WIN_RegisterSong(char *filename)
         channel_volume[i] = 100;
     }

-    prop.cbStruct = sizeof(MIDIPROPTIMEDIV);
-    prop.dwTimeDiv = MIDI_GetFileTimeDivision(file);
-    mmr = midiStreamProperty(hMidiStream, (LPBYTE)&prop,
+    timediv.cbStruct = sizeof(MIDIPROPTIMEDIV);
+    timediv.dwTimeDiv = MIDI_GetFileTimeDivision(file);
+    mmr = midiStreamProperty(hMidiStream, (LPBYTE)&timediv,
                              MIDIPROP_SET | MIDIPROP_TIMEDIV);
     if (mmr != MMSYSERR_NOERROR)
     {
@@ -448,6 +449,17 @@ void I_WIN_RegisterSong(char *filename)
         return;
     }

+    // Set initial tempo.
+    tempo.cbStruct = sizeof(MIDIPROPTIMEDIV);
+    tempo.dwTempo = 500000; // 120 bmp
+    mmr = midiStreamProperty(hMidiStream, (LPBYTE)&tempo,
+                             MIDIPROP_SET | MIDIPROP_TEMPO);
+    if (mmr != MMSYSERR_NOERROR)
+    {
+        MidiErrorMessageBox(mmr);
+        return;
+    }
+
     MIDItoStream(file);

     MIDI_FreeFile(file);