Duplex 0.92

I think this is an upgrade problem on windows (overwrite existing older duplex XRNX bundles). We’ve renamed the Nano Kontrol files and folder from “nanoKontrol” to nanoKONTROL. The Duplex controller file autoloading mechanism is case sensitive, but upgrading an old XRNX duplex bundle will keep the old “nanoKontrol” folder intact on windows: people have old “nanoKontrol” folders with “nanoKONTROL” files in it.

Could fix this by making the the autoload controller thing in duplex case insensitive, or in Renoise by completely trashing the old bundle (except the preferences.xml) before installing the new version.

Interesting, that would probably explain this as well:

I’m on OSX, but maybe the problem is the same? I have trouble working out the logic there, as OSX folders are overwritten wholesale when they are overwritten. Maybe Renoise is updating the Library files recursively, rather than with 1 swipe, but if that were the case then I’m not sure my problem would exist. Let me take a look at my file structure.

I am not seeing the file it’s saying to add to my “KorgKontrol49 librarian”? Sorry if i’m missing something but please explain… Thanks!!


You’ve understood based on the rambling monologues I posted at the time, but also sort of misunderstood…and that’s my fault :) I didn’t get as far as the preset librarian concept - I just tweaked the extant code to allow sysex messages to be sent and received as an alternative to CC. It was just for hardware which uses sysex for control or RPN/NRPN, not for full sysex dumps. You’re right that Duplex isn’t the best interface for a preset librarian, and while it’s intended for 2-way communication with hardware controllers, I think it’s also potentially useful for synths with 2-way control features simply as a better alternative to the MIDI-CC device. Better why? Partly because it allows for a nice visual representation of the synth’s hardware surface but mostly because it can work with sysex! Renoise is shot so full of holes with regard to MIDI that I can’t pin any hopes on issues like the MIDI-CC device, the bizarre only-2-MIDI-input-devices-allowed thing and a variety of others being solved at a fundamental level (not like they haven’t been discussed for years, but nothing has happened). The only hope, then, lies with Tools.

Next obvious question is: “well why not make a dedicated tool for this?”. I think the narrowly-defined need for quick’n’easy, user-contributed synth controller presets is so close to Duplex’s mandate that it makes sense to bundle them in together. After all, you can use most modern hardware synths just as MIDI controllers.

On the other hand, it might not be sensible to shoehorn this into Duplex, which has a fairly well-defined sense of purpose that shouldn’t be blurred. But, basically, all I wanted was to have sysex as well as midi-cc so that lone hackers and meddlers could play around with their hardware without having to delve too deeply into Duplex’s core code :)


I picked up a launchpad the other week, and I’m now trying to come up to speed on what I can do inside Renoise with it :) So I get the standard matrix launching, track on/off, transport and mixer…which is cool, but (and sorry if this has come up) can you do things like trigger samples, play ranges of notes from a VSTI, using the launchpad and this tool? Or for that kind of total custom setup, better doing a general midi-map to the launchpad hardware?

(EDIT, found this thread - Duplex Novation Launchpad)


Couple questions:

Can I assign every 2nd knob from group to trigger 4 row matrix? Something like this:

or one by one from any group + would like to do same for “sequence” and “track”, specify up,down,left,right seperately.

Then is there a way to add “block loop range” and “bpm” control to knob?

…after 10 hours of coding I finally start to get hang on this and almost finished my first template :D

edit: is there a support for MCU V-Pots, I noticed when I assign knob to V-Pot ID 1 and turn it clockwise, track03 volume jumps randomly between 1-3 and counterclockwise 65-68, changing ID to 2 makes same for track04, 3 for 05 and so on? Just looking for better resolution for volume control.

editedit: Is it possible to use effect “Device” changing with 2 buttons like “Page” works? Or use single #CC value with 2 buttons to increase/decrease

editmore: Should “start_playback” work with toggle button so that when you press it second time (and light dissapears) sequencer stop? For me it just restart pattern everytime.

and little idea: Upcoming matrix trigger could blink same like goto_prev/next buttons do :)

10h coding session, sounds nice

Not as such. Each mapping is a single, or “greedy” mapping (greedy mappings will use every available control in it’s group). So, if we are talking triggers in the Matrix application, the “trigger” mapping is a greedy one. Any particular reason you want triggers on every second position?

Again, it depends on what application and hardware we are talking about. The Matrix application, for instance, has all four directions covered. The mappings are called “sequence” and “track”, and together they control the position within the matrix using four buttons (up/down/left/right). Similarly, the Mixer application has a mapping called “page”, which control sideways navigation using two buttons. Look in the application code, and you’ll see that this is achieved using a UISpinner, one of the UI components that you can use to create paged navigation in your controller application.

The Transport application is probably where you want to add some code.

I had to google that one. It’s a multifunction control that Mackie has invented ? I’m really not sure how it works, but I guess you have done some digging already :slight_smile:
Basically, if we can receive a signal from it, we should be able to support it, unless it’s a very weird format.

I’ve added it to the Effect todo llst :slight_smile:

Sending out a single CC, and expecting the hardware to update multiple LEDs is not supported by Duplex (it doesn’t work with all controllers).

I’ve described how to modify application mappings here. Options basically work the same way as mappings, and for the Matrix you can use options to control if the sequence restarts, toggles on and off, is scheduled, and much more.

Maschine has 2 buttons at side of every row of pads so I could use upper to trigger row and second to schedule it, if possible. At least I could make proper template with all buttons which someone could modify to their needs.

umm… I’ll just wait until someone uses it in template so I understand how it works (=copy & change essential).

Same here.

I have understood it is format which daws like Logic, Cubase, etc. support. Two way communication which can also send track names, plugin parameters, etc. something like automap and others so controller shows it on screen. Not sure is that V-Pot so sophisticated, but it was only one (maybe?) sending hi-resolution data… :D

Nice, soon I can scroll thru more than 2 first effect.

Again, way over my coding skills, which are close to none.

Ok, here’s what I have got so far:
1254 maschinorr.jpg
crappy camera, even worse photoshopping but it works already quite well in use.

My “TODO” list, when I know how or even possible:

  • Add all buttons + in right places, they were there but couldn’t make matrix navigation and triggers to work then.
  • Fix device select
  • “Play” button start&stop
  • “Restart” -> New pattern loop button
  • “Tempo” -> BPM
  • “Swing” -> Groove settings
  • “Auto write” -> Automation record
  • “Snap” -> Save song
  • “Grid” changes pad behaviour how it works right now
  • “Step” -> pads -> Step sequencer
  • “Control” -> pads -> midi notes
  • Schedule row with buttons under triggers
  • Track navigation
  • New page with block loop range and some other extra

I dont think those are gonna happen any time soon though :)

Heres also duplex and maschine templates for those who want to try out or make improvements.

I made test template with MCU V-Pots and buttons to try with Logic and I think they are just normal midi #CC and note messages which are converted by software, for example environment monitor shows MCU Buttons “<Channel” & “Channel>” as note “C-2” and “C#2”, then I made two buttons to send those notes and they worked just the same. I haven’t used Maschine MCU mode with Logic much as I have Remote Zero SL for that, but soon as I added Mackie Control as surface with corresponding midi port, it outputted every custom track name from Logic on Maschine screen and exact values of volume, pan, eq freq, slope, plugin parameters… just about anything I could think and try.

There are other (non-mackie) controllers too with MCU support like Novation Remotes, Euphonix MC, M-Audio ProjectMix, Behringer BCF, some iPad & iPhone apps… and theres also LC Xmu which can emulate MCU on any midi controller with onsceen display of parameters.

Something I found that might be useful: http://controsc.sourceforge.net/
Open source software that uses MCU to control OSC (which is already supported?), high resolution control and text on screens.

I’ll try to learn understand LUA and coding in general.

edit: http://web.archive.org/web/20080126093602/http://members.aol.com/mhigrules/MCMap.htm
“Own a Mackie Control? Do you want to know what it’s saying to your computer?”

and found Logic Control pdf: http://stash.reaper.fm/2063/LogicControl_EN.pdf

especially this part is what I’d like to try out first:

, 12, oo, yy, …, F7 => Update LCD
oo => Display offset to write from: 00 thru 37 for upper line, 38 thru 6F for lower line.
yy => Data: ASCII equivalents for display characters written from left to right, including line wrapping between upper and lower line. Up to 112 data bytes may be sent in one message.

The following message writes “Hello” to top left of the LCD on a Logic Control master section
F0 00 00 66 10 12 00 48 65 6C 6C 6F F7

Does someone how to send that to midi channel, or is it possible?

Uuuuhhh! It’s ze Maschine you’re working on

That makes sense, since the buttons are aligned right next to the “4x4” matrix. But the problem isn’t because of how Duplex is designed, it’s more a question of looking at the Matrix application, and possibly change a few things.

It’s quite easy to explain. You want the up/down/left/right to be laid out as on a keyboard, but the UISpinner is an “increase/decrease” control made from two buttons. So, the layout you proposed is not possible, as the buttons are laid out next to each other, but these ones are:

[▲][◄][►] <- up/down is vertical

  • or -


I think the last one is the best, as you have the remaining E/F/G/H buttons all nicely organized in a single row?

As for setting BPM via controls, the Transport already has a few sketchy details, but I didn’t implement anything as I don’t really have much use for it. There’s the whole limitation of the 7-bit MIDI control, which means that you have to decide which range you are working in, like 72-200bpm. But a dedicated Tempo application could be interesting, where you can use a couple of controls to more easily match the beat of something, tap the tempo etc.

Some of the links you send me are people who are reverse-engineering devices, and making MIDI implementation charts themselves. And the actual communication protocol is proprietary, which makes me wonder if it’s worth the effort as long as the controllers we support have standard ways of communication. The Machine is fully MIDI-enabled, right?

Changing options are not supposed to be programming, it’s configuration. It’s this simple: open your device configuration (Machine.lua), and make sure the following comes right after Matrix.mappings

options = {
switch_mode = 4,
play_mode = 4,

This is all it takes to change the playback retrigger and switch to SCHEDULED mode…

Sure its has all basic midi functions (-sysex) but what makes MCU far more interesting is ablity to send text on controller screen from software, instead of “Track 1, 2, 3…” and volume, freq… values 0-127 you could see real name of the track, -3db and 440hz on screen. Also since knobs are sending only direction of movement, you can dial parameters accurately (like volume exactly to 0db, which really isnt that necessary but one of many things that trouble me in life far more than should). Sadly there is no way to use screen from software without MCU V-Pots.

But all this MCU implention was just a thought, not even sure would I have any use for it in the end. :)

edit. Had to play around still a bit, managed to make fader in Logic environment which sends one letter on screen and scrolls thru all letters with the fader… :D so if its possible to get track name from renoise to duplex and convert it to sysex, it should work. At least one V-Pot has to be assigned under screen so controller receives sysex text.

I think the issue of MCU protocol support is worthy of a separate thread.

One thing is the protocol itself, it seems to involve either 1) official support from the guys who invented it, or 2) trial-and-error by members of this community. Another thing is the “representation” of this information - check out the “Better Mixer” app for an excellent example of how it could be done.

As for Maschine support: maybe the best thing would be to turn the tables around, and make a dedicated Maschine application?
What I mean is, to take the parts from existing applications that seems to work fine (the step sequencer by Daxton could be adapted to work a bit like the native Maschine sequencer), and then add some special touches that fit with a Maschine workflow. I mean, it’s an awesome instrument?

Awesome aksn! Can’t wait to try this out! Your Renoise Maschine template is already so useful.

Ok, so I downloaded and unzipped Maschine_duplex_v0.2. What do I do with the Maschine folder with the following files?:

In Scripts/Libraries folder?

It keeps getting better, now at version 0.93. Original download link has been updated.

Done 0.93  
* UIButtonStrip, for controlling/displaying a sequence  
o Can control position and range simultaneously (Matrix sequence triggers)  
o Optimized for monochrome devices  
* UISpinner improvements (better togglebutton support)  
o TouchOSC and other controllers using togglebutton input should now   
display the UISpinner correctly at all times...  
* Browser:   
o Switch between device presets/configurations using function keys  
o Forward keypresses to Renoise (except those we use for switching)  
* Application:   
o Application.options[].on_activate(): specify a method to be executed   
immediately before the application is started - for example, to provide a  
UIComponent with values *after* it has been constructed  
* Matrix:  
o Updated to support interactive pattern looping (via UIButtonStrip)  
o Utilize "blinking" feature to display a scheduled pattern  
o "follow_player" mode in Renoise will now update the matrix immediately  
* StepSequencer:  
o Display playposition and volume simultaneously (via UIButtonStrip)  
o Better support for other/monochrome devices (Monome)  

Just create a folder called Maschine inside /Duplex/Controllers and put them there…

Is there a reason this isn’t going on the Tool page?

Mostly that the TouchOSC support was kind of flakey. It’s better now, thanks to better handling of togglebutton input.
But if no big issues are reported in the next few days, it’s definitely going up.

Is it possible to have the pattern triggers set the selected pattern as the next after the current has played, instead of going there instantly?

Go into your device configuration (you didn’t say which one, but it’s the .lua file located in the Duplex/Controllers/YourController folder).
Then, locate the section that define the Matrix mappings and options (search for “Matrix”, “options” or “switch mode”).
Then, change the following:

– switch_mode = 4


switch_mode = 4

(yes, it’s your lucky day - the option was already there, just commented out).

Next, reboot Duplex and enjoy scheduling patterns with fabulous new blinking buttons :slight_smile: For l33t skillz : you have four different options just for switching the active pattern, and many other options which are all explained in detail in the Matrix application class itself (Duplex/Applications/Matrix.lua). Just look for “switch_mode” and you’ll see how it’s possible to customize the Matrix).