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