Reverse-engineering vintage MIDI playback

Mu0n

Active Tinkerer
Oct 29, 2021
609
560
93
Quebec
www.youtube.com
1718545312153.png


I'm using a 486 playing a game that uses MIDI signals (Ultima Underworld 1). it sends them out its joystick port pin12 (so far, nothing special). This gets converted with my custom cables into a midi cable, that I send into a modern MIDI USB interface, plugged on my 2024 PC. I then intercept those MIDI signals with the darker window screencapped above. I can analyze which instrument is loaded as the command passes through. I can learn which instrument # is being used as a playback is done. for bonus points, I'm using MIDITRIX, a midi matrix input/output setter so that the signal will not be merely analyzed and stopped on my 2024 PC, but will also get sent back through the midi interface, back into a real Roland MT-32 so I can also hear it as intended, while it's being scrutinized

Goals with this: I can spy which instrument is being used in MT-32 or sound canvas music for each channel and I can reproduce them by playing/recording them one by one, to do some covers...........

1718546154097.png

Setup #1 used:
486's midi out to modern usb 1x1 midi interface's IN (plugged into a modern 2024 PC).
usb 1x1 OUT to MT-32 in.
MIDItrix modern app acting as a signal repeater to make the interface act as a THRU
MIDIView to display MIDI commands as they're read from the interface in real time

Problem with setup #1: most of the time, it will give a blue screen of death (even in windows 11) because I guess it creates an avalanche of midi command echoes since the IN and OUT are through the same device. I swear it has worked temporarily under certain conditions
 
Last edited:

Mu0n

Active Tinkerer
Oct 29, 2021
609
560
93
Quebec
www.youtube.com
Setup #2 used:
I have a Serdashop DB15MIDI adaptor that creates 2 OUTs from my 486. One is sent independently to my modern PC for analysis with MIDIView, the other is sent independently to my MT-32 for playback (not essential, but nice).
Once I learn which program change # are used, I switch over to a keyboard controller plugged into the MT-32 or sound canvas and navigate to that instrument number with hopes of being able to play the notes myself for that track.

1718546186028.png

Problem with setup #2: I can notice which program changes are being done, but the "raw" instrument choices don't sound the same as what I hear from the tune (example: Ultima VII's title screen). So I suspect the heaps of SYSEX commands at the start modify/patch the instruments in such a way that they are necessary to get the feeling of the tune. This creates a huge barrier to being able to get it ready for recording a cover, track by track.
 

Mu0n

Active Tinkerer
Oct 29, 2021
609
560
93
Quebec
www.youtube.com
I switched to MIDI-OX, which is way more full-fledge featured than MIDIVIEW, here's what it looks like:
1718624895279.png



Here's a video of the soundtrack I'm trying to reproduce, captured through hardware by someone else years ago:


Below, you can find a quick recording of me playing it, track by track, combined in Audacity, trying to aim for a quick demo instead of perfect accuracy. I'm using the exact same program changes as seen above with the Cx commands (which means 'Prg Chng') by navigating to the same hex number transformed into decimal (ie: 0x30 becomes 48) and here's a link to the standard list of instruments:
1718625087686.png


As seen in the MIDI-ox screencap above, I list what the MIDI signal gives as prg needs -> what I can navigate to myself

Channel 2: needs '26' = 38 = Warm Bell -> I find Warm Bell
Channel 7: needs '1B' = 27 = Synth Brass 4 -> I find Synth Brass 4

Channel 4: needs '70' = 112 = Tinkle Bell -> I find Timpani
Channel 6: needs '30' = 48 = String Ens 1 -> I find String Ens 1

Channel 3: needs '26' = 38 = marked as Synth Bass1 -> I hear Warm Bell

Here's my first cover using this technique: