I'm just popping in on this subject, as I've been really into this whole music thing for a little while now. I tried using the php code to convert .bms to .midi, but it doesn't seem to work. Has anyone else run into this problem? It could be my php configuration, but I don't know
BMS Converter by hat at 12:03 PM EDT on October 7, 2023
I managed to whip this together in a week a few months ago. You can use Yuuto's mostly working soundfont, but this can convert the BMS's with reasonable accuracy.
There is some clunkyness with pitch's in some songs, but it's a big improvement from the old converters. In truth though, the MIDI format itself is so limiting; would be much more useful if someone had a sequencer / live-player instead that supports all of J2A's systems for 1:1 pure audio.
Zant's theme is a great example as it uses PPQN changes which MIDI doesn't support. It still works don't get me wrong, but it isn't a 1:1 conversion for a couple of the songs and I doubt it'll ever be due to MIDI limitations.
Some people have used it for other similar games that use the J2 audio system (Super Mario Galaxy) and it seems to work fine.
This version should correct the broken pitch bends that the old VGM-Trans fork used. Either way it was about time that we moved away from the old php converter. So hopefully this helps!
Live BMS player in the making by Yuuto2 at 12:01 PM EDT on October 8, 2023
You are correct @hat, a live player would be really helpful. As you already pointed out, MIDI and also SF2 are quite limiting and thus not really suitable for ripping music and sound effects in this case.
That is why I have been working on a live player/renderer for quite some time now. It aims to mimic the JAudio system (currently only exactly the version Twilight Princess uses) as closely as possible. For the unknown stuff I am reverse-engineering the game's code in a disassembler/decompiler, which is a very tedious task and consumes a lot of time.
I also used this live-playing approach to render BMS to MIDI earlier this year and it could already handle most of the dynamic commands, see here. That thing was just a proof of concept that converted BMS to MIDI live and passed the MIDI events and the pre-generated soundfont to a MIDI renderer to play it back (with all limitations, that is).
I'm really sorry it takes so long, but this is my all-time favorite long-term project and I have high standards regarding my work on that. Also, I switched from C++ to Rust mid-progress because I wanted to learn that language anyway.
TL;DR: BMS live player/renderer (TP version) in progress, there is steady but slow progress, time is scarce and I cannot make a guarantee for a finishing date.
If you really want to see the state of the "old" C++ POC I abandoned, I perhaps can find some time to make the project a bit more portable and usable and eventually upload that code.