New Tool: Reverse Playback

This is an odd one - I guess I like them weird :)

1491 ReversePlayback-screen.png

In the pattern editor context menu you can now “Reverse Playback”. While active the playback position will skip back two steps for each step taken, as a result we will run our renoise song backwards.

Keybinding is at: Global:Transport:Reverse Playback

1866 ReversePlaybackV02.PNG

ReversePlayback uses a column in the pattern editor if it is named “Playback-Automation”. You can use this column to direct your playhead.

With the Playback-Automation column we can toggle Reverse Playback on and off with 1001 (on) and 1000 (off) in the effects columns.

With the Playback-Automation column we can also skip to a line within the current pattern with FAXX where XX is the line number.

Known issues, please post if you have any solutions:

  • Sound is cut when playback position skips between sequences. Big problem :(
  • Looping: The first line after a loop can not be played.
    (todo fix: Deactivate the looping as we set the playback position to the last line of the loop, reactivate the loop on the next step when the first line after the loop is played)
  • Playback starts at first line of selected_sequence but should start at last line of selected_sequence by skipping to first line of selected_sequence-1.
    (possible fix: Use playing_observable to trigger a skip to previous sequence as an initial position. A problem here is that the playing_observable triggers after the first line is played.)
  • Renoise displays the skipping of the playback_position resulting in the cursor visually moving back and forth during reverse playback. This does not effect the audio playback but does show a seasick cursor.

A lot of stuff will sound strange with this tool, because we are reversing the sampler not the audio playback.
New chords will merge where polyphonic voices interleave - Autoseek will backwards slice samples. - Note offs, slides and effect comands will now apply to other note values. - Automation will step back in lines, sliding in the opposite direction of the steps. - LFO track dsp direction will not invert. - etc.

I like these quirks but sometimes they become harsh sounding issues when these techniques play big roles my songs. Any ideas on different ways to reverse playback would be cool.

Version history;

v.0.21

  • Fixed stupid nil bug. (spotted by Conner_Bw)

v.0.2 (6 dl)

  • Added support for “Playback-Automation” column.
  • Added automation “jump to line” for “Playback-Automation” column. (suggested by vV)
  • Added automation “toggle reverse” for the “Playback-Automation” column. (suggested by Jonas)
  • Updated ApiVersion for 2.7 beta

v 0.1 (45 dl)

  • Reverse Playback, menu entry and key binding.
1 Like

Haha, very cool. :)

Using a pattern iterator, in reverse:

  • Append 2 empty patterns, mark and loop them.
  • When in pattern 1, copy and reverse data in pattern 2.
  • When in pattern 2, copy and reverse data in pattern 1.

:clownstep:

I want!

Interesting idea, this would solve the issue with sound getting cut when we skip between patterns. But using pattern iterators during playback on each line is heavy computation, might result in other issues with complex songs on high bpm.

I like it, will check this out. But it’s a completely different approach.

And feel free to post some reversed tracks if you like. I’m a big fan!

this is fun, thanks!

good to see people embracing the weird stuff even in scripting.

Is it possible to automate this binding somehow? Would be great to be able to ping-pong loop certain pattern sections impulse tracker style!

By the way, I like that you can use the right mouse click pattern selection rendering when scrolling backwards! :)

I have some ideas of how to make automation for tool actions. In happy-chocolate-fairytale-land we could add custom columns to pattern tracks through the API. This would give us; automation control of 3rd party (tool) actions and save-ing the automation to the .xrns rather than having 3rd party documents or saving to Renoises preferences.

Luckly due to Renoises awesome design we can use instruments with no samples, effect commands to no dsp effects etc. as directions for 3rd party tools. But this requires a well planned hack design from the tool as it could easily conflict with renoises actions or other tools. Also tools will not work when rendering to disk.

I’ll make a hack implementation it may not look nice but should ping-pong properly.

Great stuff. Thanks for pointing that out, I hadn’t tried it!

RxeGxZc5Dcc

wow…

Y1voxBSJjRca

Close, but seems to do some failing yet compared to the original.

1 Like

Yeah it’s not perfect. Due to a couple of reasons but mostly because of lack of concentration after converting a bunch of values. But the point is that it’s paralysical renoise. The feature request is complete, yours is to complete the conversion (if you want).

It’s well job done i should honestly say so.
We have plenty of other mods and IT’s to convert with this tool :P

Amazing effort!

So how was the backwards scrolling script / programmed / automated in the pattern editor?

In the video it’s done with FAXX where XX is the current line number - 1 so we will skip to the line before the current line who will skip to the line before that etc. Could have also done this with 1001 on the last line and jumping straight to it.

I attached the XRNS, it’s in a bit of a mess. But you can check it out.

I tried your XRNS with the script in the 1st post in 2.7 BETA2, I got a bunch of:

  
Renoise LOG> ScriptingEngine: main.lua:88: attempt to compare number with nil, stack traceback: main.lua:88: in function <76><br>
Renoise LOG&gt; Error Message: '/Users/dac514/Library/Preferences/Renoise/V2.7.0/Scripts/Tools/mogue.theworldissquare.ReversePlayback.xrnx/main.lua' failed in one of its notifiers.<br>
<br>```

<br>
<br>
Not sure I get it.</76>

[quote=“Conner_Bw, post:18, topic:30738”]
I tried your XRNS with the script in the 1st post in 2.7 BETA2, I got a bunch of:

  
Renoise LOG> ScriptingEngine: main.lua:88: attempt to compare number with nil, stack traceback: main.lua:88: in function <76><br>
Renoise LOG&gt; Error Message: '/Users/dac514/Library/Preferences/Renoise/V2.7.0/Scripts/Tools/mogue.theworldissquare.ReversePlayback.xrnx/main.lua' failed in one of its notifiers.<br>
<br>```

<br>
<br>
Not sure I get it.<br>[/quote]<br>
<br>
Fixed in 0.21, see first post.</76>

Works! Cheers.