Opt. multiple delay columns with graph automation -> trk shuffle

Imagine this:

You have a sophisticated track ready, including some crafty micro rhythm using the delay column. Now you want to add a shuffle. U simply now add another delay column , but this time you set it up using the graphical automation!

In the graph of the second delay column, you simply draw a nice sine that fluctuates around a middle line (offset 0). Now you would get the most natural track shuffle ever heard on this planet. You can of course use some kind of square or triangle, too.

The second (or third etc.) delay column simply will be added to the first.

And of course a delay column for group tracks that will be added to a containing sub tracks, so you can shuffle the whole beat at once.

Yeah. A flexible per-track groove setting would be the bomb. (I personally don’t think there is a big chance of it happening).

The general direction of your suggestion is very interesting since it wouldn’t have to mess with how patterns and tracks are scrolling! A track delay column that works as an offset for everything else, right? That’s a relatively simple idea/feature that would address the need of per-track groove. That should save the dev a lot of headache compared to other implementations.

The way I do it is to add a bunch of Qxx commands to a group track. Every track that needs to shuffle, I stick into that group.

As the shuffle is separate from the tracks, it’s easy to clone/alias the group track and make it apply to the whole song. Or make a variation, somewhere.

Of course, you might not want to “waste” a group on such a small thing as shuffle, and prefer to add it to the track itself? Less reusable, but the fundamental idea remains the same.

One weakness is the resolution of the Qxx command - it only deals with tick values. Good enough for me, but not as precise as the delay column.

But the upside to this is that it’s possible to combine ticks and delay columns - so the aforementioned micro rhythm is preserved, you just ‘push it around’ a bit.

Oh nice idea, but imagine the possibilities with a offset CURVE. Like with a sine.

The way I do it is to add a bunch of Qxx commands to a group track. Every track that needs to shuffle, I stick into that group.

As the shuffle is separate from the tracks, it’s easy to clone/alias the group track and make it apply to the whole song. Or make a variation, somewhere.

Of course, you might not want to “waste” a group on such a small thing as shuffle, and prefer to add it to the track itself? Less reusable, but the fundamental idea remains the same.

One weakness is the resolution of the Qxx command - it only deals with tick values. Good enough for me, but not as precise as the delay column.

But the upside to this is that it’s possible to combine ticks and delay columns - so the aforementioned micro rhythm is preserved, you just ‘push it around’ a bit.

danoise, so a Qxx value will be added to the track individual delay value?

Is there a shuffle tool already using this? I still would absolutely prefer to draw a graphical shuffle curve instead hacking the pentagon with hex.

so a Qxx value will be added to the track individual delay value?

Is there a shuffle tool already using this?

Yes, Qxx in a group track (or master, even) will affect all child tracks.

I don’t think there’s a tool that does this, but I could easily whip up something in xStream

This is a model for xStream that will allow you to write shuffle into a fx column of your choice,

--[[===========================================================================
Qxx Shuffle.lua
===========================================================================]]--

return {
arguments = {
  {
      name = "fx_column_idx",
      value = 0,
      properties = {
          min = 0,
          max = 8,
          display_as = "integer",
          zero_based = false,
      },
      description = "The FX column where we write Qxx commands (0 = selected)",
  },
  {
      name = "shuffle_amount",
      value = 14,
      properties = {
          min = 0,
          max = 15,
          display_as = "integer",
          zero_based = false,
      },
      description = "The shuffle amount (in ticks)",
  },
},
presets = {
},
data = {
},
options = {
 color = 0x000000,
},
callback = [[
-------------------------------------------------------------------------------
-- Tick-based shuffle
-- Will output Qxx commands into every Nth line (customizable), in the
-- effect column of your choice - or the selected one
-------------------------------------------------------------------------------
local fx_col_idx = (args.fx_column_idx == 0) and
  rns.selected_effect_column_index or args.fx_column_idx
print(fx_col_idx)
if (fx_col_idx > 0) -- when a note column is focused
  and (xinc%2 ~= 0)
then
  xline.effect_columns[fx_col_idx].number_string = "0Q"
  xline.effect_columns[fx_col_idx].amount_value = args.shuffle_amount
end

]],
}

As usual with xStream you can choose to write data while playing (tweaking the value in realtime), or simply “apply to track/selection”.

Nice :slight_smile: Thanks a lot! Danoise fix-patching Renoise with his mind-blowing scripts :slight_smile: