Duplex Beta Versions


Discussion of Duplex, the OSC/MIDI controller framework for Renoise.

Current stable release (v1.05) - June 1st 2017 - release notes

The current stable version can be downloaded ontools.renoise.com

Current alpha/beta (v1.06) - October 16th 2017


Source code and Documentation

Issue tracker (known bugs)


Manual for the 0.98 release , outdated - please use the newer docs
2786 Duplex_manual_0.98.pdf
2849 Duplex_manual_0.98_japanese.pdf

1 Like

Yay, looking forward to trying this out later :) Thanks danoise

This was a problem before too, but when I use the toggle buttons like mute on my Samsung Galaxy Tab (TouchOSC), it usually doesn’t toggle. It kind of seems like it’s switching states very fast, but usually it goes back to it’s initial state. So if I try to toggle mute on for a track, it seems to mute and then revert to mute off very quickly. I don’t think it’s because I’m holding it for too long, because I’ve tried being very rapid, and even then it should toggle continuously between the two states, right?

Sound like TouchOSC isn’t receiving messages from Renoise at all…have you checked that the local IP address inTouchOSC is the same as in Duplex (Tools menu > Duplex Browser > TouchOSC > Settings)?

Very nice update, thank you! :)

I have a general question regarding Duplex and own tools. Is it possible to connect Duplex in some way with the gui of own lua tools? So if there is something changing in the display in the gui of the tool, it would be nice to send it to the midi controller (say launchpad) and have the changned view in the midi-controller as well. In my case I am talking about the StepSequencer I created (see forum post), which can already be controlled via Midi hardware with MidiMapping. A nice feature would be the following: If the Editstep or Page is changed (which changes the view of the highlighted steps in the sequencer), the change should be reported to the connected midi-controller and display the new view. It would be nice if you can give me a hint, if and maybe how this could be done with the help of Duplex?

I don’t think that it’s possible to make tools communicate with each other like that. If you do a rprint(_G), runnings tools are not listed in the global namespace, so I don’t know how it could/should be done.

Btw: check out how the Duplex sequencer is now listening for changes to the pattern itself. You can delete notes in the pattern editor, and the controller will remove those notes from it’s display as well, keeping things in sync at all times. This is achieved by using the powerful line notifiers. Perhaps an idea for the Lauflicht sequencer?:slight_smile:


[s]Doesn’t The Recorder app support the recording in the irregular number of lines??
I’ve tried to record in 60-63 pattern-line, but it cannot record a sample here.

The reason why I used such irregular number is because I tried a strange workaround for triggering sample immediately.

  • make 2 pattern for Looper: Pattern 1 is 63 line, Pattern 2 is only 1 line.
    I thought that maybe in this way we can trigger recorded sample immediately after actual recording (though the last 1 line will be missing :rolleyes: ).

But actually, I cannot done the recording itself in such line numbers.[/s]

[EDIT] Now this bug is fixed, and after all, this workaround works only in some limited situations (depend on BPM or LPB). It cannot be recommended at all. :rolleyes: [EDIT]

Hmmm…not sure what is causing a problem there, but I’m also not sure if it’s really a good workaround…Those are some very special conditions to meet, before using the recorder, don’t you think? Ideally, one should be able to load a(ny) song and add some recordings to it.

Nevertheless, it should be able to record irregular number of lines. I’m wondering if it’s not the very short pattern (1 line) that’s causing the problem… Did the application print any kind of error message in the console?

Renoise console says:
Message from Recorder: could not locate recorded sample!

And I tested in detail. These are the line numbers which can record correctly. (if my test isn’t wrong)
64, 59, 58, 57, 56, 51, 50, 49, 48, 43, 42, 41, 40, 35, 34, 33, 32, 27, 26, 25, 24, 19, 18, 17, 16, 11, 10, 09, 08, 03,

They seems to be located in every four numbers. Can you imagine what’s going wrong?? :blink:

Wow, satobox you’re the best. Very detailed report there!!

I’ll take a good look at this when I get home tonight.

Oki, the irregular line-number thing was quite easy to fix, it was simply that the recorder was too anxious to finish the recording (some line numbers apparently made it finish earlier than others?). Fixed that bug, and also included a number of additional features for the Mixer (download link has been updated).

The Mixer now has two new options, follow_track and track_offset. The first one, follow_track, is easy to explain: it will simply allow you to let the mixer align with the selected track in Renoise. I have put it to use in the Launchpad Recorder configuration, where you get an additional mixer strip (a single channel mixer), which will allow you to set the volume of the active track. Having a single volume slider that follow the active track is probably also useful in other configurations, but here it just seemed obvious.

The second option, track_offset, is made especially for the Ohm64. The track_offset will allow two Mixer instances to act and feel like a single mixer, even though they are in fact separate applications.

Update: from 0.95c, the Recorder is now using the 09xx command to launch new recordings. It seems to work reasonably well (better than expected). The additional option is called “autostart”, and replaces the “writeahead” option (which is now gone).


Yeah, well done trick. B)
Under the present circumstances, probably, this workaround will be the most effective.

But I’m still aware that:

  • the time lag of 1 line or more (only in the very first playback though) are a bit big, I think.
  • depending on a situation (BPM or LPB), sometimes it fails, so we have to adjust the option value manually.
  • such command trick and adjusting the option may be hard to understand for newbies (why & how), even for Renoise users maybe.

So I hope that Renoise core dev team can improve about Autoseek or the time lag itself after recording, in the future update. Since Renoise’s live-sequence + the Recorder’s potential is very attractive. :guitar:

I agree, for the same reason I did not remove the “writeahead” code completely, because it might become useful again.

So, I’d like to know how I can use ANY controller with Recorder, because I just don’t see how yet. There’s no configuration for the BCF, or many other controllers yet. Am I missing something?

Well, you have ANY controller or a specific one? I’m guessing the BCF, so I can provide you a starting point:
Try adding this to Duplex/Controllers/BCF-2000/BCF-2000.lua

duplex_configurations:insert {  
 -- configuration properties  
 name = "Recorder",  
 pinned = true,  
 -- device properties  
 device = {  
 class_name = "BCF2000",   
 display_name = "BCF-2000",  
 device_port_in = "BCF2000",  
 device_port_out = "BCF2000",  
 control_map = "Controllers/BCF-2000/BCF-2000.xml",  
 thumbnail = "BCF-2000.bmp",  
 applications = {  
 Recorder = {  
 mappings = {  
 recorders = {  
 group_name = "Buttons1",  
 sliders = {  
 group_name = "Encoders",  
 options = {  
 -- loop_mode = 2,  
 -- auto_seek = 2,  
 -- beat_sync = 1,  
 -- trigger_mode = 1,  
 -- autostart = 4,  

The options are commented out, because those are the application defaults. Uncomment them to experiment

I would probably add the Mixer as well, they work really well together.

Thank you. I have read in the code of duplex and learned that every external midi-controller has its own fixed Midi-CC to control it (e.g. their LEDs). That brought me a step further, also your hint to use the line notifiers. I hope I know now how to come a solution to synchronize my step-sequencer with a midi-controller and will try it soon.

Sorry for the late reply. They have the same IP and the in/out ports are the same. The faders work fine both ways. Pressing the mute buttons gets through to Renoise/Duplex, but it acts as an impulse/push switch instead of a toggle switch. Pressing the mute buttons in Duplex actually reflects fine in TouchOSC on the device (a Samsung Galaxy P1000). So the problem only appears when going from TouchOSC to Duplex. I guess the most obvious thing would be that something is double firing.

It’s working perfectly here on my iPhone, perhaps something went wrong when you installed the tool?

Did you use the latest version of Renoise? Latest release of Duplex? You’re using the ‘simple’ template that comes with Duplex?
Can you perhaps try re-installing Duplex (drag-drop the xrnx on Renoise) and see if that helps?

FYI: While this release has been up for a couple of weeks, I’ve been busy helping a Renoise user bringing the Ohm64 up to date. It had some issues, which we have now ironed out.
So expect this release to be replaced by 0.96, after which the whole thing will also be updated on SVN etc.

0.96 will also introduce an important new feature: realtime control of application options via the Duplex browser.