New Tool (3.1) GaussianHumanization

This tool uses the normal distribution to humanize a song by varying the volume, panning, note timing and bpm.

some additional notes:

  • notes can be overridden if they’re too close together or if your note offset settings are real wild, the tool puts notes in new places based on what the gaussian random number is so it’s possible for multiple notes to be placed in the same NoteColumn

  • existing values for volume and panning are respected, if you already have a value there then the tool will won’t do anything to that NoteColumn

  • note offset bounds are optional, if this option is not selected then the lower and upper bounds are the first and last NoteColumn in the song (unless you’re humanizing selection, in that case it’s the first and last NoteColumn of the pattern)

  • the bpm bounds are also optional, if it’s not set then the lower and upper bounds are the minimum and maximum bpms allowed by Renoise

useful reference: https://www.javamex.com/tutorials/random_numbers/gaussian_distribution_2.shtml

com.pandabot.GaussianHumanization.xrnx (17.8 KB)

1 Like

I like the video, gets right to what the tool is about and presents it clearly.

1 Like

I’m Pandafied!!

Very cool, will def. find a use for this tool.

i’m going to use it as well :slight_smile:

maybe in the next track from scratch :slight_smile:

excellent stuff!

Got this notice when entering a value of 0.500 in the bpm value box;

'C:\Users\pluge\AppData\Roaming\Renoise\V3.1.1\Scripts\Tools\com.pandabot.GaussianHumanization.xrnx' failed to execute in one of its menu entry functions.

Please contact the author (pandabot) for assistance…

No matching overload found, candidates:

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

stack traceback:

[C]: in function ‘find_automation’

.\humanizeBpm.lua:47: in function ‘getBpmAutomationParameter’

.\humanizeBpm.lua:68: in function ‘humanizeBpmByLine’

.\humanizeBpm.lua:110: in function ‘humanizeBpmInSong’

.\humanization.lua:11: in function ‘applyHumanizationToSong’

.\humanizeSong.lua:15: in function ‘humanizeSong’

main.lua:18: in function ‘init’

main.lua:8: in function main.lua:8

Ahh okay if there were Send tracks then it was messing up, I wasn’t getting the index of the master track the right way. It should be fixed now

Still get it here with the latest tool version in a song file without sends;

'C:\Users\pluge\AppData\Roaming\Renoise\V3.1.1\Scripts\Tools\com.pandabot.GaussianHumanization.xrnx' failed to execute in one of its menu entry functions.

Please contact the author (pandabot) for assistance…

No matching overload found, candidates:

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

stack traceback:

[C]: in function ‘find_automation’

.\humanizeBpm.lua:48: in function ‘getBpmAutomationParameter’

.\humanizeBpm.lua:69: in function ‘humanizeBpmByLine’

.\humanizeBpm.lua:117: in function ‘humanizeBpmInSong’

.\humanization.lua:11: in function ‘applyHumanizationToSong’

.\humanizeSong.lua:15: in function ‘humanizeSong’

main.lua:18: in function ‘init’

main.lua:8: in function main.lua:8

Ah okay you must have devices in your Master track, I wasn’t getting the index for the MasterTrackVolPan device in the right way either. I think it should work now

Fixed now, awesome :drummer:

Hello @pandabot ,

I have a feature request :smile: . As far as I can see, there is not a way to have this tool work on a selected track right, it always processes all tracks in a song?
Imo it would be great if you could specify which tracks will get processed so you can exclude other tracks, create contrast. For example in a track I’m working on I would just like the snares to be more loose, keep the kick programming in another track more static.

Perhaps have an option in the tool gui when if selected, only the track where the cursor is in the pattern editor will get processed? Would be great, cheers! :sunglasses:

Or, I’m missing something and this can already be done?

edit;

I see through pattern editor mouse drag selections you can process through this tool with a keyboard short cut! Awesome, that will already help a lot. Would still be cool imo if a track selection could also be set through the gui, so it is calculated for the particular track all across the song. Not just the pattern editor selection. Matrix block selection to specify what would get processed would be another cool option :sunglasses: .

Ah yeah that makes sense, if you don’t want to mess with the code you can copy that track over to a new project and then copy it back over after applying the humanizations. If you did want to modify the code it shouldn’t be too hard, just change the outer loop from going over all tracks to just go over the selected tracks. Unfortunately I’m not doing any further work for these renoise scripts, I’m over on reaper now

1 Like

thanks for the info. I can’t code if my life would depend on it :slight_smile: , but if anyone reading this can make this happen that would be cool. I’ll stick with the pattern editor selections and keyboard shortcut for now.

tried running the right click menu option “~apply gaussian humanization to selection” in the pattern editor and got;

"'C:\Users\pluge\AppData\Roaming\Renoise\V3.4.2\Scripts\Tools\com.pandabot.GaussianHumanization.xrnx' failed to execute in one of its menu entry functions.

Please contact the author (pandabot) for assistance…

.\humanizeVolume.lua:72: table index is nil
stack traceback:
.\humanizeVolume.lua:72: in function ‘humanizeVolumeByLine’
.\humanizeVolume.lua:123: in function ‘humanizeVolume’
.\humanizeVolume.lua:140: in function ‘humanizeVolumeInSelection’
.\humanization.lua:17: in function ‘applyHumanizationToSelection’
.\humanizeSelection.lua:6: in function ‘humanizeSelection’
main.lua:51: in function main.lua:47"

fyi this was on a selection in a track within a group.