Controlling Volume of several MIDI instaces


I am using my (RPI4-)Zynthian now more and more multitimbral. But I run into problems when dealing with the different volumes. For changing the volumes I have to go to every engine (several pressing back, turning, selecting) to get to the place where to change each volume parameter.

How did you solve this problem?

Is one of those a solution?

  • Buying a Korg nanocontrol2 or an Akai Midimix and try to map each channel volume to a fader?
  • Setting up a MOD-UI pedalboard with mappings for each volume on a channel?

Regards, Holger

1 Like

I think we are getting near to the need for an output mixer on the zynth . . .


I agree with you. I’ve suggested this a couple of month ago. One unique mixer screen for controlling all the output volume from the differnet digital instruments.

Otherwise, I’m using an external midi control surface for that and the “midi learn” feature.


Oh, this is much more convenient than picking in the layers …
Besides, in popular zynthian engines for volume control there is no need to use midi learn …

Korg Nanokontrol2 turned out to be incredibly tenacious … for four years there was not a problems with him …


I have started to code up a proof of concept 16 channel JACK audio mixer and associated Zynthian integration. You can follow progress on the zynmixer branch. So far I have created the 16 stereo input channel, 1 stereo output channel (32:2) mixer with level and pan (actually balance) control for each channel and created a UI screen with 16 faders. The UI is only touch / mouse controlled at the moment and only controls the levels, not balance. The mixer is not integrated with Zynthian audio routing (something I may ask for help from a grown-up). It is very much a work-in-progress and there are many features I intend to borrow from other projects I have done in a similar ilk so expect rapid improvement.

If nothing else this is an escape from the grind of continual step sequencer development and yet another reason for @wyleu to threaten me with his torture dungeon.

I expect to have level and balance working soon with relative touch control (as opposed to current implementation which is absolute), channel legends, fader backgrounds, master faders, etc. I guess mute / solo might be nice and may even consider routing channels to peak meter (or, if not too much overhead, individual level metering…).

I wouldn’t look at this if you are even slightly snowflake as it doesn’t do much yet and may offend your sensibilities!!! I thought I should mention that I have done the work though in case you were all busy beavering away in your man-caves on similar solutions. (@wyleu probably has a magnet on a pendulum driving his auto-pan…)


Hi Brian,

many thanks for starting this! It will be a very nice solution to have everything in one box :smile:

Maybe it would be a good way to map the input/output volume also to MIDI-CCs to also have a centralized way to use an external controller?

I am not sure, but perhaps later adding MICI-CC for solo/mono/pan for each channel may also be a good idea?

Regards, Holger

Indeed we should (will) have remote control of the mixer. I think we should have OSC control and also MIDI control with the use of 14-bit controllers where possible because 7-bit is a bit pants for this kind of thing - lots of zipping. I have built in some damping of value changes, i.e. level and pan do not change instantly to the new value but ramp towards them quickly. This is currently done at frame boundaries - we will have to listen and hear whether this is acceptable. There may be a performance hit to take this down to sample level.

Regarding performance, the mixer seems to use about 2% CPU but I haven’t done much profiling yet. It may vary - we certainly need to keep an eye on this. There may be some optimisation available, e.g. we may be able to combine the DPM into the same code reducing overhead but of course that is in the future…

FYI: I started coding this because I got rather frustrated yesterday trying to use Zynthian and not being able to easily tame levels.

I have only made this stereo mixing at the moment but we may wish to make it more flexible for soundcards with more outputs… we can look at that later. (I don’t have such a card.)

I have also noticed that this is an important extension in order to be able to work multi-timbrally and rationally. Great that you have started a solution so quickly!

I will come to test it tomorrow, but then I also have a Korg nanocrontrl (on loan).

Hi Brian,

Have done this now. I can see the Mixer (alpha) menu and I can enter, but I cannot change anything by touching. The descriptions below the channel strips are currently unreadable on my Zynthian-v2.0 display (OzMaker-3.5")

But I also tested the Korg nanoKontroll2 by mapping MIDI-Channel/MIDI-CCs on the faders and with fairly good success: Only OBxD refuses to cooperate with the Midi-CC 7 from the nanoKontrol2. Perhaps there is a default MIDI-CC-mapping missing.

I noticed that Dexed also has problems with MIDI-CC. I think I have to rebase some code to the working code of MicroDexed…

Regards, Holger

The channel strip was added quickly and is likely to be difficult to read / populate with sensible text. I will have a think. I don’t know why you can’t adjust levels by dragging faders. It may be related to the mute function I last added which toggles of you press and hold the fader for half a second. I am going to change that. Are you not seeing the faders change when you drag then?

MIDI control of CC 7 is a related but different thing. It is certainly a useful feature and we should try to ensure all engines respond to it out of the box. I think we should also try to ensure volume for each instrument appears in the same location in the control screens, e.g. first control on first page.

Is the nanocontrol2 becoming the standard zynthian interface for mixer control?

do not respond by default or are not “midi learn” at all for CC7:

Calf Monosynth, Helm, Nekobi, Noise Mak3r, Obxd, Raffo Synth, Triceratops, Vex, Wolpertinger, amsynth … the list is incomplete…

1 Like

nanokontrol2 is ok, but I would prefer Akai Midimix as I would rather have a few more pots than play/pause/record buttons.

Unfortunately, switching from stepseq branch to mixer branch (and also to master branch) produce a blank screen.

This will be an incompatibility in the zynseq file between those versions. (Can only go forward, not back in version.) It will be resolved when we merge zynseq into master which @jofemodo is currently working on… or am I??? (I am not!)

To get it working, simplest is to delete the .zynseq file from /zynthian/zynthian-my-data/sequences. (I think. I am in the garden with beer and BBQ so can’t (won’t) validate that right now!)


Ohhh yesssss, milord …

1 Like

Oy! less of this you’re all peasantry from where I sit . . .

In other news the first slider on a nanocontrol2 operates the zynthian select list on the GUI . . . .

zynmixer is the current branch?

Do I need other branches to be set?

zynthian-bigtouch[665]: File “/home/pi/zynthian/webconf/lib/”, line 31, in
zynthian-bigtouch[665]: import zyngine.zynthian_lv2 as zynthian_lv2
zynthian-bigtouch[665]: ModuleNotFoundError: No module named ‘zyngine.zynthian_lv2’

Got it now I think.

Control is a bit odd from the nanoKontrol2 doesn’t seem to do anything but first fader alters all alsa mixer settings in sync!!

But slider one selects the channel …
I can select a channel but touch doesn’t do anything.

disable “Single Channel Mode”…

Already disabled.

Control MIDI Channel Control Change Range
First slider CH1 Control Change 0 0 -> 127
R Sw CH1 Control Change 64 127 <>0
M Sw CH1 Control Change 48 127 <>0
S Sw CH1 Control Change 32 127 <>0
Top Encoder CH1 Control Change 16 0 > 127
Second slider CH1 Control Change 1 0 > 127
R Sw CH1 Control Change 65 127 <>0
M Sw CH1 Control Change 49 127 <>0
S Sw CH1 Control Change 33 127 <>0
Top Encoder CH1 Control Change 17 0 > 127
<< CH1 Control Change 43 127 <>0
>> CH1 Control Change 44 127 <>0
Stop CH1 Control Change 42 127 <>0
play > CH1 Control Change 41 127 <>0
Rec o CH1 Control Change 45 127 <>0
cycle CH1 Control Change 46 127 <>0
set (Marker) CH1 Control Change 60 127 <>0
< (Marker) CH1 Control Change 61 127 <>0
< (Marker) CH1 Control Change 62 127 <>0
< (Track) CH1 Control Change 58 127 <>0
> (Track) CH1 Control Change 59 127 <>0

127 <>0 ( 127 on Press 0 on release)
CH#01 CONTROL_CHANGE 58 => 127

0 -> 127 Variable control



Hi @C0d3man. Will you please try the latest commit on zynmixer branch? I have rotated the channel legends through 90° and added the engine and preset name. This makes it far more useful.
This image is taken from a screen running at 480x320 and even with onscreen buttons and all 16 channels showing it seems okay.

1 Like