Gamecube BMS sequence ripper/editor - Design? Language? Existing DAW/sequencer plugin? by nobody1089 at 5:41 AM EDT on April 10, 2016
I'm starting a project to rip Gamecybe BMS sequences (Zelda Wind Waker, Twilight Princess, Mario Sunshine) into data structures (high-level object trees, maybe JSON/YAML as a save format).
Ideally, I'd write a high-level spec which is used to parse the file directly. I managed to write up a "declarative spec" in the form of a switch-case statement. However, I essentially stole Go syntax, so I'm not sure if my "spec" is any more readable or language-agnostic than normal code.
* However, it's *definitely* much better than bit-bashing a MIDI file from a BMS file.
* The current BMS decoder is located at http://kuribo64.net/board/thread.php?id=2363. ** It barely works. Resulting MIDI tracks lack volume, looping, etc., and note timing is completely off. ** This program literally reads bytes from the source data and constructs a MIDI file byte-by-byte. ** The code is practically unreadable as documentation.
It'd be pretty rad if you could create a BMS sequence converter!
The only existing one, sort of, is for Super Mario Sunshine. It's a MIDI to BMS converter, but arookas has worked on a BMS to MIDI converter as well. They might have some ideas if you talk to them.
If you're looking for something to implement the BMS converter into, I'd suggest looking into VGMTrans, which is a universal sequence to MIDI converter, more or less. It supports DS sequences, N64 sequences, NES, SNES sequences...and so on.
I'm aware of vgmtrans. The project seems to have been handed around many times, the current developer hasn't been around for a few months.
My main concern is that vgmtrans is a GUI C++ program with massive dependence on the win32 API, and I don't really understand its heavily nested object structure. Many extractions are inaccurate or missing commands not natively supported by MIDI.
I'd prefer working with sequences in a more powerful format, since MIDI is clunky and hardware-oriented.