Machinedrum & Monomachine’s global levels trick with Max6

Sep 18, 2012 - 10:50

For sure you already know I sometimes post about pure art, feelings but also about technology and even detailed stuff about my machines.

Here is a post about my new live setup based on Elektron Machinedrum & Monomachine .

Here is how I deal with the fact that levels of each track aren’t global parameters but kit-dependent.

Because I’m using a Max6 patch for the visuals parts of my performances, I decided also to add a small piece of patch only for my Lemur Application on my iPad.

Problem summarized
We (almost) all love tweak our instruments, find the right sound, save it and, on stage, play with global volumes/levels tracks.

The fantastic Elektron’s machines, those which made me dropping Ableton Live at least for my next year live performances, doesn’t provide levels as global parameters.
When you change a pattern to another one which doesn’t use the same kit, the new kit is loaded and levels are changed too, of course.

I’m using machines like if they were connected to a global mixer and I want to be able to control levels completely independantly of kits, patterns etc.
Then, I wanted to have global levels.

How I did that ?
Considering the MIDI implementation of Elektron’s machines, I learnt that the #7 Control Change message of each track was related to the level of each track.

Even if mute are globals in Elektron’s machines (thus independent of pattern kits etc), I wanted to have them on my Lemur/iPad. The corresponding Control Change is #3 for each track (0= muted, 1-127= unmuted)

Here is the patch I used with a coll object to keep the trace of all current levels.

It is very basic.

Here is a view of the current Lemur/iPad. You can see the mute switches above the levels faders.

Basically, the patch grab the midi data from faders & mutes.
Mutes data are passed directly to the Elektron’s machines.
Levels aren’t.
They are stored in the coll structure.

The trick is the permanent polling which isn’t the most efficient way.
Indeed, if you click on the toggle switch in the patch (and the patch starts automatically with this switch checked), the qmetro object bang very quickly the coll, making this one popping out all data inside.
Those data are processed with some basic & native objects and the result is sent to Elektron’s machines.

It means each 20ms, the global stored levels are sent to machines. Even if I load a new kit with its very own values of levels (which means nothing for me, considering I’m using Amplification / volume to really design my sound), in the worst case, 20ms after, the machine already got the central handled levels.

I tested it in many conditions, 20ms is very very enough. no drops, no raw & sudden jump of value, it is too fast for that.

So, let’s go further and add some controls on the iPad to drive visuals… soon.

Possible improvements
The polling isn’t really THE good solution.

I also wrote that in my Arduino’s book .
But it works.
But I’d like to improve it.

Event based update would be very better, of course.
But here, the event would be a pattern change. Indeed, I only need to update the machines when the pattern is loaded. This event can be tracked by combining the triggering info (I’m using the Program Change for that) and the song position and bars stuff.
I’ll do that later. I need to focus on visuals.


No Comments


julien bayle's facebookjulien bayle's twitterjulien bayle's google+julien bayle's soundcloudjulien bayle's youtube channeljulien bayle's vimeo channeljulien bayle's tumblr