New tool (3.0): Mlrx

This error was triggered by loading a song with fewer instruments than you have tracks in mlrx, right?

Because exactly on line 895, I am guilty of assuming some things … like that there are as many instruments as there are tracks. Bad practice, I know :slight_smile:
Will be fixed in the next release.

For now, simply make sure that you have enough instruments in the songs you load…and note that empty instruments count as instruments too (a new song has 10 of those)

I had the same error
then filled the track up with more samples than tracks
then I got this:

std::logic_error: 'invalid note_column index '1'. no note_column's are available. 0 may be allowed.'  
stack traceback:  
 [C]: in function 'note_column'  
 .\Duplex/Applications/Mlrx.lua:2067: in function 'track_output'  
 .\Duplex/Applications/Mlrx.lua:1714: in function 'group_output'  
 .\Duplex/Applications/Mlrx.lua:249: in function 'on_idle'  
 .\Duplex/Applications/Mlrx.lua:2039: in function 'on_idle'  
 .\Duplex/Applications/Mlrx.lua:183: in function 'on_idle'  
 main.lua:344: in function <342><br>

Basically, it's got something to do with not being able to set up before one starts using it. It might have something to do! with my usual startup song having 0 fx columns shown at start? (except on master &amp; sends) (PS they don't get auto added)<br>
Got it to work right after that error. Also in my case, assigning groups is not possible (or doesn't have visual feedback on the duplex window). The assigning does look exactly like I would have planned it though, this is something other mlrs miss, nice one! There must be a fix imaginable for the 'paging' to show the assignment.<br>
I would've imagined the running lights (which I don't see on my launchpad yet) to actually fall down, matrix style.<br>
Really cool work!!</342>

This tool looks amazing, it’s got me wondering if there is a way to use this (or other duplex tools) if you don’t have an external controller? Like could the computer keyboard be used? If not then maybe Touch OSC on an ipad is the way to go, I really wanna play with this tool

True to renoise, although mlr usually is horizontal, hehe. I had imagined that both should be possible, and specified simply as ‘orientation=vertical’ in the device mapping. In due time (isn’t really the highest of priorities right now).

Both are definitely possible, using touchosc as a controller for mlrx is already fully supported under the hood - just need a proper controlmap and mappings file to link it with the application - and some sort of keyboard support is also possible. It just begs the question how you would expect it to work - for instance, afaik the renoise API can’t really return key-release events, so we would need to implement separate trigger note ‘press’ and ‘release’ mappings. Or some clever workaround, perhaps.
I’m glad to hear about the enthusiastic comments. I’m pretty sure that mlrx will evolve into something really useful :slight_smile:

hey, I’m back from a little vacation, and trying to plan the next release.

I have a few question for you Cas (sorry it took so long)

I’m pretty sure the error you got was due to the song (template?) having group tracks in it, as group tracks doesn’t have any note columns - this first release of mlrx is brutally simple in this regard, it simply takes over the first few tracks of your song.

reading this a second time, maybe I overlooked your point - did you imagine that mlrx would in fact look at the existing song, and somehow attach itself to any existing groups?
(that would be a risky strategy, I think - you wouldn’t want it overwriting anything precious - but then, I would like to know what you mean by “something other mlrs miss”)

I’m definitely lost here, as to what paging/assignment you refer to

the next release will rectify some of the nasty habits of this first release - focusing on the overall solidity of the application, making it less prone to breaking when swapping, deleting and inserting tracks or instruments

secondly, I imagine that mlrx would have a startup procedure which will attempt to load a previously saved session, or create a default one. once initialized, the song will then contain a special group containing all the child tracks, which can be moved around as you please - and, as everything mlrx does is entered as notes and/or effect commands, the child track’s DSP chains are then completely “up for grabs” - adding FX and controlling them via automation envelopes is as easy as it would be in any other track

other than this, of course a few more supported controllers wouldn’t hurt …

A new version is up - you can grab the application lua file directly from google code

To install, simply download the lua file and navigate to the Duplex/Applications folder.
Then overwrite the old file with this new version and restart Renoise (or reload the tools)

(Update) You can now grab the official Duplex beta, if you want to download the whole release
Download is located here

What’s new:

  • performance: should be more responsive (critical parts of code have been optimized) - feature: re-assign track via select track + group toggle combination - feature: better handling of inserted/swapped/deleted tracks - feature: automatic creation, or take-over of "mlrx master group” - feature: retrieval/storage of per-song settings (stored in song comments) - new option: determine if tracks should be collapsed or expanded by default - ui related: added instr. number as part of track decoration - ui related: paint the track selector with the group color

Obviously, the most important thing in this update is the improved performance. The last release was perhaps a bit rushed, as I was going on a holiday and wanted it to get “out there” so I could get some early feedback. This release should feel more solid overall, and be much less likely to skip notes, due to improvements in the critical part of the code.
Also worth noting is the ability to assign tracks to groups via the controller. Now, the group matrix is merely useful as a sort of overview, since you can easily reassign tracks to any group using the “track selector” (on the Launchpad, the right-most column of buttons). Simply press the track button, and then choose one of the group toggles!

And, thanks to the early feedback I have added several improvements to how the whole application deals with missing tracks, instruments etc. You are now able to move the entire mlrx group around inside your song, it is no longer fixed to the first few tracks (also, you now have the option to collapse all the mlrx tracks if you don’t care about looking at the notes).

Finally, I have implemented a feature which will store all relevant settings for mlrx inside the song comments. This is done transparently, so you don’t have to configure anything. Once you load the song, it should simple recall the state of the application, including each track’s triggering mode, etc.

Just had an idea while jamming with this tool. I mean, I feel I can now work this thing, even when quantized to a single line.
So, with the fundamentals in place, it would be interesting to look at how the “improvisational aspects” of the tool can be improved.

Right now, the cycle length is great when you want to introduce a stutter-like effect, but it’s something you could do just by hitting a trigger fast enough. But how about having a button which, when pressed, will toggle between forwards and backwards playback?

So if the sound is already triggered, the reverse command could be inserted at the next (quantized) line, and if a sound was (re)triggered it would start playing in backwards mode.
And this state could then even be memorized per track, and stored in the song settings.

How would you imagine something like this to work? Feedback is most welcome!

A new day, a new update

I spent most of yesterday trying to catch any bugs that might still be lurking. Found the following six:

fixed: a sound whose length is longer than a pattern is always retriggered when the note was originally placed on the first line
fixed: wiping track lines would ignore the first line in a pattern
fixed: when switching track inside a group, scheduled note-offs should be quantized too
fixed: when switching between two tracks in the same group, make sure that the (now inactive) track has the line immediately following the note-off cleared as well
fixed: note duration for notes triggered in hold mode, with the trigger being released before the actual note-on now have the correct length (before it was always 1)
fixed: track summary not always updated when instr. props got modified

There are some minor optimizations here and there too. Please check it out!

Raw lua file is up on SVN

looking forward to try out this tool (hopefully soon). great idea.

No idea what I was thinking. Haven’t used it since, actually.

Nononono. I was speaking about the mlr concept of groups. And somehow someway I found the lights on the LP(S) looking like;
etc. - So I believed for a second that this was how you bind instruments to tracks (which should indeed be the renoise translation of any mlr’s “groups”), in mlrx. Thus I ranted on. How cool it would be to have that live assignment on deck, via what I would call ‘pages’ on the Launchpad - it showing and controlling another group of data while holding a button like session/user12/mixer.

Just a quick bump for this topic:

The Duplex tool is currently defunkt in Renoise 3.0 - I left for my holiday vacation just before the release - but once I get home, Duplex will have full support for Renoise 3.0
And this application - Mlrx - will then have support for phrases as well :dribble:


Slight bump, as there has been a new version available for a few days

I have updated Duplex for Renoise 3.0, download is located here

I promised phrase support stuff for mlrx, but only managed to make it a “feature preview” (you can trigger phrases but the running lights may, or may not, display correctly).

Also, for the next version of mlrx I have a few ideas:

First, I want to get rid of the “write a note-off when stopping a recording for a looped track” - it seems excessive, as the loop mode in itself is about producing a seamlessly (constant) sound.
If you want to stop the output of a looped track, this is still possible but it will then skip the automatic note-off and instead allow you to mute the track the standard way (non-destructive)

Also, I don’t like how the mlrx group is currently created on startup. Would be nice to have an “init” button that would create / take over the special pattern-editor tracks.

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:

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…