Entire Pattern Fx

Not too sure if this was discussed already:

I was thinking that it would be great to be able to apply effects such as offset, retrig, pitch up and down, to the entire pattern instead of only individual tracks. Essentially this means that whatever effects are coded into the master track (or seperate effects track delegated for this purpose) apply to ALL samples playing at that time SIMULTANEOUSLY. This would be a huge time saver when it comes to programming, and it would make it easier to emulate things such as turntable scratching, granular synthesizing, and just beat cut-ups in general.

Anyone agree with this idea?

Effects like sample offset, pitching up/down, etc., are really only possible because the samples are loaded into memory and Renoise has access to the entire sample data. If we were to use sample offset with a command such as 09C0 for example, we are able to look into the “future” of the sample only because it’s preloaded in memory. This would be impossible to perform in realtime on Renoise’s master output without buffering/rendering some amount of the song into memory first, therefore introducing quite a large amount of latency. How should we determine the length of audio that should be buffered, since the sample offset command relies on a fixed sample length to make its calculations? (In other words, it needs to know where the beginning, middle and end of the sample is). What should happen when the end of the buffer has been reached? etc.

The problem is even worse with pitching. In order to pitch the sound upwards the sample must be played faster than normal. This is fine on a preloaded sample because the we can read from any part of the sample itself, once more looking into the “future” of the sample, but it is impossible to do on realtime audio without buffering/rendering some amount first, causing latency. It is possible to pitch down in realtime but it also has a lot of problems. You record the real sound into a buffer, then you read from that buffer slower than normal to create a pitched down sound. But how big should the buffer be? A few seconds? The length of the entire song? Should it just grow constantly, sucking up more ram?

Ah, I see. It definately wouldn’t be possible without some serious serious buffer-fest going on.

The only other way to achieve this effect would to just render your song into one WAV and then chop it up as if it were one huge break loop, essentially remixing your own song.

Maybe I’ll test this out on some old material…

Thx db

I actually do that a lot, using the render to selection thing (i’m so glad i registered renoise). just render the master track, or a sub-track, or a send track and then retrigger/pitch/whatever to your heart’s content.

A bit of caution is needed there though. It’s important to make sure that the volume isn’t too high from any of the track’s you’re rendering or it will clip or not be the same volume as the original sound. I wish each track in renoise had a “clipping led”.

I just realized that I may have not explained my theory correctly. It’s a different idea than what dblue described. Instead of applying a code effect such as pitch or offset/retrigger to the MASTER L+R channel, thus having to render it realtime in the buffer, I meant that it would be useful to have a seperate track meant for whole-pattern codes that would work like this:

  1. An effect code is written in the track
  2. The code applies itself to all samples CURRENTLY PLAYING

Since the samples are already in the sample bank’s memory, executing effects would be just like normal. This is totally different than rendering effects in realtime to the stereo image coming out of the master track.

The only thing I find that may be tricky about this is using offset. Say if you have a sample starting at the beginning of a pattern and you apply a whole-pattern offset about three-quarters down, the offset parameters would have to be relative to the pattern length and whatever line it’s currently playing at, instead of the offset points relative to each sample’s individual length.

I hope I wrote that understandably… ;)