eclab / edisyn

Synthesizer Patch Editor
Apache License 2.0
550 stars 51 forks source link

Possibility for MT-32 Support #54

Closed now-its-dark closed 1 year ago

now-its-dark commented 2 years ago

Hi there @eclab, Firstly, just want to say thank you for making this great tool!

Since you have done the hard work of building a D110 editor and these two synths share a lot in common, I was wondering about the possibility of an MT-32 editor panel— noticed that you had said you might make one a while back, so thought I'd make a case for it. 😄

The MT-32 is woefully underrepresented in terms of contemporary editors—there is exactly 1x option (that being midiquest, which is prohibitively expensive). SoundDiver is currently the best option imo, it has a truly excellent layout for this synth. SD has been out of development for nearly 20 years though and exists in the grey area of "abandonware", also not so straightforward to setup, nor available cross-platform, requiring additional setup with WINE for non-Windows users.

This device by far the most broadly accessible LA Synth too, since it is faithfully emulated in software using MUNT and by extension, the MT-32 Pi project. If there were a straightforward means of editing it, people would definitely take notice.

Although MUNT doesn't send sysex, it receives and interprets all the MT-32 sysex data accurately. Since the MT-32 does not store patch data permanently in memory, MUNT's lack of bidirectional communication isn't that much of a drawback for editing, it just demands a certain workflow.

If you are interested in exploring this and it would be helpful, I'm also happy to log time-stamped records of a real device response to different requests from SoundDiver, or answer any other technical questions I can about how it behaves.

Thanks!

SeanLuke commented 2 years ago

So as you probably know I cannot realistically build an editor for a machine I do not have physically with me, which means I must own it or have it on very, very long term loan. But it's also the case that, looking at this http://www.youngmonkey.ca/nose/audio_tech/synth/Roland-MT32.html it appears that the MT-32 is very nearly identical to the D-110 in sysex. Have you tried just using the D-110 editor on the MT-32 directly? What works and what doesn't? Note that the sysex spec says:

When the RQ1 contains a start address listed in parameter base
address, and the size is 1 or more, Mt-32 sends data.

In Overflow Assign Mode, MT-32 does not recognise RQ1, but passes
the mesage to the midi out.

MT-32 won't transmit RQ1 in default mode.

Not sure how you set the modes in the MT-32, but note these claims. It's too bad that MUNT doesn't run on the Mac: that's my development platform.

The D-110 has a very...unusual...approach to patch changes and I'm guessing that'll be the big problem. So you may not be able to write to a patch (also not sure what the patch memory capacity is on the MT-32). But you might be able to send to current memory and to request a patch. And maybe change individual parameters in real-time. What happens when you attempt this?

now-its-dark commented 2 years ago

Hi @SeanLuke, thanks for your response. That makes perfect sense! I had wondered, since there is a software emulation, if that might be sufficient. I haven't tried this, but would guess there must be some form of debug mode from command line, where it could report changes made internally, at least when parameters are received.

Btw, MUNT runs great on Mac, I'm a Mac user as well!

When I tried this in the past, it seemed like Edisyn and other editors for the D110 will sort of work with the MT-32, but the patch-related functions didn't seem to. There are also some incompatibilities in the voicing which I noticed at the time. I'll do a non-anecdotal survey of the differences between the two asap!

Incidentally, there has been a project shared on Vogons where a D110 has been modified to function as an MT-32; not sure of the relevance in this case, but a good indicator that they do behave similarly.

The MT-32 has 8x timbre temp area memory slots, 8x patch temp area memory slots and 64 user timbre memory slots. The patch memory is fully assignable, with 128 patch memory slots. The drum map is fully assignable and extends from C1 — E♭6.

now-its-dark commented 2 years ago

I'll leave some notes here as I dig further into the differences. Noticing right away, when comparing the SoundDiver editing panels, that the synthesized voices themselves have hardly any differences, parameter-wise, except that the D-110 has 2x banks to select from, whereas the MT-32 has only one bank / no distinction like this. Presumably there is less PCM data on-board, so it is unneeded.

D-110 uses the Patch terminology to refer to a multi / collection of tones, whereas MT-32 has no specific multi mode.

It seems that the same terminology is used across the two devices, but with completely different meanings:

D110      MT-32 

Patch  =  No Equivalent (no multis)
Timbre =  Patch
Tone   =  Timbre

So, for the MT-32, tone is not a term that is used, but the concept is equivalent to timbre, timbres are "raw voices" and patches are references to / instances of those voices with reverb switch, level, ks and pitch control etc. So on MT-32, program changes switch patches, but on D-110 they switch timbres , if I'm getting this right.

now-its-dark commented 2 years ago

It looks like sending a Tone memory request to the MT-32 from a D-110 editor produces the intended result, acquiring the synth voice data correctly. However, Timbre memory request does not work. Comparing the interactions, they are identical, but the D-110 editor is expecting different data from what is received, so it ignores / can't interpret it apparently.

D-110 editor requests timbre memory 1 (D-110 terminology)

21:24:18.905 To MT-32 SysEx Roland 13 bytes F0 41 10 16 11 05 00 00 00 00 08 73 F7 21:24:18.915 From MT-32 SysEx Roland 18 bytes F0 41 10 16 12 05 00 00 00 00 18 32 02 00 01 00 2E F7

MT-32 editor requests patch memory 1 (mt-32 terminology)

21:27:32.896 To MT-32 SysEx Roland 13 bytes F0 41 10 16 11 05 00 00 00 00 08 73 F7 21:27:32.914 From MT-32 SysEx Roland 18 bytes F0 41 10 16 12 05 00 00 00 00 18 32 02 00 01 00 2E F7

02FD commented 2 years ago

I should add that, as I have tried to use the D-110 editor for MT-32 edits via MUNT, I have noticed a very different PCM bank layout to the D-110. It should be listed in the MIDI implementation for the MT-32, which is available on archive.org.

SeanLuke commented 2 years ago

D-110 uses the Patch terminology to refer to a multi / collection of tones, whereas MT-32 has no specific multi mode.

I noticed this as well. However I do think the MT-32 has a multimode; I think it's 4-part multitimbral. They're called "performances". Instead I think Roland got rid of Timbres (finally, since they're useless). So I believe it should be...?:

D110      MT-32 

Patch  =  Performance
Timbre =  [Nothing]
Tone   =  Patch
now-its-dark commented 2 years ago

Looking through the MT-32 sysex spec document, I couldn't find a reference to Performances, and haven't seen it in any documentation or in the editors I've used. Where did you encounter this?

Timbres are for sure a thing on MT-32, the meaning is different between the two instruments though it seems. The "T" in MT stands for Timbre haha. They made a complete mess of the terminology between these two devices!

On MT-32, Timbres are voices and Patches reference timbres with additional parameters. Patches map to program change msgs. This book does an excellent job of outlining the architecture and capabilities of the device.

If there are in fact multis on the MT-32, it would mean that all three of those have analogous definitions, so it would be

D110      MT-32 

Patch  =  Performance?
Timbre =  Patch
Tone   =  Timbre
SeanLuke commented 2 years ago

Hmmm, I may have grabbed the wrong document. Will look at it again. But yes I recall the MT-32 having different terminology.

SeanLuke commented 1 year ago

Not having heard much action on this since, I'm declaring it closed for the time being.