You are here

[SOLVED] Using MIDI CC to control plugin synth param (Calf Monosynth)

Hi everyone,

First of all, thanks for the awesome program. It has been running solid as a rock using the KXstudio repos on Xubuntu 16.04 64-bit for me.

One minor thing that's bothering me, though, is that I cannot find a way to have Calf Monosynth parameters respond to MIDI CC messages when run as a plugin. What I've done so far is this:

  1. Create a MIDI track
  2. Add Monosynth as a plugin (LV2)
  3. Enable Monosynth plugin

At this point, playing my MIDI controller keyboard generates sound, so the synth "sees" the MIDI data.

Next, I've tried teaching a knob to dance to the song of MIDI. ;-)

First attempt: RMB on a knob in the Calf GUI (the shiny one), which yields a greyed-out menu with a single item along the lines of "send CC to learn" or similar - I'm not currently in front of my system, I'm afraid. No way of making the synth see the control data.

Second attempt: open the plugin properties, which shows a more generic (I assume) gui, where I can RMB on a controller. The subsequent menu does detect the CC data, but after confirming this dialog, it still doesn't seem to respond to the controller, although then I can see the data in the status window.

So: Qtractor sees the CC data, but the controller has no effect on the synth. When using the same synth inside the Calf rack I can assign controllers with no problem. What am I missing, here? Any insights will be greatly appreciated.


rncbc's picture

hi Marc,

thanks for your kind words about qtractor.

re. the MIDI controller issues, you should know that:

  1. for all LV2 plugin types, which Calf are one example, assigning a MIDI controllers to any of their parameters (eg. own GUI knobs) is not quite permitted by the LV2 specification--most probably that is exactly why the Calf implementation has its function disabled (grayed-out rclick menu). iow. the binding of MIDI controllers to any LV2 plugin input control ports should be, must be, a LV2 host's initiative and responsibility. that's why you're left to:
  2. for any plugin type supported by qtractor, which LV2 is just one major example, assigning a MIDI controller to any of the exposed parameters is possible through the generic plugin properties dialog or window aka. generic stock GUI, there you find this "MIDI Controller..." option by clicking the RMB/context-menu over one and each of the parameter value entry widgets (sliders, check-boxes, etc.).

now, this one last option, which i think you already confirmed, is what you should exercise, taking note that the MIDI input may not be the same as the performance one: it reads from an alternate MIDI control input port or bus if you opted in to be dedicated (see menu View/Options.../MIDI/Control)--make sure you have your physical MIDI controller connection done alright at this point.

also remember that this MIDI controller assignment lives as for the current session only.

otoh. it might also happen that you're suffering from a dead old inter-operability issue that haunts qtractor since ever, especially if you're using a Gtk+ based environment (gnome, xfce, etc.) and some nasty dirty lurking conflicts arise when the DE's native file requester dialogs are summoned under a Qt application.

the later issue is infamous to make MIDI control event input to stop working now and then and completely until you restart the program and/or session. however there are means to solve or mitigate it: try one or both of the following options:

  • View/Options.../Display/Options/Use desktop environment native dialogs: OFF.
  • View/Options.../Display/Custom/Style theme: choose any but "Gtk+"... "Plastique" (qt4) or "Fusion" (qt5) are favorites here ;)


Thanks for the (very) quick response! I haven't looked inside the MIDI control options yet, I assumed all MIDI input would be the same. Whoops... I'll give this a shot when I get home tonight and let you know how it fares!


Well, I've tried the suggested solutions yesterday night - with, as well as without dedicated control input - as I had already set the theme to Plastique. With the dedicated input enabled I connected my controller to both the Master In and the Control In in Qjackctl. The learn dialog from the instrument properties responded to the controller just fine, but the sliders stay in the same position even after sweeping the pots on my controller through their entire range.

Next, I tried loading a dssi plugin, WhySynth. This worked as expected, i.e. instrument properties > RMB on slider > turn controller pot > OK. Turn pot - slider updates. Cool! However, when run as a plugin I just cannot get the Calf Monosynth to respond to external CC messages while notes, pitch bend and modulation get through just fine. Colour me puzzled... Is this some LV2 issue? Even then, I'd have expected to be able to control the sliders inside the properties panel. I guess I'll just have to run Monosynth externally from the Calf plugin host.

Is there any way I don't have to use two tracks for this synth (midi track + audio track for routing the audio output of the synth into) or will this be unavoidable?


rncbc's picture

maybe it's all due the MIDI controllers catch-up feature: some parameters range are way too coarse for the catch-up threshold...

just check (turn on) the "Hook" attribute on the MIDI Controller dialog and things just start to work as it should ;)

you don't have to have two tracks for each MIDI instrument track: audio output will be directed to the first audio output bus available (by default; you can direct to any other audio output bus as long it exists or even have dedicated output ports--see plugin chain list context menu, last "Audio >" sub-menu...).

if what you really want is to bounce/freeze/stem or render the MIDI track or instrument performance, then you may well do it via export audio (see menu Track/Export Tracks/Audio...).


So... what does this "hook" mean, exactly?


rncbc's picture

it's the opposite to "catch-up"... that means the MIDI controller value gets in immediate sync (ie. hooked) with the target subject value (the parameter in question). otherwise, it waits for both current values to match each other (ie. catch-up), in either change direction, up or down.


[UPDATE] ps. today's git_head qtractor v0.7.8.2+ is probably an improvement on this MIDI Controller's catch-up threshold issue--try it out, if you can and please ;)

That was it, I can now load Monosynth as a plugin and assign my MIDI controllers through the plugin properties pane. Enabling "hook" made it pick up every change. Love it! :-)

re: git_head, I'm afraid that will have to wait until I return from my holiday, as I have fairly crappy - and quite expensive - internet right now. I will be able to test it in a couple of weeks, though. I'll definitely keep you posted!

Thanks again,


Add new comment