mirror of
https://github.com/k4zmu2a/SpaceCadetPinball.git
synced 2023-12-30 21:52:56 +00:00
midi: added support for FULLTILT16 music.
This commit is contained in:
parent
03deda2f9d
commit
a281000308
@ -54,14 +54,14 @@ int midi::music_init()
|
|||||||
|
|
||||||
if (pb::FullTiltMode)
|
if (pb::FullTiltMode)
|
||||||
{
|
{
|
||||||
track1 = load_track("TABA1.MDS", true);
|
track1 = load_track("TABA1");
|
||||||
track2 = load_track("TABA2.MDS", true);
|
track2 = load_track("TABA2");
|
||||||
track3 = load_track("TABA3.MDS", true);
|
track3 = load_track("TABA3");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 3DPB has only one music track. PINBALL2.MID is a bitmap font, in the same format as PB_MSGFT.bin
|
// 3DPB has only one music track. PINBALL2.MID is a bitmap font, in the same format as PB_MSGFT.bin
|
||||||
track1 = load_track("PINBALL.MID", false);
|
track1 = load_track("PINBALL");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!track2)
|
if (!track2)
|
||||||
@ -86,11 +86,9 @@ void midi::music_shutdown()
|
|||||||
delete LoadedTracks;
|
delete LoadedTracks;
|
||||||
}
|
}
|
||||||
|
|
||||||
Mix_Music* midi::load_track(std::string fileName, bool isMds)
|
Mix_Music* midi::load_track(std::string fileName)
|
||||||
{
|
{
|
||||||
Mix_Music* audio;
|
Mix_Music* audio = nullptr;
|
||||||
auto origFile = fileName;
|
|
||||||
|
|
||||||
if (pb::FullTiltMode)
|
if (pb::FullTiltMode)
|
||||||
{
|
{
|
||||||
// FT sounds are in SOUND subfolder
|
// FT sounds are in SOUND subfolder
|
||||||
@ -98,26 +96,37 @@ Mix_Music* midi::load_track(std::string fileName, bool isMds)
|
|||||||
fileName.insert(0, "SOUND");
|
fileName.insert(0, "SOUND");
|
||||||
}
|
}
|
||||||
|
|
||||||
auto filePath = pinball::make_path_name(fileName);
|
// FT has music in two formats, depending on version: MIDI in 16bit, MIDS in 32bit.
|
||||||
if (isMds)
|
// 3DPB music is MIDI only.
|
||||||
|
auto basePath = pinball::make_path_name(fileName);
|
||||||
|
for (int i = 0; i <= 1 && !audio; i++)
|
||||||
{
|
{
|
||||||
auto midi = MdsToMidi(filePath);
|
if (i == 0)
|
||||||
if (!midi)
|
{
|
||||||
return nullptr;
|
auto filePath = basePath + ".MID";
|
||||||
|
auto fileHandle = fopen(filePath.c_str(), "rb");
|
||||||
|
if (fileHandle)
|
||||||
|
{
|
||||||
|
fclose(fileHandle);
|
||||||
|
audio = Mix_LoadMUS(filePath.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto midi = MdsToMidi(basePath + ".MDS");
|
||||||
|
if (midi)
|
||||||
|
{
|
||||||
|
// Dump converted MIDI file
|
||||||
|
/*auto filePath = basePath + ".midi";
|
||||||
|
FILE* fileHandle = fopen(filePath.c_str(), "wb");
|
||||||
|
fwrite(midi->data(), 1, midi->size(), fileHandle);
|
||||||
|
fclose(fileHandle);*/
|
||||||
|
|
||||||
// Dump converted MIDI file
|
auto rw = SDL_RWFromMem(midi->data(), static_cast<int>(midi->size()));
|
||||||
/*origFile += ".midi";
|
audio = Mix_LoadMUS_RW(rw, 1); // This call seems to leak memory no matter what.
|
||||||
FILE* fileHandle = fopen(origFile.c_str(), "wb");
|
delete midi;
|
||||||
fwrite(midi->data(), 1, midi->size(), fileHandle);
|
}
|
||||||
fclose(fileHandle);*/
|
}
|
||||||
|
|
||||||
auto rw = SDL_RWFromMem(midi->data(), static_cast<int>(midi->size()));
|
|
||||||
audio = Mix_LoadMUS_RW(rw, 1); // This call seems to leak memory no matter what.
|
|
||||||
delete midi;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
audio = Mix_LoadMUS(filePath.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!audio)
|
if (!audio)
|
||||||
|
@ -95,7 +95,7 @@ private:
|
|||||||
static objlist_class<Mix_Music>* LoadedTracks;
|
static objlist_class<Mix_Music>* LoadedTracks;
|
||||||
static Mix_Music *track1, *track2, *track3, *active_track, *NextTrack;
|
static Mix_Music *track1, *track2, *track3, *active_track, *NextTrack;
|
||||||
static bool SetNextTrackFlag;
|
static bool SetNextTrackFlag;
|
||||||
static Mix_Music* load_track(std::string fileName, bool isMds);
|
static Mix_Music* load_track(std::string fileName);
|
||||||
static bool play_track(Mix_Music* midi);
|
static bool play_track(Mix_Music* midi);
|
||||||
static std::vector<uint8_t>* MdsToMidi(std::string file);
|
static std::vector<uint8_t>* MdsToMidi(std::string file);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user