New Tool (2.6 - 3.1): Split Into Separate Tracks

Is there a way to perhaps automatically move the note data into the first column of each new track and THEN remove the empty columns?

I just got this error…

std::logic_error: 'invalid active_preset index '1'. no active_preset's are available. 0 may be allowed.'  
stack traceback:  
 [C]: ?  
 [C]: in function '__newindex'  
 [string "do..."]:22: in function   
 main.lua:415: in function 'split'  
 main.lua:607: in function <605><br>```

</605>

I think I got the error because the script crashes when certain DSPs are present in the track’s effect chain. So far I know it doesn’t seem to like native effects…

Updated for 3.0!

for some reason Tool Updater always wants to update this tool

even when i removed it and install latest version 1.1

is it only me? could someone check it?

same here.

Not only you:https://forum.renoise.com/t/tool-updater-broken/42067

Dblue helped me to sort this out. It is fixed now, please update with the Tool Updater :slight_smile:

Hey fladd, is it possible to split every single note to two tracks with LPB 8 ? Here its really strangely splitting without obvious logic to me. a 16th notes arp is splitted into three tracks, two notes together on each track…? Is there a hidden setting or something? Didn’t I get it?

Hey fladd, is it possible to split every single note to two tracks with LPB 8 ? Here its really strangely splitting without obvious logic to me. a 16th notes arp is splitted into three tracks, two notes together on each track…? Is there a hidden setting or something? Didn’t I get it?

Can you post an example file?

fladd, sorry, I didn’t get how you tool works and now realized, it simply is not designed for the task I am looking for:

I want to split ANY new note to a previously defined number of tracks. For example splitting the notes of a mono track to two tracks, alternating.

Why? Because I want to emulate that nice “voice/note panning” feature that lot of 80s analog synths have. Every voice is played with a different panning, but for the voice, the panning remains stable in position.

I already tried to add that option to your tool, but failed… :slight_smile: Either I need to look at it with a fresh brain or you could add such option? Where is detected how many tracks will be used? Via a table? did not completely get the logic in it…

i dont exacly know what you want, but this looks like a job for xStream…

this for example will move every n-th line data in column one to second column and remove from first


line = xpos.line

n = 8

if line % n <= 1 then

xline.note_columns[2] = xline.note_columns[1]

xline.note_columns[1] = nil

end


Hey many thanks. Will try this soon.

@kopias: very cool. A word of advice, though: lua will collapse an indexed table which contain “nil” entries.

So after executing the following code, lua will understand xline as having only a single note column.

if line % n <= 1 then
 xline.note_columns[2] = xline.note_columns[1]
 xline.note_columns[1] = nil
end

The solution is simple: supply an empty table. Then, the order of note columns will remain fixed…

if line % n <= 1 then
  xline.note_columns[2] = xline.note_columns[1]
  xline.note_columns[1] = {} 
end

Such empty tables are understood by xStream as ‘undefined’ entries (which you can then choose to clear or not).

thanks danoise. Works somehow.

Now I have some silly questions:

  • Can I split to multiple tracks, not just columns?

  • How do I check for a note value, if it exists or not, but not on note-off? Tried “if xline.note_columns[1].note_value~= nil”, but never matches.

  • is there a way to debug? printing a variable?

  • how do I setup a variable control? I tried args.Name, but the variable control does not show up.

thx!


if (n == nil) then n = 0 end

if (t == nil) then t = 0 end

num_tracks = 2

num_notes = 1

local testvar = args.num_steps

tt = 1+(t%(num_tracks))

xline.note_columns[tt] = xline.note_columns[1]

if (tt ~= 1) then

xline.note_columns[1] = {}

end

if xline.note_columns[1] ~= nil then

print(“dd”…n)

n = n + 1

if n >= num_notes then

t = t + 1

n = 0

end

end

Hi there,

I updated the tool for Renoise 3.1 and added some things:

  • Ability to split according to note columns (column names will become track names). This is the only mode in which no extra empty columns are created. It hence works best and is thus now the default mode.

  • Volume, Pan, Delay and FX values that are not attached to a note, but follow one, are now also copied to the corresponding track.

I really hope that I did not break anything while adding those features. The code is a terrible hack :-)I should refactor that at some point…

Enjoy!

Hi fladd,

I have a little “bug report”:

If you select the option “copy devices”, so the track fx will be moved to the group track, all meta connections of all meta devices will be lost. I am not sure if here to blame your tool or Renoise for having a bug in this case…

@ffx: Thanks for the bug report. Mmh, I am not sure if I can do something about this, though. I just copy all devices one by one. I am afraid that is a limitation of Renoise then, if the meta connections get lost during the copying process. Maybe someone from the team can confirm?

fladd, thanks.

dblue and taktik, shouldn’t a device copying thru the lua api keep all meta connections? Is this a flaw in the lua api?

Or is it a problem that two devices with same targets will exist for moment, so kind of copy to buffer, delete source and then add destination?

Some bug:

'/Users/Ju/Library/Preferences/Renoise/V3.1.0/Scripts/Tools/de.fladd.SplitIntoSeparateTracks.xrnx/main.lua' failed in one of its notifiers.

Please contact the author (Florian Krause (fladd) [siebenhundertzehn@gmail.com]) for assistance...

std::logic_error: 'invalid active_preset index '0'. valid values are (1 to 1).'
stack traceback:
  [C]: ?
  [C]: in function '__newindex'
  [string "do..."]:22: in function <[string "do..."]:9>
  main.lua:440: in function 'split'
  main.lua:632: in function <main.lua:630>

Complete noob here - how do I even use this? Where’s the option to split (I’ve installed BTW).