Ah nice, were there more games that didn't support the old bms to midi website method? I know LM was one, didn't know pikmin conversion never worked either.
The PHP script was always buggy, I could never get it to work with any game. So I made a C script. The advantage of mine is that it only uses <stdio.h>, so is platform independent.
You mean the instruments? Those are not in the BMS file at all, they're in separate AW files. It's easy enough to extract the waves, but the note mapping, ADSR envelopes and the like are not documented.
I believe koopatroop ripped the wav files for Luigi's Mansion a while back and made a thread about here: http://hcs64.com/mboard/forum.php?showthread=37532 specifically this link. It has all the instruments, wish there was a way to make a soundfont.
Congratulations on an excellent start in the world of data analysis! Identifying the rest of those data structures may also yield even more data, such as the envelope or key data for the instruments, assuming that is stored in the BMS files.
Debugging the parser on those files may yield information needed to find as yet unparsed message numbers. Of course, it will probably require examination in a hex editor and a keen eye to determine those messages' lengths, and whether or not they're anything that should be translated, or simply skipped.
Future hints for development. Don't be afraid to use memory allocation, especially if it can help avoid use of tiny temporary files. Don't worry about allocating memory out of order, either. You can just allocate the blocks you need, then assemble them into the file when you write it to disk.
I probably would have read the entire BMS to memory, depending on how large they are, and skip forward using the pointer and the size. Since we're talking C here, clever use of macros could probably reduce the code footprint of running range checks on the size remaining in memory.
Or, alternatively, using the same macro definitions to check for errors from fseek and fread, in case file truncation should result in a safe failure.
Unknown messages should obviously result in a big honking error reporting the exact message code, so you don't have to run it under a debugger to find the problem.
Congratulations on what you've done so far, though. There probably haven't been any major format breakthroughs in the MIDI-like format community since the foobar2000 author cracked HMI and HMP over 10 years ago, which I later rewrote. (He gave me his code way back when, and instead of rewriting the ugly bunch of it like I should have, I used it verbatim, the dunce I am.)
At least there were some themes kept worthy enough for bms format as opposed to being streamed, let me know what you find out about MKDD. Would very much like to have all the midis from the game even if they are such a few, maybe try a NTSC rom version of the game if there is one (can't remember) and see if that works. Thanks.
There are songs in the samples, that's what I mean.
by robotortoise at 6:53 PM EDT on October 27, 2015
Do you think you could implement this into VGMtrans? That would be the best way to future-proof this BMS to midi conversion and continue development of it, as VGMtrans is pretty popular, IMO.
I see xD silly of me to get that confused, okay I'll take what I can get if you still have them and can obliged, thanks and I agree with robo we need more VGM formats supported into that program. Hope you would consider working with the author loveemu in the future.