2xAA / genmdm-editor

A web-based interface for genMDM and Mega Drive MIDI Interface, MIDI controllers for the Sega Mega Drive/Genesis.
https://2xaa.github.io/genmdm-editor/
MIT License
39 stars 6 forks source link

General MIDI instrument presets #204

Open Horganic opened 3 months ago

Horganic commented 3 months ago

A set of 128 patches representing the General MIDI instruments (https://en.wikipedia.org/wiki/General_MIDI) could be made available through a General MIDI option/mode. Might be nice to have it as a mode rather than a patch/configuration import so you can flip back and forth easily between "banks".

Activating a General MIDI mode would replace the patch list with a list of presets representing General MIDI instruments (example patch settings at https://github.com/rhargreaves/mega-drive-midi-interface/blob/main/src/presets.c).

Beyond instrument patches, MIDI files are often arranged using using rapid program changes on a single channel to multiplex different instruments on a single channel, so maybe in this mode Program Change messages could be used to cache patches into RAM slots in this mode rather than sending the entire patch each time.

Alternatively, it would be nice to have a readily-available/bundled import file or configuration save-file whose 128 patch slots are already pre-configured with General MIDI instruments.

Disney's Main Street Electrical Parade awaits!

2xAA commented 2 months ago

Hey @Horganic,

A General MIDI mode sounds good to me! We can take the MDMI patches and bake them into genMDM Editor for genMDM users.

Quite a few considerations to make for genMDM though.

MDMI doesn't support RAM slots but not an issue as it already has the GM patches on program changes.
RAM slots are a genMDM only feature and there are only 16 of them.

genMDM

For genMDM users, we would need a mechanism to signal which of the 128 patches should be stored in RAM vs sent via CCs. One way of doing this could be learned with a whole MIDI song play-through and program changes weighted to then know which patches can be stored in RAM, but that sounds like a lot of work for something which may be quite niche.

Another way of doing this would be to create a more expansive UI component for patch management and select exactly which patches you would prefer to have loaded into RAM.

Neither way is particularly good for two songs subsequently performed if they have different patches they need loaded into RAM.

The RAM preference could be saved into the .ged editor state and automatically loaded to the device when the editor state is loaded, which again feels a bit clunky, or again create another UI component for editor state management within the app.

MDMI

For MDMI users, in MDMI mode and the proposed General MIDI Mode, we can pass-through Program Changes to select the FM Presets defined by MDMI, but we don't really need to support this. MDMI users can just send MIDI directly.


Hopefully some of that makes sense. I've just had my morning coffee, haha.