New Tool: Go To Send Track

First post for v0.64


edit: forgot to mention these have been added aswell:

Forwards and backwards:
GTS Cycle Selected Send Devices Target ->GTSCycle Selected Send Devices Target <-

Great minds and all that!

Might be a slight aside, but what do folks think about adding a gainer at the top and bottom of a send chain with an adjustment to negate the ‘track headroom’ offset?

Basically I want to ensure I’m driving any DSP applied in Send tracks properly. If the Track Headroom function is used then Sends gain gets out of whack. ie; If I have a Track Headroom value of -12 then the DSP inside the Send track also has a -12 gain applied at the first input. This, to me, is not so useful. I need to apply a +12 Gainer in this case to bring the signal up to the correct level. Then, post DSP, I have to apply a -12 Gainer to revert the signal to the general gain regime.

Track Headroom is a welcome gain stage and can be aligned with the K system or whatever regime you are working with to keep your values rational, but receiving DSP in Send tracks are likely to be under-driven at lower Track Headroom settings and likewise over-driven with amplified values.

I think it ought to be an option to have Send tracks attenuate their inputs to negate Track Headroom settings as default.

Do you think this ought to be a feature request?

I`ve just had a look at this with the sonalksis meter and it seems that the reduction is applied at the beginning of all the instrument tracks, but nothing on the sends:

The meters are shown in the same order as the tracks they are measuring. In that picture the send device on track 01 has the source muted. The signal on the send trackS01 matches the signal on track 01, which matches the master so the send has lowered it no further.
If I disable the send and just feed track 01 to the master, the master and track 01 reading stays the same, showing that the gain reduction must be at the start of the track otherwise the first output would read higher than the master.

edit: headroom at -6 db

4184 send gain stage.PNG

For you would the reduction being applied at the end of instrument and send tracks be better? Surely track inserts are being equally under/ overdriven with the current set up or is that desirable? (my knowledge of gain staging being fairly limited)

My apologies, I think my comment ‘gets out of whack’ has given the wrong impression.

Agree with your findings. I’m not intentionally suggesting that any additional gain reduction is being applied at the Send, or indeed that there is anything wrong in principle with the way this Track Headroom gain stage is being handled. It’s largely fine.

The problem for me is that I want any DSP in my sends to be getting a healthy signal, not a -12 or whatever I’ve been using across the board to keep my tracks rational volume-wise. The first DSP on a send track is going to be seeing the Track Headroom attenuated signal, that’s what is not particularly useful in my case.

It is completely solved by adding a Gainer at the top of the Send track with a +12 value, followed by the DSP which then feeds a final Gainer with a -12 value.
This way I get to maintain a good headroom across tracks, but also to be hitting characterful DSP with healthy signal levels in order to get the characteristics you would expect from a normal dynamic signal level.
This makes perfect sense, it’s what I’d expect to do on a console but I reckon some way of having this top and bottom offset done for you relative to the Track Headroom value would be very handy.

Maybe this will speed things up at least? Was nice to find the offset value sitting there in the API already!

4186 ledger.scripts.TrackHeadroomCompensate_Rns280_V1.xrnx

“Add Headroom Compensating Gainers”

[/b]-works on any selected track, not just sends

That is very kind of you - thanks a lot for doing that!

No probs, it got me thinking along the lines for future tools which is always good!

Do you reckon it would be possible to keep these Gainers values constantly relative to the Track Headroom values?
That is, if the Track Headroom value was changed after a Gainer pair was created with this tool, those gainers would update with new values.

I really must learn Lua as there’s all kinds of rather niche things I do with renoise in an attempt to make it more like my old hardware studio setup… Things folks might find generally useful.

Is there a way I could examine the code in this tool in an attempt to learn?

I just saw the Renoise Lua threads in these fora - will get reading! :)

If you spam the ‘monitor sends’ command MON is added multiple times. Bug?

Yes that should be possible as the headroom is an observable value. This means you can attach a notifier to it so that when it changes you can change other value/s in renoise. The other values being the gainer volume amounts, in this case., _observable  

You will need to open the scripting editor in renoise, to get started:

-Go to renoise help menu
-Choose Show the Preferences Folder..
-Close renoise
-Open Config.XML from the preferences folder in notepad or a text editor
-Do an F3 search for: ShowScriptingDevelopmentTools
-Change this value to true and save the file and exit notepad.
-Open renoise and in the tools menu you should find an entry for Scripting Terminal Editor… should be there
-Click it

Here is the code of the script aswell which you will find in the terminal as you have it installed already, Its fairly simple in that it doesnt have an loops or conditional statements (if statements). It just calls API values and functions. I don`t know if you have any coding background and if any of that makes sense, but hopefully it can get you started.

--script adds a gainer at the beginning and the end of a DSP chain to drive it by the renoise  
--set track headroom adjustment, then re-adjust for post track processing  
--i.e. if the global headroom is -6dB the first gainer is + 6db and the second -6db  
renoise.tool():add_keybinding {  
 name = "Global:Tools:Add Headroom Compensating Gainers",  
 invoke = function()add_gainers()  
function add_gainers()  
 --song object  
 local song =  
 --first headroom compensating gainer inserted at pos 2 (track vol pan always at pos 1)  
 local gainer_device = song.selected_track:insert_device_at("Audio/Effects/Native/Gainer", 2)  
 gainer_device.display_name = "Headroom Boost"  
 --set volume 1/headroom  
 gainer_device:parameter(1).value = (1/song.transport.track_headroom) --math.lin2db  
 --hide volume slider in mixer  
 gainer_device:parameter(1).show_in_mixer = false  
 --minimize in DSP lane  
 gainer_device.is_maximized = false  
 --insert re-adjusting gainer to get pre track levels  
 local gainer_device_2 = song.selected_track:insert_device_at("Audio/Effects/Native/Gainer", #song.selected_track.devices + 1)  
 gainer_device_2.display_name = "Headroom Reset"  
 --set volume to (+) headroom  
 gainer_device_2:parameter(1).value = (song.transport.track_headroom) --math.db2lin  
 --hide volume slider in mixer  
 gainer_device_2:parameter(1).show_in_mixer = false  
 --minimize in DSP lane  
 gainer_device_2.is_maximized = false  

By spam I guess you mean press repeatedly? It should remove “MON” each time. It seems to work ok here no matter how many presses or how quickly. Is this happening all the time or in a certain situation?

Regarding the scripting stuff - lovely, ta! I’ll begin down the brainache road shortly. I’d love to get into it. My coding background is rather patchy (ie, getting to chapter 7 of 50 in the C for idiots books and then getting bored and going back to making silly noises in various DAWs).
The Lua stuff/renoise permutation seems a bit more doable with my wetware, so who knows!

Regarding the MON spamming, yes I meant pressing it repeatedly. Hmm… seems to work fine now. Maybe it just needed a restart.
Will keep my eye on that though and see if I can find a repro.


No probs, yes it helps having a motivation of something useful for yourself at the end of the hard work. I hadn`t coded atall before scripting. Not saying it was easy learning but very satisfying to get some stuff in renoise working the way I wanted!

ok will wait to hear.

Now up on tools site with one more shortcut:

-GTS Increment FX Track Color Blend
cycles through blend states for group master and send track colors
medium blend, light,blend and no blend


Another tools page upload that got trashed . Beta 3.0 version in first post.


bug raport:

  1. I use ‘GTS’ Route to Send Track as SHIFT+s
  2. add one more send track (S02)
  3. Goto Track 01
  4. do shortcuts: SHIFT+s,1 SHIFT+s,2
  5. Goto Track 02
  6. do shortcuts: SHIFT+s,1 SHIFT+s,2

I have following error:

*** .\cas_additions.lua:114: attempt to perform arithmetic on local ‘num’ (a nil value)
*** stack traceback:
*** .\cas_additions.lua:114: in function ‘insert_send_dest’
*** .\cas_additions.lua:158: in function <.\cas_additions.lua:125>

thx for this script

This was in Cas` part of the script, I had a go at a fix:

@ Cas I modified line 150:

local num = 1   
-- CHANGED 24/01/14, given the default value of 1 to avoid later attempted arithmetic on a nil value  

Let me Know if this helps kopias:


[quote=“Ledger, post:47, topic:39206”]
This was in Cas` part of the script, I had a go at a fix:

@ Cas I modified line 150:

local num = 1   
-- CHANGED 24/01/14, given the default value of 1 to avoid later attempted arithmetic on a nil value  

Let me Know if this helps kopias:

Attachment 4572 not found.

This seams to fix the problem. Thx

Great, first post updated to 1.2: