Duplex Beta Versions

Not least because you now joined the documentation efforts. I just discovered your “getting started” topic on writing a control-map.
Great stuff, this was something that was sorely lacking. Most of the info is probably a bit technical, so it’s nice to see a more friendly version :slight_smile:

About the TrackSelector app: having direct access to specific tracks and a next/previous style control should cover everything?

For me it is those 2 and half functions to cover everything:

1 previous / next
(1.5 previous / next with offset ?)

2 direct track selection

What do you think ?

Yeah I think so too.

Also please add the “Track Increment” option, like Matrix and Mixer apps.
Because Mixer, Matrix, and TrackSelector apps in the APC series should be set to do the same (page changing) behavior.

Sorry if this already was discussed — I use Launchpad and when I close Renoise, the pads stay shining. I have to disconnect Launchpad to turn them off. Is there a way to solve it?
Apart from this I can’t describe how much I love this magic combination — Renoise + Duplex + Launchpad. Pure win! :yeah:

Hey I’m running the akward stage Akai MPD 26. Can anything be done with duplex? I’m not familiar with the tool to begin with and I tried just running it as MPD 32 but it doesn’t (seam) to recognise it.

Also, from what I could tell Duplex can’t mass trigger different patterns in the matrix. If that’s the way it is I’m not sure this is of any use to me… but I wanted to try getting some more capabilities out of my mapping so I thought I’d try and figure this out. I was really hoping I’d be able to trigger a horizontaly progressing triggering of pattern matrix blocks (say, a beat) while also being able to control the patterns horizontally.

No idea if this is even possible but I thought I’d ask. I know I could achieve a similar effect by running two instances of Renoise but I’ve noticed some glitchy stuff happening there when I do that. This is how I make my tracks rather than by tracking it out so I can’t really stand to tolerate that.

Cheers for any help or comments guys.



Though I’m not sure what kind of layout you want exactly, I think it’s impossible to move matrix horizontally at this point.

But making the mapping for MPD26 itself is not so difficult. :)
I made the test map for MPD26 by editing the driver’s MPD24 files.
But since I don’t have MPD26 actually, please try to test it yourself.
Although I referred to MPD26 editor, assignment of some parameters may be wrong.

Download and unzip this file, and put the “MPD26” folder to;
C:\Documents and Settings\YourName\Application Data\Renoise\V2.6.1\Scripts\Tools\com.renoise.Duplex.xrnx\Duplex\Controllers

Also please refer this post too :[How To Start Editing Duplex Files]

I bought MPD26 and made config file for it.
Please see this post

Hey, danoise.
Let me say one more request please… :rolleyes:

If you make such the TrackSelector app in the future update, could you add simple Seq-Trigger function with it?

The reason why is:
I made MPD26 mapping, but still there are utilizable 2 PAD BANKs left. So I want to assign 16 seq-trigger to one of the PAD BANK.
I know that there is the “trigger” function in the Matrix app, but I cannot assign it to 16 Pads since I already assigned the “matrix” function to 1x4 Pads in the first BANK. (current “trigger” function is hard-coded with the matrix line number, isn’t it??)

1691 seq.png

Hi Satobox! Funny that, I was just looking at Duplex and this TrackSelector thing today.

Yeah, the Matrix doesn’t “wrap” it’s pattern triggers, like you show with the illustration. So you’ve only got access to four patterns. However, the matrix already have a pretty functional pattern-trigger, which is made especially for buttons (UIButtonStrip), so it’s just a question of making that control able to wrap 4x4 into 16 consecutive buttons. Actually, the approach could also be translated to matrix lines (wrap the mute/unmute buttons the same way as the triggers).

For simplicity’s sake it would probably be a good idea to extract the whole pattern-trigger part from the Matrix and make it a separate application, PatternSequence. I’m all for creating tiny, useful application that perform a specific task - and currently the Matrix is doing two things, which are only somewhat related (muting/unmuting slots and triggering patterns).

Though I don’t understand a technical thing well, the independent application “PatternSequence” is more better idea indeed. It’s intelligible. B)

(Btw, If it’s troublesome to implement, I’m OK even if it cannot “wrap” since simply I can make temporal 1x16 group on the Duplex GUI. The Duplex GUI may not necessarily be the same as the hardware interface. I am satisfied if actual operation is possible. :) )

Et voilà, the TrackSelector has been born!

It integrates with the other Duplex apps (Matrix, Mixer and StepSequencer) and offer direct control of the following:

  • Select the next/previous track (via buttons)
  • Select the next/previous track-page (via buttons)
  • Select/set a specific track (via buttons or dial/fader)
  • Select (first) normal track (via button)
  • Select master track (via button)
  • Select (first) send track (via button)

Note: if you’re using a dial or fader to select tracks, the next/previous controls are not really useful and can be left out. Only the mapping to select/set a specific track is required.

The TrackSelector has one option, “track_increment”. This will determine the “page size” when flipping through tracks (again, only really relevant if you’re selecting tracks by using buttons). The default is to automatically detect the number of buttons - so if you want to run multiple apps and have their tracks nicely aligned, “track_increment” should be set to the same value as the other applications.

Installation procedure - until a proper release arrives…

  1. Copy TrackSelector.lua to the Duplex/Applications folder
  2. Edit the desired device configuration

For details on how to edit configurations etc., check out the Duplex manual on the tools site.
For starters, here’s an example device configuration for the Launchpad (Duplex 0.96 is required):

-- setup "TrackSelector + Mixer"   
duplex_configurations:insert {  
 -- configuration properties  
 name = "TrackSelector",  
 pinned = true,  
 -- device properties  
 device = {  
 class_name = "Launchpad",  
 display_name = "Launchpad",  
 device_port_in = "Launchpad",  
 device_port_out = "Launchpad",  
 control_map = "Controllers/Launchpad/Launchpad-Recorder.xml",  
 thumbnail = "Launchpad.bmp",  
 applications = {  
 TrackSelector = {  
 mappings = {  
 prev_next_track = {  
 group_name = "Controls",  
 index = 1,  
 prev_next_page = {  
 group_name = "Controls",  
 index = 3,  
 select_first = {  
 group_name = "Controls",  
 index = 5,  
 select_master = {  
 group_name = "Controls",  
 index = 6,  
 select_sends = {  
 group_name = "Controls",  
 index = 7,  
 select_track = {  
 group_name = "Row2",  
 index = 1,  
 options = {   
 track_increment = 1,  
 Mixer = {  
 mappings = {  
 levels = {  
 group_name = "Grid",  
 options = {  
 follow_track = 1,  
 track_increment = 1,  

Ah OK, you would be fooling Duplex into thinking that the buttons are actually next to each other. Yeah, that would definitely work

Thanks very much for making the TrackSelector app!!
Unexpectedly, it has some additional useful controls (especially I like “select_sends” :) ), so I’m re-considering about a new layout.

But I experienced some errors, especially, when I tried to use a fader as track-selector. It seems something wrong.
This is a simple example. Could you see what’s wrong??

1696 R-control-xx.zip

Also please try this APC40 mapping too.

If all the “Track increment” options of Matrix, Mixer and TrackSelector are “Automatic”,
TrackSelector works wonderfully really.

But when all the “Track increment” options of Matrix, Mixer and TrackSelector are “2”,
please try to use TrackSelector and page-Left/Right buttons several times.
TrackSelector will begin to jump to wrong track (the gap between TrackSelector and Matrix/Mixer arises. TrackSelector seems to be confused).

1698 APC40xx.zip

1697 apc40.png

Thanks a lot - this should be fixed now. I somehow expected the “track page” to be present when using a dial, this is what caused it.

As for the other issue, I think I understand. You seem to have problems with how the jump by page controls work, but the result isn’t strictly speaking a wrong result, it merely is a confusing one?

Here’s an example: each time you jump to a location which is out of bounds, say jumping from track 8 to track 12 in a 10-track song, the resulting position is adjusted to the closest possible (which in this case would be 10). Jumping back (still with a track increment of 4), we would end up in track 6.

The only way I see this solved cleanly is not to update the selected track when jumping through pages?
[Edit] Thinking more about it, the current way is probably the most intuitive. Problem is, when you are jumping through pages without updating the active track, the other apps will not align themselves automatically. So you end up with a TrackSelector which show a different set of tracks - that is, until you select a track. This would probably be even more confusing! But I could make an extra check, so that a scenario like the one above (jumping back from track 10) would go to track 8 instead of track 6, keeping the pages more consistent. If only the topmost tracks are affected, this would seem like a good compromise.

I’ve attached a version of TrackSelector with this new behaviour. Check out if it’s an improvement?

Thanks very much. Now I can use fader as Track-Selector. Very impressive!!

About the APC issue, now I can understand the cause itself, but still I feel it’s something strange behaviour honestly.
But there is no better method, isn’t there?? If so, I think it’s compromise-able too.
(What a puzzled problem it is!! :wacko: )

No, not unless Duplex was able to make applications exchange information. And this really could become a can of worms…currently, the core Duplex apps are communicating “through” Renoise, which is much more clean and easy to understand. But this is also the reason that we can’t select a page in the TrackSelector and have e.g. the Mixer update itself, because Renoise has no such concept as “track pages” which the Mixer could receive notifications from. So we basically need to set the active track first, in order to have the Mixer align itself properly.

I see. I can understand and thanks for your effort. :)

Btw, just an idea though;

I really like the fader-assign in TrackSelector. It’s very intuitive that the cursor moves right/left according to the movement of the fader.
So maybe, if you consider to make PatternSequence app in the future, I think that adding such fader(or knob) assign in PatternSequence as well is cool. Imagine that the pattern cursor moves up/down according to the movement of the fader.

If such fader assign and the mute button for Matrix slot are there, we can cover whole Matrix by tweaking only 2 faders and 1 button. B)

Hey danoise,

Today I try to make new mappings for the APC20, and I have 1 question.
APC20 has just only 1 knob called “CUE LEVEL”, but this knob sends a bit strange midi signals.
If I trun the knob to the left, it sends many “7F”, and if I turn it to the right, it sends many “1”.[if the speed which turns the knob is quick, other values will be sent.]
Can’t Duplex support such a strange knob?? (I want to assign TrackSelector there, if possible)

1709 apc20-knob.png

Ah, so it happens to be an endless rotary dial without any visual feedback (LED lights)? Then it’s a basic relative control, different from the absolute controls that we’ve dealt with so far.
There are different implementations of relative controls (various between manufacturer, or even individual models) , so we’ll definitely have to support more than just this one.

PS: Now where was that APC tech-guide that you linked to a while back? It contained a lot of valuable information, like the sysex codes and the expected output from controls like this one.

Yes, it is.

This one?? :huh:

Btw, now I confirmed that the knob works as “Relavive two’s comp” in the Renoise’s MIDI mapping option.

Thanks, that was useful. Looking at the Renoise docs, these are the relative modes that are supported natively:

  • Relative signed bit: Increase at [065 - 127], decrease at [001 - 063].
  • Relative signed bit 2: Increase at [001 - 063], decrease at [065 - 127].
  • Relative bin offset: Increase at [065 - 127], decrease at [063 - 000].
  • Relative two’s comp: Increase at [001 - 64], decrease at [127 - 065].

[font=verdana, sans-serif]
The APC docs specify the cue control in the following way:

Relative two’s comp it is then! But I’m not sure if the minor discrepancy between the two definitions (63 vs. 64) is simply a typo in one of the specifications?