VOGONS


First post, by 7F20

User metadata
Rank Member
Rank
Member

I want to play the old sierra midi files with munt. I can't figure out how to do it. The old releases of the midi files come with a sysex file and a .mid file, and I just don't know how to make it work.

Ideally, I want to play them on my raspberry pi using mt32d, but I can't even get them to play in windows using munts midi file player.

From the Soundtrack Readme:

"This MIDI file conatains embedded System Exlcusive
patch bank data which will write new sounds to your MT-32. There are also
numerous SysEx system changes throughout this soundtrack.

If your playback software has problems transmitting the SysEx patch data,
you may alternatively transmit the included "QFG2.SYX" patch bank prior to
playback of the file. However, when using the external patch bank the
reverb enhancements will not be heard."

Any ideas?

Thanks

Reply 1 of 12, by Falcosoft

User metadata
Rank Oldbie
Rank
Oldbie

I'm not sure you can do this with Munt's player but you can with my Midi player (FSMP)
More info about how it works:
Re: Ways to make your MT-32 MIDIs sound right

Website, Facebook, Youtube
Falcosoft Midi Player + Munt VSTi + BassMidi VSTi topic

Reply 2 of 12, by 7F20

User metadata
Rank Member
Rank
Member
Falcosoft wrote on 2020-06-28, 05:09:

I'm not sure you can do this with Munt's player but you can with my Midi player (FSMP)
More info about how it works:
Re: Ways to make your MT-32 MIDIs sound right

Thanks for that. I'll give that a shot as well.

About munt's capabilities, it appears that you can load sysex files. The thing I'm having trouble with is the command to actually load a midi file. The list of command line parameters doesn't include the syntax.

Usage: mt32d [options]
-w filename : Wave output (.wav file)
-e filename : Sysex patch output (.syx file)
-r : Enable reverb (default)
-n : Disable reverb

-m : Manual buffering mode (buffer does not grow)
-a : Automatic buffering mode (default)
-x msec : Maximum buffer size in milliseconds
-i msec : Minimum (initial) buffer size in milliseconds

-d name : ALSA PCM device name (default: "default")

-g factor : Gain multiplier (default: 1.0)
-l mode : Analog emulation mode (0 - Digital, 1 - Coarse,
2 - Accurate, 3 - Oversampled 2x, default: 2)

-f romdir : Directory with ROM files to load
(default: '/usr/share/mt32-rom-data/')
-o romsearch : Search algorithm to use when loading ROM files:
(0 - try both but CM32-L first, 1 - CM32-L only,
2 - MT-32 only, default: 0)

Reply 4 of 12, by 7F20

User metadata
Rank Member
Rank
Member
ShirBlackspots wrote on 2020-06-28, 13:02:
Its really easy: […]
Show full quote

Its really easy:

Open Munt
Click on Tools, select "play MIDI file"
On the window that pops up, select "add" and find the Midi you want to play.

Well, it's not really that easy actually. That only works with midi files that use the built in MT32 sounds as-is, which is basically never the case with stuff like sierra games, etc.

Many midi files (including the one I'm trying to play) come with both a main file and a sysex file that contains specific sound bank info to first program the device. (in this case the MT32) You need a way to send it either both at the same time or to first program the MT32 and then send the main file. I can find the way to send the SYSEX file from the command line with mt32d -e [sysex file] and I can obviously load the midi file from the munt player, but it's just garbled nonsense as it is now.

Ideally, I want to do the whole thing from a command line, but I'd settle for in windows for now!

If there's anyone knowledgeable about midi stuff, I'd appreciate the guidance.

Thanks,

Reply 5 of 12, by 7F20

User metadata
Rank Member
Rank
Member

Ok. I figured out how to do it from windows. There was an older topic here How to send syx files? that explains how to use the "Test midi driver" option to instantiate a synth window which is used in conjunction with the "play midi file" window to first load sysex and then load the midi file. It works, but it's absolutely difficult to figure out unless you know to do it. "Test midi driver" should be renamed to "instantiate synth window" or something like that. and opening the play midi file option should automatically instantiate a synth window.

In any case, this is great as I can know play stuff, but my actual goal was to do this from the command line, as I'm hoping to play midi files remotely (SSH'ed into a raspberry pi) and I would like to just use munt since I already have it installed. I'm not opposed to loading new software, but seeing as how munt *can*do this, I'm holding out hope that there's an easy method from the command line. I mean, it runs in the background when I type in "mt32d", so shouldn't I just be able to feed it the files? Isn't that what dosbox is doing anyway?

Thanks,

Reply 6 of 12, by sergm

User metadata
Rank Oldbie
Rank
Oldbie

@7F20

I don't think mt32d has any functionality of a MIDI player. AFAICT, it's something similar to the Windows MIDI driver rather. That is, an ALSA application that advertises a MIDI input port, listens to it and converts audio output for the incoming MIDI data on-the-fly. You shouldn't try to feed MIDI files to it, use your favourite MIDI player instead (or maybe aplaymidi, it's good enough for the purpose).

Similarly, DOSBox supports ALSA MIDI interface and is able to communicate with mt32d provided you specified the correct MIDI port (smth like 128:0) in midiconfig.

Reply 7 of 12, by 7F20

User metadata
Rank Member
Rank
Member

Thanks.

I think you're right in that Mt32d doesn't have a command line midi player. But the GUI version of Munt is able to play midi files, because I've done it in Windows as I've described above.

Since I can't use the GUI version in my setup, I guess I'll just have to use a different program. I can't use Dosbox to do it because of the way I have things setup. The reasons are complicated and out of scope for this, so unless you really want to know why, I'll leave that out. Otherwise just take it for granted that dosbox isn't a solution for this.

Aplaymidi I don't think will work by itself because I can't see a way to send sysex. https://www.systutorials.com/docs/linux/man/1-aplaymidi/

There is amidi, which will send sysex, but not .mid, https://www.systutorials.com/docs/linux/man/1-amidi/, but I can't see any way to "pin" the sysex information to Munt. In other words, just sending the sysex info to mt32d isn't enough, there has to be a player capable of being "programmed" by the sysex with it's new instruments which can then receive the .mid file.

I guess I need a command line utility that can't do both at the same time?

Thanks

Reply 8 of 12, by Pierre32

User metadata
Rank Member
Rank
Member

Have you tried any of the utils here? Wondering if you could use 'send sysex' and 'playmid', in a batch file to do it one command.

https://www.midimusicadventures.com/queststud … urce/utilities/

This software assumes a real MT-32 though, so I don't know if it works the same for Munt.

Reply 9 of 12, by sergm

User metadata
Rank Oldbie
Rank
Oldbie

@7F20
Hmm, maybe exactly the unability of aplaymidi to send .syx files was behind the mt32d's option "-e filename : Sysex patch output (.syx file)". Still, I think you take it a bit wrong. Since you have started mt32d, it keeps the internal synth state up to a reset or death. You should be able to send a .syx file (or give it as an argument) and then play a .mid file (with the same mt32d instance). let me know if that fails, please.

Reply 10 of 12, by sergm

User metadata
Rank Oldbie
Rank
Oldbie

Also, it is very easy to convert a .syx file to a .mid, even embed it 😀
I used to use the record MIDI function of mt32emu-qt for that too. Just create a playlist with both files and play it while recording MIDI.

Reply 11 of 12, by 7F20

User metadata
Rank Member
Rank
Member
sergm wrote on 2020-06-29, 14:09:

@7F20
Hmm, maybe exactly the unability of aplaymidi to send .syx files was behind the mt32d's option "-e filename : Sysex patch output (.syx file)". Still, I think you take it a bit wrong. Since you have started mt32d, it keeps the internal synth state up to a reset or death. You should be able to send a .syx file (or give it as an argument) and then play a .mid file (with the same mt32d instance). let me know if that fails, please.

So, I'll give this a try today. I'm afraid I can't until later on. However, I will say that, in the GUI version of Munt, sysex files are not persistent unless you tick the box that says "pin synth" (which is there specifically for the situation of loading persistent sysex). I believe that it's done this way because the simplest path to clearing the banks and resetting the mt32 to normal is having it auto-clear unless you explicitly request that hang onto bank info. Whether or not this behavior is completely different for any command line instantiation, I cannot say, but I would tend to think it functioned the same.

I'll definitely try it later tonight and get back to you. Thanks for help with the troubleshooting! 😀

Also, it is very easy to convert a .syx file to a .mid, even embed it 😀
I used to use the record MIDI function of mt32emu-qt for that too. Just create a playlist with both files and play it while recording MIDI.

Yes, I had the idea of embedding the sysex, but I'm a bit of a noob for that. I poked around a little online and so far couldn't find an easy/obvious way to embed the sysex. The only midi tools I currently have are munt and midiox (which I use for instruments, not playing files)

Reply 12 of 12, by sergm

User metadata
Rank Oldbie
Rank
Oldbie
7F20 wrote on 2020-06-29, 17:08:

So, I'll give this a try today. I'm afraid I can't until later on. However, I will say that, in the GUI version of Munt, sysex files are not persistent unless you tick the box that says "pin synth" (which is there specifically for the situation of loading persistent sysex). I believe that it's done this way because the simplest path to clearing the banks and resetting the mt32 to normal is having it auto-clear unless you explicitly request that hang onto bank info. Whether or not this behavior is completely different for any command line instantiation, I cannot say, but I would tend to think it functioned the same.

Be sure, these tools from the mt32emu_alsadrv (both mt32d and xmt32) are way different in the internal design compared to mt32emu-qt. The main point of mt32emu-qt was to provide a possibility to maintain multiple synths along rather than ensuring that the synth state is cleared properly between played files or so. But since those separate .syx files (or .mid captures) are quite common in the wild, we added the pin option. In fact, having a single pinned synth would be significantly easier to implement (yet that would be a "fair" emulation of a hardware unit) 😁

Yes, I had the idea of embedding the sysex, but I'm a bit of a noob for that. I poked around a little online and so far couldn't find an easy/obvious way to embed the sysex. The only midi tools I currently have are munt and midiox (which I use for instruments, not playing files)

I imagine that, so proposed "an easy way" with just capturing by mt32emu-qt. Really, it's a matter of a few clicks to get an initialisation .mid file from the .syx 😀
But of course, it sucks when it comes to embedding a long MIDI, like Quest Studio's files. For that, a proper MIDI editor would be much more convenient to use.