I have a Dwarf here, I can map a parameter of a device to an external midi controller and can control that parameter from the midi controller.
If I change the device parameter via the editor, or load a pedalboard it is not sending midi back to the midi controller to keep it in sync.
At a minimum I would expect it to send the current values as midi when you change the pedalboard otherwise how does the controller know the current values.
Hopefully there is some setting somewhere that enables this but I can’t seem to find it.
This is quite a common behavior and depends more on your MIDI controller than on your Dwarf.
Anyway, if your controller can receive MIDI and use it to give you accurate feedback you will need to use its MIDI in (set it on the virtual pedalboard running in the Dwarf) and set up some MIDI utilities that allow you to do this. Perhaps even using the virtual MIDI loopback port.
So the question here is: does your MIDI controller allow that?
Both interpretations are correct.
Indeed when you MIDI map only one direction is possible. What you can do is a workaround that allows you to map the parameter to something in between and then output one part of it to the plugin parameter and another to the MIDI out port that goes to the controller.
I would need to do some tests to really understand if this is possible (and I’m not sure when I will have the time), but I’m imagining something either using CV plugins or the virtual loopback MIDI port.
To summarize it, you want to assign the controller to the B parameter, so what you will do is to put another plugin (or plugins) to assign the parameter to A and the out of it goes both to the plugin with the B parameter and to the MIDI out port of your controller.
I hope that it was not too confusing…and I had no beers for a few days
I got it working with a “Control To CV” and a “The infamous mindi!”
So I mapped the knob on the CV control to a midi CC, the param I want to effect is controlled by the CV, the value in the Mindi is also controlled by the CV.
This give me bidirectional midi CC and everything syncs up.
This obviously is a bit much if there are going to be loads of parameters so I have started looking through your repository at the midi code, I have found the code for the incoming midi mapping and am now looking for where to shoehorn in the opposite direction, as the control chain supports this already I’m guessing this is possible to do…
I believe that yes, but again, I think it will depend a lot on the controller that you connect, I’m afraid. The implementations on this are not really standardized
It only requires changes to mod-host, all changes are in effects.c.
Basically:
Adds jack midi output port to mod-host
Add int8_t midiOutValue to `MIDI_CC_T’. This will hold the 7 bit normalised param value or -1 for no change.
Change effects_init() to set all g_midi_cc_list[].midiOutValue to -1 (no value)
Change effects_set_parameter() to check g_midi_cc_list[] and if MIDI_CC_T matches parameter set midiOutValue to correct CC value.
Change ProcessGlobalClient() and add code to handle Midi Out. Check the g_midi_cc_list[].midiOutValue, if positive then send the midi message and set back to -1.
Automatic connection of the jack output midi port is not yet done, also probably needs a quicker comparison of symbol names in g_midi_cc_list, maybe a simple hash stored.
So now I am at the stage where I thought I would look to build and deploy something to test to the Dwarf and I have hit a bit of a wall. I hoped maybe you could help?
On the dwarf I can see mod-host using jack_lsp but I cannot see a process, I can also see /usr/bin/mod-system-control /dev/ttyS3 1500000 running, I have had a look around but can’t seem to work out exactly what this is.
How is everything setup on the Dwarf?
Next issue is building for the Dwarf, is there a setup somewhere for cross compiling mod-host with the control chain stuff?
mod-host runs as an internal jack client. it is located in /usr/lib/jack as mod-host.so inside the dwarf system.
you can use mod-plugin-builder environment to build mod-host for dwarf, bootstrapping using the special “dev” target. see https://github.com/moddevices/mod-plugin-builder/blob/master/bootstrap.sh#L182
Sorry to be a bit dim here but I though something like this would do:
pushd ~/ModDuo/mod-plugin-builder/
source local.env moddwarf
popd
make
I’m getting:
Package jack was not found in the pkg-config search path.
Perhaps you should add the directory containing `jack.pc'
to the PKG_CONFIG_PATH environment variable
PKG_CONFIG_PATH is correctly set to /home/andrewcapon/mod-workdir/moddwarf/staging/usr/lib/pkgconfig
The sizes I am getting are way off the installed binaries though so I thought I would try to add that into bootstrap as well, bootstrap works fine and installs the package.
I’m getting build errors on mod-host now though.
Should the Dwarf mod-host include readline?
Edit:
these are the size differences:
mine:
[root@moddwarf ~]# ls -ltrh mod-host.so
-rwxr-xr-x 1 root root 170K Jan 1 00:21 mod-host.so*
installed:
[root@moddwarf ~]# ls -ltrh /usr/lib/jack/mod-host.so
-rwxr-xr-x 1 root root 365K May 12 2022 /usr/lib/jack/mod-host.so*
size difference likely due to missing hylia as lib which is a static one so the entire code gets merged in.
you only need it for ableton live, so can be skipped too.