Mec Kontrol with Brds and eBrds

ok, finally got around to putting together a release of a project I’ve been working on…

heres is a quick YouTube video, which kind of shows what it does:

so what do we have…
really two bits of new technology
a) Kontrol
this is a new way for me to put parameters control into patches (initially PD), its aim is to improve things for both the patch developer and users, by providing a simple to use infrastructure.
for a user, they see a uniform UI, that allows pages parameters control, saving and loading of presets and midi learn of any parameter.
furthermore these parameters can be controlled remotely via OSC.
b) MEC (Micro expressive control)
this a project Ive been doing for a while, it allows controllers usually associated with computers to be used on ‘micro platforms’ , in particular the Madrona Labs Soundplane, and the Eigenharps from Eigenlabs.
However, I also extended it to the Push 2, and have integrated it with Kontrol.

this means, with MEC + Kontrol, you get expressive control of the Organelle, and also the ability to control all parameters from a Push 2 … as seen in the video :slight_smile:

phew… so as part of this Ive released 3 things to patchstorage today:

  • Brds with Kontrol link , a new version of Brds with is controlled by Kontrol

  • eBrds with Kontrol link, a new version of Brds with is controlled by Kontrol, but also has expressive OSC input, which can be sent by MEC

  • MEC link

these are all still very much under development, sp the preset files, and meta data files, osc messages are all subject to change… and i wont be providing backwards compatibility :wink:

(Id also recommend keeping the older brds version around, in a different folder)

5 Likes

Very cool! Will midi learn work with other controllers or must it be either Push 2 or Eigenharp?

1 Like

midi learn works with any midi device… in the above video its how the pyramid sequencer is automating the parameters.

to use:
a) press encoder to bring up menu
b) activate midi learn
c) wiggle a parameter on organelle (you can still change page if necessary)
d) wiggle a midi controller knob (cc only currently)
(repeat c and d, to do more mapping)
f) deactivate midi learn

to clear a learn, select parameter, and then turn midi control to zero.
(i.e. cc val 0 = unlearn)

you can do as many parameters as you wish - so you can map all parameters if you wish.
also, a single cc can control multiple parameters.

… oh, and to save for another session, use ‘save settings’ on the menu.

(presets are similar, you create new ones, and save them, but you need to use save settings to make the persistent across sessions)

3 Likes

EPIC
You beauty!

MEC “Press to express” … genius!! @thetechnobear :beers::beer:

(now I do have some Pico’s around…ummm picomidi.json or picoaxo.json ?

1 Like

both are mpe…
the difference is which midi device they target…
picoaxo links directly to an axoloti
picomidi creates its own (virtual) midi device
picopd links to pure data

and for completeness
picoosc - eigenharp pico - spitting out OSC (t3d compliant, should be compatible with ML Kaivo/Aalto etc)
pushkontrol - kontrol interface for Ableton Push 2.
sposc - soundplane - spitting out OSC (t3d)

… you can also create your own configuration files, eg, if you want to configure for an Alpha or Tau, or have multiple inputs/outputs :wink:

important note
if using PD, you should start the PD patch first, then MEC
the reason is, MEC also uses virtual midi devices (like PD), and the first application started gets 128:0 etc…, which you probably want to be PD, as thats what Organelle kind of expects.
(unfortunately, when creating virtual midi devices, they are numbered on a first come, first serve basis… so I cant stop this…)

ALSO, by default the patch_loaded.sh script disconnects all alsa devices, (aconnect -x) , this conflicts with MEC, which also forms alsa connections…
Im not sure of the best way to handle this yet… one option is to override patch_loaded.sh, and remove the aconnect -x… but perhaps I can find a better way.

1 Like

Brilliant, thanks @thetechnobear! I am working on a version of clds that will add LFOs / modulation to all parameters and mapped for my Korg Nanokontrol. Will take a look at this patch and see if MIDI learn can be easily incorporated.

2 Likes

I will be adding ‘kontrol’ to all MI patches soon, and others too :wink:

the reason ive not done so far, is there are still changes underway, including possible changes to the meta data file format, and also ‘preset’, and also changes to how the patch interfaces with the kontrol external.
which means all patches based on it, will have to be updated and re-released with a new version of kontrol - hence its better for me to have one patch released, and tested, where i can iron out issues, before rolling it out more widely.

by extension, this also means , i do not want this version of kontrol distributed in other patches, consider it a ‘pre-release’… but of course you are free to use for “personal use”.

(also frankly, i don’t have the time, at the moment, to explain the ins and outs of kontrol to other patch developers )

Wooh! speechless, no EigenD, no laptop, no audio interface… in sight
Eigenharp Pico+Organelle (MEC+OSC and Mark’s @thetechnobear trickery and art) its an unbelievable experience! happening right in front of you.

Kontrol (as on this “new” Brds) is many, many steps high taking care of parameters pages and having access to all of them (visible or not), with the most strait forward midi mapping of them all!! super easy.

What a great achivement! :slight_smile:

1 Like

Midi learn - brilliant and straightforward
Multi page template - massive improvement! :smiley:

Thanks!

1 Like

I did try a couple of things…
ummm for LinnStrument mpe… (LS want to have fun;-) @thetechnobear

    {
        "mec"  :  {
            "mididevice"  :  {
                "input device" : "LinnStrument MIDI",
            "mpe : true,
            "pitchbend range" : 48.0,

"mec-app"  :  {
    "outputs" : {
        "midi" : {
            "virtual" : 0,
            "voices" : 4,
            "mpe": true ,
            "pitchbend range" : 48.0,
            "device" : "Pure Data:Pure Data Midi-In 1 128:0"
        },
        "_console" : {
            "throttle" : 0
        }
    }
}
}
1 Like

did this work? looks to be missing a few braces… or perhaps thats just the formatting on forum.

(Ive had MPE input working before, Id just need to go pick up the config, and check its still working :wink: )

1 Like

eheh nop… I need some more guide lines or a working example :wink:

1 Like

cool, I wasn’t sure if you were asking for help, or claiming success…
I’ll go look up the configs and also test them again… then i’ll post and explain whats needed.
(I’ll need to know the Linnstruments device name, which we could get from the ‘diagnostic tool’)

1 Like

Thanks :wink:

then it’ll be something like

LinnStrument MIDI:LinnStrument MIDI 28:0

but we can double check this later… if you run mec from the command line it will tell you if its wrong.

1 Like

Yes! (and no worries doing late :wink:

ok, the config should be: (put in a file called e.g. linnosc.json)

{
    "mec"  :  {
        "midi" : {
            "input device" : "LinnStrument MIDI:LinnStrument MIDI 28:0",
            "mpe" : true,
            "pitchbend range" : 48.0
        }
    },

    "mec-app"  :  {
        "outputs" : {
            "osc" : {
                "host" : "127.0.0.1",
                "port" : 9002
            },
            "_console" : {
                "throttle" : 0
            }
        }
    }
}

I test this on the macOS against Aalto and worked fine, so should be ok on the Organelle to use with eBrds
(I use OSC in preference to midi mpe when talking to Pure Data, higher resolution, and feels more fluid to me)

ok the input device is an ‘educated guess’ , so if it doesn’t work, what you can do is on the Organelle, connect to HDMI/keyboard etc.

cd /usbdrive/System/MEC
run.sh 

then select device, this will then print the output to the console
if its the wrong device, it will say it cant open it , and have a bit following it saying’available devices’, where it lists the devices available… so you can get the right one :slight_smile:

remember run mec after you have started eBrds… but you’ll be familiar with this as you already have the pico working :slight_smile:

(of course, I will point out, that you could update your PD patches to understand MPE , then you wont need MEC with the linnstrument… we only need for Soundplane/Eigenharps as they are not class compliant midi devices)

1 Like

OK! working!
This small “correction”
"input device" : "LinnStrument MIDI:LinnStrument MIDI MIDI 1 28:0",

Saving the fun for later, have to run…outside.

1 Like

Finally, my Pico is free from the tyranny of my Mac! I owe you a beverage!

I was thrashing around this morning trying to get Linnnstrument to work, and came to the parallel conclusion that
"input device" : “LinnStrument MIDI:LinnStrument MIDI MIDI 1 28:0”

(I should have just had some coffee and waited for keymanpal to solve it.)

With 3.0, I was seeing a “MidiInAlsa::openPort” error, but upgrading to 3.1b2 resolved that. (I owe you another beverage!)

The bend range in the snippet above was off for typical Linnstrument setup, 24.0 seems to be working nicely.

I am now bumping into an issue where I hear chords/remnants of prior midi note values when I play a series of different individual notes. I think this might have to do with the way Linnstrument cycles through channel numbers vs the 4 available voices in eBrds. I have experimented with limiting the number of channels in the Linnstrument’s per split settings to 4 (and also experimented with 4 plus or minus a few), but am still hearing a different sound every 4th (or so) note.

“Adapt brds to Linnstrument’s MPE” was actually on my list of things to do this weekend, so this thread came as a very pleasant surprise.

To summarize: After upgrading to 3.1b2, this json works for me:

{
"mec"  :  {
    "midi" : {
        "input device" : "LinnStrument MIDI:LinnStrument MIDI MIDI 1 28:0",
        "mpe" : true,
        "pitchbend range" : 24.0
    }
},

"mec-app"  :  {
    "outputs" : {
        "osc" : {
            "host" : "127.0.0.1",
            "port" : 9002
        },
        "_console" : {
            "throttle" : 0
        }
    }
}

}

2 Likes