New tool (3.0): Mlrx

I have just released a new version of Duplex which include the first “production ready” version of mlrx
Many planned features have been implemented, and the Renoise integration more tight than ever.

See first post (updated), or grab it here:
https://forum.renoise.com/t/duplex-beta-versions/30625

Looks completely impressive!

any chance of adding “phrase” to the list of midi mappable controls?

Yes, we could make all those controls become natively mappable. I simply started with the rotaries, because they work quite well in this way - being standard Renoise MIDI mappings (CTRL/CMD+M), you don’t get the luxury of messages being sent back to the controller.

So, unless you actually assign the phrase button mapping via Duplex (which is possible, also in the current version), you won’t see the button light up to indicate it’s state.
But then again, this sort of fancy behavior is by far most important for the trigger buttons, seeing the playback position within the loop etc.

ah i see you what you mean,its just im using a launchpad and all the buttons are used up but reaching for the mouse is a bit of a hassle…maybe for the slice and phrase functions it would be possible to do something like holding down a pad for a certain length of time…maybe the buttons that are already set for the “hold” and “toggle” settings. (which are 8th row no 1 + 2 pads on the launchpad"

That would be quite simple actually, just exhange this:

set_mode_hold = {  
 group_name = "track_controls",  
 index = 1,  
},  

With this

set_source_phrase = {  
 group_name = "track_controls",  
 index = 1,  
},  

(getting rid of HOLD mode because TOGGLE is very similar, and perhaps more useful)

Doing this you’ll get the ability to press/hold the button, to control phrase recording. Phrase recording is activated when held (and playing), but you can also transfer any track into a phrase by doing the same thing while playback is stopped.

All of this is specified in the Launchpads’ mlrx configuration - “group_name” is referring to the named group within the control-map, and index is the position within this group (first button, in this case)

You can modify the layout quite a bit, using these two files. Let me know how it goes :slight_smile:

How can I make one of these for the Novation Launchkey?

I have Duplex Browser…

I did a quick search, and according to Novation there isn’t support for bi-directional MIDI (LED talkback), unless you are lucky enough to use one of the supported DAWs :confused:

But in any case, you can still use the MIDI keyboard and sliders/encoder to trigger & control mlrx (including the arpeggiator) :slight_smile:

the more i play with this the more fun t gets…

There is hope if someone who owns the device also knows a bit of Lua. I Googled it a bit and I found that some people have been talking about this on another forum: http://forum.djtechtools.com/showthread.php?t=80944

It would be natural to then write something like:

  
<param value="E2|Ch10" action="C6%7CCh1" type="button" minimum="0" maximum="127">
  
  

Though MIDI devices do not support “action”. But it would make sense if they did.

Indeed it would, and I see no reason not to implement it like that.

Thanks for the digging, ValentinDavid.

I have being playing Mlrx and I tried to figure out how to use it. I do not think I understood everything. I have some remarks about the applications. Probably most of them are due to the fact that I tried to use it in a way that was not intended.

When I switch from “hold” to “toggle”, I would like to be able to switch off the track. If I do that, once the pattern looped it will play again the sample with no way to remove it, unless put the track in write mode.

If I manually slice a sample, then it shows up as “slice” on Mlrx. Good. Then I start to record a phrase. Everything works. I stop the recording of the phrase. Then the slice goes off. But the sample is still slice. I cannot play anything anymore except in phrase mode. I cannot even switch the slice mode manually. I then need to restart Duplex.

I am not sure about the clone button what it is intended for. As it adds a new pattern, the whole song loops then on two patterns, then three, etc. I thought at the beginning that it was some kind of snapshot to store an interesting pattern before erasing it.

That would be nice to be able to switch a sample to “one-shot” directly from mlrx. Though it is possible to do it manually on the instrument. For drum samples, it is quite interesting. Also I have noticed that in touch mode you cannot have several notes in the same time. For example if you use an external midi keyboard, you cannot play several notes. For sliced drum samples as well it would be nice, since when you hit the snare, the cymbal should not decide to go mute. And also for short samples not synched intended to be played on the keyboard to register a phrase (like a one note sample), it would be nice to be able not to loop the sample. I thought the “sample loop” option was doing this, but it did not seem to do anything.

Instead of using an external keyboard, it would be nice to use the triggers of a track as different notes on a sample. I would see that in the “track output” section.

If I click toggle on a track, wait a bit for the cursor to be around the middle, then toggle it off. Then I press “erase”. And then I toggle it on again from the beginning, the cursor will start from the middle, do all the steps until in comes back in the middle, then jump to the beginning. I have seen other ways to make this behavior, but I do not recall how to reproduce it.

There seems to be a bit of latency when triggering notes from a keyboard through Mlrx compared to when mapping the keyboard directly to the instrument. Could this be? Any plan to find a way to optimize that?

It would be nice to be able to have several devices for on application on Duplex. It is possible to have several applications for one device. That was probably because most of Duplex’s applications were small. Now Mlrx is bigger. It then make sense to be able to have several devices for one control map. And I think that 2 launchpads are cheaper than 1 monome 128.

8 tracks should fit most songs. But would it be possible to have some scrolling up and down using a rotary or slider to have more tracks?

Yes, mlrx is capable of a lot of weird noises. Precisely the reason I decided to stop piling new features on top, and just releasing it in it’s current state. And of course, to get some feedback, so thanks!

Indeed, a lot of effort has gone into defining some generally useful looping options. Toggle did in fact use to work like that, I was simply not sure if this was the right choice. But what you suggest makes sense.

Hm, sounds like a little bug crept in. However, understand that from mlrx’ perspective, PHRASE and SLICE are mutually exclusive. The selected mode will affect how notes are written to the pattern, so it doesn’t make sense to be able to have both modes active at the same time. However, you should be able to slice a sample and then use that to record a phrase. Technically, you would now have a phrase consisting of sliced notes (this should work?).

It simply is a nice and easy way to take a copy of the pattern and move the playhead into a new one, so you can continue making edits.

Absolutely, this is at the very top of my own list of ideas. It would actually not need to toggle the one-shot option in the sample, but just output a single loop cycle.

This is somewhat further down the list of ideas, as mlrx is currently a “true” monophonic sequencer, in the sense that you can hold multiple buttons, and release one of them. Mlrx will then “snap back”, activate the most recently pressed button remaining - a useful musical gesture in itself, as you can then quickly alternate between multiple buttons.

I’m basically hesitant to add a polyphonic mode because it brings a lot of additional complexity to an already complex sequencer. It would have to be an additional option to complement the currently selected trigger mode (I mean, why should pressing multiple triggers in HOLD, TOGGLE or WRITE mode be any different from pressing multiple triggers in TOUCH mode?). Also, polyphonic input would have to overrule the arpeggiator (such a limitation would need to be obvious somehow).

Indeed, switching between viewing the current track as “running lights / position within sample” to a more traditional “notes” view (switching could then be done e.g. by holding the track select button). Currently you have to use transpose to target a new sample/slice/phrase, so it would be a very useful addition, also for operating the thing without a MIDI keyboard.

I reckon that in this “notes” mode, the transpose buttons would change their behavior to not transpose the internal mlrx pitch up & down (like they normally do), but instead give you the ability to “scroll” up and down the virtual keyboard.

Yes, the position detection can be a bit glitchy at times. Fortunately, it is only a display issue and if we can reliably reproduce it we can also fix it :slight_smile:

Obviously, mlrx needs to produce output at least one line into the future, or the note won’t be triggered (currently the sequencer is using the line-quantize setting in Renoise, this might change to a per-track option in the future). So, while the whole output stage is quite complex, the response time for pressing a trigger is just one line - but you can achieve a result which is perceived as faster, simply by increasing the song tempo. Some personal experimentation is required here - I personally like to run at 8LPB, no matter the BPM.

Yes, Duplex won’t have a problem running two Launchpads side by side, it’s rather that an application is limited to a specific device. But in this case, mlrx could simply be made to support multiple instances and share it’s configuration data.

Maybe, eventually. Right now, I’d rather look into the idea of having “presets” that you could store and recall from the controller - the information stored in ‘song settings’ is more than flexible enough to swap entire sets of instruments, or have different loop settings etc. I just need to add a way to do this in realtime, instead of when the application boots.