New Tool (3.4): Grid Pie

It looks like dope from where I’m standing.

cool, I have one of those Akai’s, going to jam around with it using your tool B)

Awesome, thanks!

Grid Pie 0.4. released on the Tools page:

http://tools.renoise.com/tools/grid-pie

ok if nobody is going to link it, i will: http://createdigitalmusic.com/2011/10/a-killer-performance-grid-in-renoise-shows-off-this-hackable-music-tool/

kudos Conner!

Just had a eureka moment and released version 0.5 on the Tools page:

http://tools.renoise.com/tools/grid-pie

This version animates the position in the Pattern Matrix. I think this small change makes a huge difference. Check it out. What do you girls/guys think?

PS: If anyone is testing Grid Pie 0.5 with a controller. Can you tell me if changing line 191 from this:

From this:

  
 rns.tracks[x].mute_state = renoise.Track.MUTE_STATE_OFF  
 OneShotIdleNotifier(100, function()  
 rns.patterns[gridpie_idx].tracks[x]:clear()  
 rns.tracks[x].mute_state = renoise.Track.MUTE_STATE_ACTIVE  
 end)  
  

To this:

  
 rns.tracks[x].mute_state = renoise.Track.MUTE_STATE_OFF  
 rns.patterns[gridpie_idx].tracks[x]:clear()  
 OneShotIdleNotifier(100, function() rns.tracks[x].mute_state = renoise.Track.MUTE_STATE_ACTIVE end)  
  

Makes a difference when muting? E.g. better/worse or none?

This looks great! Can’t wait until I get home in two weeks to try it out on my Monome. Does it support LED feedback?

I’ve tried it yesterday with my LPD8 and this tool is so awesome!

It’s really great for finding new options while composing… instant remix!

I just uploaded a new version (0.6) to the Tools page that tries to remember the original state of the Pattern Matrix, and will unmute the slots when you close Grid Pie.

http://tools.renoise.com/tools/grid-pie

PS: One of you unlucky souls downloaded a buggy version of Grid Pie. I put it back in quarantine, fixed it, but then when I went to re-upload the patched version Grid Pie was out of quarantine. Damn, that’s super fast service! :) Re-download the tool if this unlucky soul is you.

Version 0.7 released to the Tools page. I got polyrhythms working in Grid Pie. You can now make odd time signature stuff on-the-fly.

[b]To enable, open “com.renoise.GridPie.xrnx/main.lua” in the Script Editor and change line ~6 from :

  
local DISABLE_POLYRHYTHMS = true  
  

To:

  
local DISABLE_POLYRHYTHMS = false  
  
``` [/b]  
  
My problem is I don't want to enable it by default because it's too slow to be any fun. I was wondering if any of you wanted to take a look at this and help me speed it up?  
  
Right now, I'm thinking `copy_and_expand()` should be written in C++ and added to the API; like `tracks[]:copy_from()` is - But, maybe I'm just doing something wrong and you girls/guys can tell me?  
  
An example bad case is combining a 64 line pattern with a 112 pattern from: [indamixx]_jonas_the_plugexpert_-_Savons.xrns (available in our song downloads section) This will create a 448 line pattern and copy+expand everything as optimized as possible, but it's still too slow.   
  
For the record, I have already tried ProcessSlicer and it didn't do the job. It made things worse. Don't let that stop you from trying with it though.

head asplodes

Connor: First, I warm round of applause to you. I think you did a great job.

Since I’d like to integrate the same function (s. here what I got when asking the renoise developers: Renoise Mockup (Live Features))

So I had thought about a lot things that I now know would also make sense. which is:

  • Move a “toggled line ( i will call that ‘sequence’ now” up/down/left/right
  • Rewind Track (maybe also whole pattern? though this can already be done by using arrow up/arrow down)
  • Sample Track and play reverse sample while muting
  • Remember clicked sequences

And so on.

What do you think about that?
If not clear I’ll add some pics.

There is only one thing to know:

Does LUA offer to integrate more than one gui at once?
Because I don’t want to change the interface of gridpie.
But I’d like to add this.

Connor_BW what’s your opinion?

Hey, thanks!

Pictures would be great.

Yes, this is possible AFAIK.

I haven’t tried it myself yet but I have seen scripts with more than one window. (The Duplex settings dialogue, for example.)

made me drooling a bit also! :smashed:

This should do the trick:
2434 GripPieExpandSpeedup.zip
(a patch against the current xrnx svn version - r1068)

Gets rid of doubled “pattern.tracks” and “track.lines” calls and use line(i) and track(i) instead of lines and tracks.
“lines” and “tracks” calls are pretty heavy, cause they do convert all lines of a pattern to Lua first, then only one use of them (the one at “i”). line() only converts a single line to Lua; the one you are interested in.

Definitely faster! Thanks! I had to change it a bit. Committed to SVN.

Some questions

  • You removed OneShotIdleNotifier under “Also expanding track” but not for “Expanding track”, a typo?
  • I had to put back to_line for the automation points. Was this working for you without it? A typo?

I’m still not sure if this is fast enough to enable by default. With complex automations it’s still hurting a bit.

Adventurous people who want to test this, svn upor:

  • Open “com.renoise.GridPie.xrnx/main.lua” in the Script Editor
  • Cut and paste from this revision.
  • Reload Tools

Feedback? Is this fast enough for you?

Yay, the polyrhytmics make this really interesting. Great work, Conner

I’d say yes. Keep your patterns as short/compact as possible (lower the LPB value) and you should have no problems.

Great fun to recombine patterns of 4, 6 and 9 lines, for example.

Another approach could be to output pattern data incrementally over time, instead of being calculated all at once?

Thanks danoise,

I think the automation procedure could be sped up, but I have brain freeze / distracting baby on lap this morning and I’m stuck. E.g.

[luabox]
for i=1, number_of_lines do
for j=1, multiplier do

to_line = i + number_of_lines * j
local source_line = dest_track:line(i)
local dest_line = dest_track:line(to_line)

if not source_line.is_empty then
– Copy the top of pattern to the expanded lines
dest_line:copy_from(source_line)
end
for k,automation in pairs(dest_track.automation) do
local points = table.create(table.rcopy(automation.points))
for _,point in pairs(points) do
if math.floor(point.time) == i then
local decimals = explode(".", point.time)
if (decimals[2] ~= nil) then decimals = tonumber(“0.” … decimals[2])
else decimals = 0 end
dest_track.automation[k]:add_point_at(to_line + decimals, point.value)
elseif math.floor(point.time) > i then
break
end
end
end
end
[/luabox]

Should look something like:

[luabox]
local points= table.create()
for k,automation in pairs(dest_track.automation) do
points[k] = table.create(table.rcopy(automation.points))
end

for i=1, number_of_lines do
for j=1, multiplier do

to_line = i + number_of_lines * j
local source_line = dest_track:line(i)
local dest_line = dest_track:line(to_line)

if not source_line.is_empty then
– Copy the top of pattern to the expanded lines
dest_line:copy_from(source_line)
end
for k,point in pairs(points) do
for _,p in pairs(point) do
if math.floor(p.time) == i then
local decimals = explode(".", p.time)
if (decimals[2] ~= nil) then decimals = tonumber(“0.” … decimals[2])
else decimals = 0 end
dest_track.automation[k]:add_point_at(to_line + decimals, p.value)
elseif math.floor(p.time) > i then
break
end
end
end
end
end
[/luabox]

I’m not sure if this actually speeds things up. Seems to shave off a few milliseconds, but this could just be other factors like my CPU doing other stuff at the time? Any insight on the internals here Taktik?

  
Before:  
Expanding track 5 from 112 to 448 lines  
Time to expand track 5 was: 1.8209999999999  
  
After:  
Expanding track 5 from 112 to 448 lines  
Time to expand track 5 was: 1.6030000000001