munt / munt

A multi-platform software synthesiser emulating pre-GM MIDI devices such as the Roland MT-32, CM-32L, CM-64 and LAPC-I. In no way endorsed by or affiliated with Roland Corp.

Home Page:http://munt.sourceforge.net/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Feature] Play the demo

nikitalita opened this issue · comments

I'm not sure if it's currently enabled or not (searching for "demo" doesn't return anything), but it would be nice to be able to trigger the demo mode and play the demo songs that are stored in the rom. Is this possible?

Currently, there is no support for playing demo songs in this emulator. It seems, this feature initially had a low-priority from start, yet those demo songs are only present in a few control ROM versions. For instance, these won't be available should one use the old-gen MT-32 control ROM v1.07 or the CM-32L ROMs. Albeit, I hope this won't be too difficult to implement an interpreter for the demo song format, which looks very much SMF-like. Will look at it in mid-term 🙂

How did the MT-32 itself parse them? Was it in the control rom, or was it handled by a separate microcontroller?

Evidently, the player code resides in the control ROM. Moreover, it is there even in CM-32L ROM, despite there are no demo songs within in that version.

More to it, the demo songs rely on a dedicated timbre bank (timbre group 5 - pointers to 22 distinct timbres can be found at 0x8700), that isn't used otherwise, and a special patch memory map (at 0x8800). It looks very much like this merely enables a compatibility mode for the device those songs were written on. Still, there is nothing that prevents us from emulating all that stuff, except the availability of the new-gen MT-32 ROMs (none of the other models include this stuff).

Are the songs stored in SMF format, or something close to it?

Are the songs stored in SMF format, or something close to it?

It is definitely something very close and based on MIDI messages of course, but it doesn't resemble the content of a SMF MIDI track in full. In particular, I noticed that long pauses between messages are not encoded with the help of variable-length fields, yet the end-of-track marker is definitely non-standard. But the main problem here is the instrument mapping, since playing these messages using the standard MT-32 patch map sounds rather odd...

Wait, I think I closed this by accident, is this implemented?