New Tool (3.1): Autobender

A simple but flexible tool to create automation curves.

You can download the latest version on the tool page.

Usage: select a range in the automation editor, right click on it and choose “Autobender…” from the menu. The curve is created in real time while you adjust the parameters.

6215 Autobender_1.3_screenshot.png

  • The two vertical sliders set the start and end values (they are also automatically updated when you change the selection).
  • The XY pad adjust the curve:
    • The vertical axis is the curvature (i.e. strength of the curve); at center the curve is a straight line.
    • The horizontal axis transforms the curve into an s-shape (at center the shape is perfectly symmetrical).
  • The horizontal slider below the pad adjust the “character” of the curve : middle is exponential, left is logarithmic, right is sinusoidal(-ish).
  • The box at the bottom defines how points are spaced on the curve.
  • Finally, the padlock icon at the bottom lock the currently selected range; this way you can make another selection and open a new Autobender window which will operate independently. This allows to edit multiple section of an automation curve at the same time.

I intend to keep the tool simple and to-the-point, so I probably won’t add many features to it, if at all (also, this was more an offshoot of another project than a tool I intend to use). Obviously I’ll fix bugs, and may tweaks a few things based on feedback.

I’m especially curious about the usability of the XY pad. I went through a lot of thinking and prototyping to find a solution that gives a large palette of musically relevant curves while staying simple enough. If you have any opinion on this, I’m glad to discuss it further.

Note: the idea to use a XY pad came from user gova in this thread, though I went in a different direction than the one proposed (i.e. not bezier curves).

Versions history :

1 Like

Great stuff, thanks! :drummer:

…am I right this tool isn’t listed yet in they preferences\keys list to assign it to a keyboard shortcut? Can’t find it real quick, would be nice for quickly booting up the tool.

Brilliant thanks!

…am I right this tool isn’t listed yet in they preferences\keys list to assign it to a keyboard shortcut? Can’t find it real quick, would be nice for quickly booting up the tool.

I knew I was forgetting something… I will add it shortly.

std::logic_error: 'ViewBuilder: invalid value for mini slider: '-1.38778e-17'. value must be [0 - 1].'

Got this while ‘bending’ the volume (right-hand side slider) all the way down.

Other than that, it works great - XY pad is sufficient as you are receiving instant, or near-instantaneous feedback in the envelope below.

Error if load a new song with gui still open then try and apply the tool to a new envelope.

Looks like the object needs to be checked and updated if in a new song or maybe force close the tool with a new_document notifier, so the user has to re-initialize it after they load the new song?

-------------------------------------------- 
 --close dialog function ON NEW SONG
 --------------------------------------------
 local function closer(dialog)
    
   ----any extra housekeeping here----
 
    --check for open dialog
 if dialog and dialog.visible then
 --close it
 dialog:close() 
 end
 end

  --attach notifier, fired when renoise loads a new song 
  ------------------------------------------------------
  renoise.tool().app_release_document_observable:add_notifier(closer,dialog)
'C:\Users\P\AppData\Roaming\Renoise\V3.1.0\Scripts\Tools\org.drakmaniso.Autobender.xrnx\main.lua' failed in one of its notifiers.
The notifier will be disabled to prevent further errors.

Please contact the author (drakmaniso | moussault.laurent@gmail.com) for assistance...

std::logic_error: 'trying to access a nil object of type 'class PatternTrackEnvelope'. the object is not or no longer available.'
stack traceback:
  [C]: ?
  [C]: in function '__index'
  [string "do..."]:37: in function <[string "do..."]:35>
  .\autobender.lua:191: in function 'update_automation'
  .\autobender.lua:29: in function <.\autobender.lua:27>

Thanks for the bug reports.

I’ll add safeguards for the sliders auto-update (not sure why these strange values pop up randomly, though). I’ll also close the dialog when a new song is created (thanks for the code snippet!).

I’m especially curious about the usability of the XY pad.

There are alot cases. I would use this to record cutoff / resonance automations on neuro basses. Looping a pattern and play with XY till something useful comes out. I’ll try your tool later, looks great.

New version, fixing all the bugs reported above:

6175 org.drakmaniso.Autobender_Rns310_v1.1.xrnx

  • Add the possibility to assign a key binding.
  • Prevent value errors while updating the sliders.
  • Close the dialog when a new song is created or opened (to prevent crashing).

I’ve also created a tool page.

Oh, and it has its place on github, too.

There are alot cases. I would use this to record cutoff / resonance automations on neuro basses. Looping a pattern and play with XY till something useful comes out. I’ll try your tool later, looks great.

What I’m interested in, is how “natural” it feels to navigate the XY pad while doing such an exploration. It’s probably not completely intuitive at first, but does it becomes predictable and familiar after some use?

-Load a device in renoise DSP lane

-Use Autobender 1.1 on one of it`s parameters

-delete the device with tool gui still open:

'C:\Users\P\AppData\Roaming\Renoise\V3.1.0\Scripts\Tools\org.drakmaniso.Autobender.xrnx\main.lua' failed in one of its notifiers.
The notifier will be disabled to prevent further errors.

Please contact the author (drakmaniso | moussault.laurent@gmail.com) for assistance...

No matching overload found, candidates:
void find_automation(PatternTrack const&,DeviceParameter&,lua_State*)
stack traceback:
  [C]: in function 'find_automation'
  .\autobender.lua:64: in function 'handle_parameter_change'
  .\autobender.lua:50: in function <.\autobender.lua:49>

Thanks Ledger. I’ll post a bug fix soon.

thanks,

re: the user friendlyness of the XY pad, it is certainly is useable but I would say off the bat a bit unintuitive. I was sort of expecting the inverse corners (top right to bottom left) to respond how the opposite corners do (top right to top left)

i.e. CASE: Downward slope in editor

Top right in XY
6177 top right_1.PNG

Top left in XY but expected Bottom left to give this result

6178 top left_2.PNG

Not sure if the arithmetic gets harder to implement for this though?

My current way to remind myself when I do a double take, is to think of the top edge of the XY as pushing a wave front along, and work from there.

Yes, that’s one of the points I’m not sure of.

Initially, I had a mapping working as you describe: the curvature axis (vertical) was bipolar, center was a straight line, and you “pushed” the curve above or below that.

The main problem is that there is two different continuous transformations: curvature, and what I call “torsion”. They both share the same starting and ending point (they go from a curve above the straight line to a curve below the straight line), but pass through different transformations. Curvature is the most intuitive, because it makes sense graphically. But I think that the “torsion” axis, which transform the curve to an “s” shape, is the axis you most probably want to explore soundwise, in a continuous way.

I could map both axis completely to the XY pad:

6179 Autobender_XYPad_layout.png

But then there is three problems:

  • The lower half of the pad is the mirror of the upper one, so space is wasted.
  • In the lower half the horizontal axis now behaves in the counter-intuitive direction (right to left when your mouse goes left to right).
  • Same thing for the vertical axis in the right half (the curve goes upward when your mouse goes downward).

To avoid wasting space, I decided to use only one half of the full mapping, and I chose the one that I thought was important to explore continuously (torsion). I think the choice between “curved above” and “curved below” is usually a one-off decision, one that you don’t absolutely need to explore continuously.

I think this is one case where a graphical representation of the sound lead to expectations that are not necessarily the most musically important.

I’ll try to see if I can find a solution to this dilemma. Your opinions are welcomed!

EDIT: Since I’m not sure my explanations are easy to follow, here’s a temporary version of the tool, with the “full” mapping I describe above:

6180 org.drakmaniso.Autobender_Rns310_v1.100001.xrnx

Got this while having the latest version installed, keybinded the tool, but didn’t run it on any parameter yet, suddenly while switching tracks with the tab key gave;

‘C:\Users\pluge\AppData\Roaming\Renoise\V3.1.0\Scripts\Tools\org.drakmaniso.Autobender.xrnx\main.lua’ failed in one of its notifiers.

The notifier will be disabled to prevent further errors.

Please contact the author (drakmaniso | moussault.laurent@gmail.com) for assistance…

No matching overload found, candidates:

void find_automation(PatternTrack const&,DeviceParameter&,lua_State*)

stack traceback:

[C]: in function ‘find_automation’

.\autobender.lua:64: in function ‘handle_parameter_change’

.\autobender.lua:45: in function <.\autobender.lua:44>

EDIT: Since I’m not sure my explanations are easy to follow, here’s a temporary version of the tool, with the “full” mapping I describe above:

attachicon.giforg.drakmaniso.Autobender_Rns310_v1.100001.xrnx

Thanks for the example. Yes I can see that the official version is more friendly than this one!

Look forward to any new ideas you may come up with, but still a useful tool in it`s current action!

I’ve just released version 1.2, which fix the “crash when the device is deleted” issue, and also the keybinding issue reported by Djeroek.

6191 org.drakmaniso.Autobender_Rns310_v1.2.xrnx

It also changes the layout of the XY pad, to something that should be more intuitive.

The neutral position for curvature is now at center, and you push the curve upward or downward with a vertical movement. What is slightly less intuitive is the horizontal movement, since it has a slightly different effects if you are above or below the curve: in both case it applies “torsion” (i.e. transform into an s-shape), but with two different kind of symmetry. So there is now a completely new range of s-shapes accessible (rotated by 90 degrees), that are probably less natural sounding but still useful enough to include.

The layout is still not perfect, but I’ve come to the conclusion that the ideal layout would require a circular pad. Unfortunately I don’t think it’s possible to restrain the cursor in a disk on Renoise XY pad, so I could not experiment with that.

Thanks for this tool!

I found a small problem: autobender.lua attempts to require AutobenderWindow.lua, but the file is called autobenderwindow.lua.

I’m using Linux, so file case matters.

Renaming it to have uppercase A and W fixed the error so I can use the tool.

I found a small problem: autobender.lua attempts to require AutobenderWindow.lua, but the file is called autobenderwindow.lua.

I’m using Linux, so file case matters.

Ooops. I’ll fix this in the next release. Thanks for the report!

I’ve released a new version:

6216 org.drakmaniso.Autobender_Rns310_v1.3.xrnx

It fixes a filename case issue under Linux, and also add the ability to lock the currently selected range. Once an Autobender window is locked, you can change the selection anyway you want, Autobender will continue to operate on the old selection. You can now open another Autobender window to work on a different part of the automation curve at the same time.

‘C:\Users\XXX\AppData\Roaming\Renoise\V3.1.0\Scripts\Tools\org.drakmaniso.Autobender.xrnx\main.lua’ failed in one of its notifiers.
The notifier will be disabled to prevent further errors.

Please contact the author (drakmaniso | moussault.laurent@gmail.com) for assistance…

.\autobender.lua:213: attempt to compare two nil values
stack traceback:
.\autobender.lua:213: in function ‘update_automation’
.\autobender.lua:30: in function <.\autobender.lua:28>