Basic idea: Hardware controller for one or more Zynthian synths. To assess the life of capability based on raspberry pi zero, special keyboards and OSC CUIA communication. Therefore, the connection is realized only and only using the network. In the first phase, I resigned myself to bold and long pressing of the buttons. Only simple short presses are implemented.
I quickly assembled the following components:
raspberry pi zero
Waveshare ETH/USB HUB HAT (B)
2x Keyboard with 12 buttons + 2 knobs, one-handed macromechanical keyboard
I taught the keyboard to send a letter and ENTER, so that I would not have to treat the input specially in the bag. The first keyboard sends lowercase letters, the second uppercase. The knobs also send letters, eg knob #1 when turned clockwise will write ‘n’ to the terminal.
A simple python script that starts when rpi zero is turned on, then converts the input from the keyboard to an OSC command. Before that, of course, the connection with Zynthian is established.
My test Zynthian is not quite typical, it is headless:
Raspberry Pi 400 Rev 1.1
Audio: Behringer UMC404HD
Display: WaveShare 7 HDMI+USB 1024x600
Wiring: DUMMIES
I2C: Not detected
Profile: NoWire
zyncoder: testing (055771b)
zynthian-ui: testing (961111b)
zynthian-sys: testing (5b85b59)
zynthian-data: testing (1321e5d)
zynthian-webconf: testing (15682e4)
After a few hours I was done.
You can see how this assembly looks in the photo. The zero is out of the picture :-).
I also tried workflow capture. I caught how /CUIA/SCREEN_ZYNPAD and /CUIA/SCREEN_PATTERN_EDITOR work. I haven’t figured out how to share it, so I’m sending it in a zip file.
ui_sesion-20231029145629.zip (1.2 MB)
I found the following issue.
Since communication is unidirectional, rpi sends OSC commands to zynthian. I am not able to find out the active channel number for the commands:
CHAIN_CONTROL %i Set active layer to %i and show control screen. Defaults to current chain.
CHAIN_OPTIONS %i Show options for chain %i. Defaults to current chain.
So I tried sending these commands without the %i and of course nothing happens. The problem is that I can’t get to the Options Screen without simulating a bold and long click. Would it be possible to ensure the same behavior as with the command /SCREEN_PATTERN_EDITOR, where sending it in the case of displaying the Zynpad screen turns on the editing of the active pattern? Or can another trick be used?
I looked into zynthian_gui.py and found that if %i is not defined for /CUIA/CHAIN_CONTROL, then self.layer_control() will be started. In case of /CUIA/CHAIN_OPTIONS, the code only ends with an error message
If this could be overcome, then this setup would cover all Zynthian control needs. And then I would try to add switches so that I could control other zynthians from one controller. I’m considering a maximum of 4 units :-).