VOGONS


First post, by sfryers

User metadata
Rank Newbie
Rank
Newbie

(Not sure whether MIDI Emulation\MT-32 General or Heart of Gold\Release Announcements is the best place for this, so apologies to mods if I've picked the wrong one...)

Hello everyone- long-time listener, first-time caller.

After getting my hands on a hardware MT-32 for the first time last year in early 2022, I found myself both fascinated by the potential of the synthesiser and frustrated by the clunkiness of the available editing tools, which (unsurprisingly given the age of the device) seem to mostly date from the early 1990s.

At the beginning of this year 2023, I finally bit the bullet and started work on making my own timbre editor and patch librarian in Visual Studio. Whilst it's still a little rough around the edges in places, I think it's now working well enough to release it into the wild:

Filename
MT32Editor_v0.9.10b.zip
File size
1.3 MiB
Downloads
61 downloads
File comment
MT32 Editor Windows executables and notes
File license
GPL-2.0-or-later

The main application should work on any Windows 8, 10 or 11 system with the .NET 6.0 runtime installed. I've tested it with my hardware MT-32 (v1.07), CM-32L (v1.00) and Munt (connected through the MME driver, mt32emu_win32drv). EDIT- I've successfully tested it on Ubuntu too, with the latest versions of Wine and wine-mono.msi. I've also now released a 'legacy' version, which only requires .NET Framework 2.0 and so should run on any PC running Windows 98, Me, 2000, XP or later.

I've licenced the software as GPL3- full source code is available at https://github.com/sfryers/MT32Editor/releases/v0.9.10b.

Enjoy, and please let me have any feedback - this is my first attempt at coding anything in C#!

MT32Editor-PatchEditor0.9.4.jpg
Filename
MT32Editor-PatchEditor0.9.4.jpg
File size
327.53 KiB
Views
5016 views
File comment
Main application window
File license
CC-BY-4.0
MT32Editor-SystemArea2.jpg
Filename
MT32Editor-SystemArea2.jpg
File size
45.47 KiB
Views
5485 views
File comment
System settings window
File license
CC-BY-4.0
Last edited by sfryers on 2024-05-26, 15:06. Edited 19 times in total.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 2 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

I've definitely learnt an awful lot about the MT-32, SysEx and Visual Studio over the last few months.

The Master Tune parameter is an interesting one- the MT-32 user manual states that a SysEx value of 0 = 432.1Hz and a value of 127 = 457.6Hz. This would place the middle of the range somewhere around 445Hz. I'd be interested to understand whether the device is actually tuned to 445Hz by default, or if the default Master Tune value is below the middle of the range at 440Hz.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 3 of 127, by SkyHawk

User metadata
Rank Newbie
Rank
Newbie
sfryers wrote on 2023-04-07, 20:16:

I've definitely learnt an awful lot about the MT-32, SysEx and Visual Studio over the last few months.

The Master Tune parameter is an interesting one- the MT-32 user manual states that a SysEx value of 0 = 432.1Hz and a value of 127 = 457.6Hz. This would place the middle of the range somewhere around 445Hz. I'd be interested to understand whether the device is actually tuned to 445Hz by default, or if the default Master Tune value is below the middle of the range at 440Hz.

Well, I just so happen to have an MT-32 on my desk....
[MASTER VOLUME] + [SOUND GROUP]

Default appears to be 442.0Hz, with a range of 427.5Hz - 452.6Hz

Reply 4 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

Thanks- I've been so focused on the SysEx specification that I must have missed the page in the manual showing how to change the tuning from the front display.

The scanned copy of the MT-32 manual at https://www.manualslib.com/manual/691647/Roland-Mt-32.html therefore contradicts itself between page 18 (Master Tuning) and page 42 (MIDI Implementation, System Area)- where the range of tuning values is show as being 5Hz higher. The copy of the CM-32L manual on the same site does show the correct range of 427.5-452.6Hz in its MIDI Implementation section.

I'll make a note to alter the values displayed in the application accordingly in the next build. For now, the master tuning value displayed in the software is 5Hz higher than in reality.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 5 of 127, by Rincewind42

User metadata
Rank Member
Rank
Member

Great stuff! Thanks for sharing this and making it open-source, I'll surely play around with it at some point!

DOS: Soyo SY-5TF, MMX 200, 128MB, S3 Virge DX, ESS 1868F, AWE32, QWave, S2, McFly, SC-55, MU80, MP32L
Win98: Gigabyte K8VM800M, Athlon64 3200+, 512MB, Matrox G400, SB Live
WinXP: Gigabyte P31-DS3L, C2D 2.33 GHz, 2GB, GT 430, Audigy 4

Reply 6 of 127, by sergm

User metadata
Rank Oldbie
Rank
Oldbie

Yes, this is definitely a great work! I hope it will be useful for those who wants to play with MT-32 and get it all from this toy.

Alas, I personally still can't use it directly. Either LA-SYNTH from 1995 or MT32 Editor requires running Windows, just different versions 😀 I wonder how hard it would be to port it to other operating system e.g. with Mono.

BTW, you both guys are right speaking about the default of master tune. It is both 440 and 442 Hz, depending on how you think of it. If you press "Master Volume"+"Sound Group", you'll see 442Hz. But effectively, it is 440Hz which is set on system reset due to a bug in firmware.

Reply 7 of 127, by SkyHawk

User metadata
Rank Newbie
Rank
Newbie
sergm wrote on 2023-04-08, 08:20:

Alas, I personally still can't use it directly. Either LA-SYNTH from 1995 or MT32 Editor requires running Windows, just different versions 😀 I wonder how hard it would be to port it to other operating system e.g. with Mono.

I'd suggest you could surely run Windows and this application in a VM. But I don't think I've ever seen a VM solution that allows access to host MIDI.

Though USB passthrough is a common feature, and USB MIDI interfaces are things.... That wouldn't help you with LA-SYNTH though, that vastly predates USB anything.

edit: Actually, DOSBox can run Windows 3.1, and maybe Windows 95, and does offer MIDI passthrough to a system MIDI interface.

Reply 8 of 127, by llm

User metadata
Rank Member
Rank
Member
sergm wrote on 2023-04-08, 08:20:

...I wonder how hard it would be to port it to other operating system e.g. with Mono.

Microsoft supports Net 6 under serveral non Microsoft operating systems (Linux, MacOs) - im using dot net core 6 for a commercial application under Linux

https://learn.microsoft.com/en-us/dotnet/core/install/

so its could be more a question if the ui-stuff is supported

Reply 10 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie
llm wrote on 2023-04-08, 18:15:

so its could be more a question if the ui-stuff is supported

It is definitely the Windows Forms UI elements that are problematic for Linux compatibility. I had a quick look at Mono earlier today- it's not a trivial task but ought to be possible to port providing all the UI control types have Mono equivalents. The other sticking point is the MIDI interface library I used (naudio.midi) looks to be Windows-only, so the midi code would need to be rewritten to make use of a different library with cross-platform compatibility.

So all in all, it should all in theory be possible, but it'd likely require quite a bit of time to get everything working properly.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 11 of 127, by Falcosoft

User metadata
Rank l33t
Rank
l33t

Hi,
1. I have tried your program and it works pretty well but I have just noticed that completely valid SysEx files causes the program to throw an unhandled exception.
It seems it's because of this line in SysExFile.cs:

 int[] sysExData = new int[dataBlockLength - 7];

So in case of a Syx file that contains an MT-32 Reset message (that has a 6 byte long data block) the above code fails. I have attached example files.

Filename
MT32_Reset.zip
File size
134 Bytes
Downloads
117 downloads
File license
Public domain
Filename
CM-32L-CM-64_Initial-SysEx.zip
File size
3.85 KiB
Downloads
118 downloads
File license
Public domain

2. I'm not a .NET expert myself so I do not really understand what is the point of using .NET6 together with Windows Forms. This way the project is still Windows only but also restricted only to newest Visual Studio (2022) and the compiled executable is much less 'retro-friendly' than a legacy Windows Forms executable...

Thanks!

Website, Facebook, Youtube
Falcosoft Soundfont Midi Player + Munt VSTi + BassMidi VSTi
VST Midi Driver Midi Mapper

Reply 12 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

Thanks for the feedback, it's really useful to have some more test material. The only SysEx files I've used for testing are Roland's MTGM.syx and the Sierra sysex library- which must not contain any reset messages. I'll have a look at the files you've posted above and update the code accordingly.

As I've not done much coding for a long time, the choice of .NET 6.0 was made in order to get access to a reliable Midi interface library. I did originally try starting the project using an old version of Visual Basic, but couldn't get even simple MIDI stuff to work reliably under either Windows XP or 10. The choice of Windows Forms was purely down to familiarity and ease of use on my part whilst I've been figuring out C# for the first time.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 13 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

I've published a new build, v0.9.1a (see updated link in my original post).

Bug Fixes:

  • Master Tuning slider now displays correct Hz values
  • Very short SysEx messages no longer cause unhandled exception

New features:

  • MT-32 reset messages are now detected and actioned depending on user selection
  • Options menu has new user selectable flag to either ignore or action MT-32 reset messages
  • System Area SysEx messages which don't contain values for every parameter are now handled instead of ignored
  • Added ability to save a SysEx file containing only System Area values. Included parameters are selectable from the System Settings window.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 14 of 127, by now_its_dark

User metadata
Rank Newbie
Rank
Newbie

Woww that's amazing. Thank you for creating this!
I've been using SoundDiver heavily for editing the MT-32 for the past few years. While the SD panel has a very complete and coherent interface, the scale of the UI is tiny on a modern display.
It is wonderful to see a modern tool for this purpose at last. The MT-32 is a surprisingly deep and capable synthesizer, this should unlock that potential for many people. 😀

Reply 15 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

Enjoy, and do let me know if you find any bugs!

I've not heard of SoundDiver before- I'll have to look at it sometime.

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 16 of 127, by sfryers

User metadata
Rank Newbie
Rank
Newbie

New build v0.9.2a is now available - see updated link in my original post. Thanks to now_its_dark and others for feedback and suggestions.

Bug Fixes:

  • Fixed bug in v0.9.1a where loading SysEx file no longer loaded patch or rhythm bank data
  • Selecting Edit Preset Timbre in patch editor now edits whichever preset is in the selected patch position- previously only the default timbre for that position was sent to the editor
  • Partial Reserve value changes now display correct part numbers on MT-32 display
  • Changing reverb settings now sends message to MT-32 display
  • Selecting partial reserve value of 32 no longer causes unhandled exception
  • Changing certain parameter values no longer sends overly long strings to MT-32 display- all messages are now within 20-character limit
  • Improved visual behaviour of save timbre/save sysex options

New features:

  • Updated partial structure display in Timbre Editor window- structure no (1-13) is now shown in list, detailed description of structure functionality shown in drop-down list and tooltips
  • Re-labelled "Sensitivity" as "Velo Sens." in Timbre Editor window to improve clarity

MT-32 Editor- a timbre editor and patch librarian for Roland MT-32 compatible devices: https://github.com/sfryers/MT32Editor

Reply 17 of 127, by JK1974

User metadata
Rank Newbie
Rank
Newbie

Hi, fantastic to see a new editor for the MT-32. I started searching for a solution several weeks ago and failed using dosbox also partly because a lot of midi commands are not supported yet by munt (WSD, RQD, DAT, EOD, RQ1 etc. - all the handshake commands). Knowing about this limited, I checked if something could be built with CTRLR having the advantage that it would also work as VST3, but the UI and the documentation is a mess, and LUA also is not that widespread (and I am not a real programmer...).
Therefore, it is great that someone took care of it right in time (by concidence). 😉

Unfortunately, I did not get it to work with Munt. I installed the latest stable version (build date 23.07.2022, library version 2.7.0, mt32emu_qt 1.11.0) on Windows 11 and started the editor. Using a Behringer UMC 404 HD as midi interface and a Yamaha SY99 as keyboard (on channel 2), all I can hear is a very short click of a sound. Starting the "Munt MT-32 Sound Module Emulator" panel, the panel always gets resetted and the Windows message center repeatedly says "Connected application: MT32Edit.exe". This does e.g. not happen when using Dosbox for playing midi files or MT-32 games.
My SY99 always sends out the "active sensing" midi command, but this has not yet been a problem with any software. That´s why I believe that the problem is related to MT32Edit because any other midi software I tried (on Windows 11) did work (playing the MT32 via Munt MT-32 panel, using Reaper, playing stand-alone versions of free and commercial VST etc.).

I am going to check it on another PC with Windows 10 and a different midi interface.

Any hints what could be the reason for this behaviour, any logs that could be enabled and be posted here?

Thanks again - and in advance for any support

BTW: If active sensing could be the reason: I cannot turn if off on my synth. It is a simple $FE/254 sent out every ~300ms.

Reply 18 of 127, by SkyHawk

User metadata
Rank Newbie
Rank
Newbie

It's been my experience that MUNT is a little bit.... quirky (and kinda crashy) in regards to how it handles applications connecting and disconnecting from it. Also, each connection to MUNT spawns it's own instance of MUNT, which sounds like it's not what you want.

I think what you need to do is the following:

* Start MUNT (This should give you a blank window as MUNT has nothing connected to it)
* Start MT-32 Edit (This should give you an actual MUNT instance ready to reproduce sounds)
* Add your physical MIDI interface to this MUNT instance so it will also accept input from your keyboard

You may wish to consider trying a loopback MIDI interface like loopMIDI, so you can start MUNT, attach it to the virtual loopMIDI interface, and then it will just stay open and maintain it's state as you do whatever you want with other applications connecting to loopMIDI instead of to MUNT directly. In this way MUNT will behave more like a physical device.

Reply 19 of 127, by sergm

User metadata
Rank Oldbie
Rank
Oldbie

One can "pin" a synth in mt32emu-qt, so that it accepts input from all new MIDI connections, which is more like having a single hardware unit connected to a MIDI port.

Albeit, I don't think that mt32emu-qt would work great in a DAW setup. If you need a VSTi that emulates MT-32, better to use exactly that. mt32emu-qt connected to a DAW will add latency one normally wants to avoid, unless the setup relies on JACK, for which some support is implemented to render audio synchronously.