Zynthian Headless GM Module - Help needed

I’m hitting a wall trying to get a simple setup as a General MIDI sound module. I’m clearly missing something fundamental, and I’m hoping someone can point me in the right direction. I feel like I’m going around in circles!

I’m building a custom MIDI instrument and want to use a Raspberry Pi running Zynthian as the sound engine for demos of the instrument.I want to be able to select different GM instruments using a knob and a small screen (the GM instruments names and GM indexes are hardcoded in the device).

I’d like to iterate through the 128 GM instruments. I envisioned simply sending Program Change (PC) messages to select them. According to my understanding of MIDI, this should be the standard way to do it on Channel X.

My setup is a fresh oram lite image with:

  • ZS3 disabled Since I don’t want to create 127 layers, I’ve disabled ZS3. I also verified there are no MIDI filters in the webconf.
  • Single Chain: created a single instrument chain listening on MIDI channel 1, using FluidGM as the instrument. I’ve set the Chain mode to “Multi” (and also tried “Active”)
  • PC Messages: I’m sending Program Change messages (0-127) on channel 1. The Zynthian UI log shows these messages coming through from the main on the correct channel but not forwarded to the CH midi input. And the selected instrument doesn’t change. It stays on the default instrument.
  • MIDI Learn: I can’t seem to get MIDI learn to register the Program Change messages.
  • Workaround (not generic & non persisted): If I send a MIDI cc instead of PC and learn on a CC message (with absolute index value), learn in relative, then select Absolute mode and then don’t retrigger the learn, then I can change the program. But this has to be done at every boot even when i save the snapshot, which is not practical.

Bonus Questions / Observations:

  • CC Filtering: I’ve noticed that the CC settings within the instrument chain seem to be ignored. CC messages come through whether the CC filter is enabled or disabled. This seems odd.
  • Mapping PC to CC: If Program Change messages aren’t the right way to do this in Zynthian, is there a way to map the incoming PC value to a CC#X message on the same channel? If so, what’s the syntax? (e.g., “PC 1 on Channel 1 → CC#X 1 on Channel 1”).
  • Persistent Settings: Is there a way to make this work persistently after a reboot without having to connect via VNC and manually configure the cc aboslute value? I’m looking for a configuration file or some other method to save my settings.
  • The FluidGM seem to skip some instruments when going incrementally from 0-127 with cc messages.

I would really appreciate any help or guidance on what should be the zynthian config for this simple usecase. I’m happy to provide more details or midi logs etc if needed. Thanks in advance!

Thanks a lot to the Zynthian community and developers

Hi @jhordies,

Sorry if this is a little out of topic, but if you mainly need to play GM sounds, maybe the mt32-pi project could be better suited for your needs?

Of course zynthian remains an extremely powerful and exciting project worth following.

Hope this helps, have a nice day.

Thanks @ReCremisi89 for your answer.
I didn’t know about this project, the readme is very sad though…
I got my zynthian working last night, the problem seem to be FluidGM. I used fluid synth (It took me a while to understand that I needed to hit the right arrow to see the sampler engines in the engine list) and now use a few different instances with different soundfonts on different channels.
Pc messages are changing the instrument of the channel without any midi learning needed and on GM soundfonts, the program matches the selected index.
So I think there is a problem with fluidgm and the handling of pc messages.
Another problem to use absolute values in cc midi learn.
Thanks again to the developers and community, it’s heart warming to find this project evolving every time I come back.

1 Like