ModLoop Tool of doom!

Here is ModLoop tool, which enables a Renoise user to modify the selected sample loop properties dynamically.

Tested on Renoise 3.1.1 and Renoise 3.2.1

Download

v0.33

Featuring:

  • 2 modes of operation, loose and pitch

  • midi mapping with fewer bugs

This is my first tool, so I’m open to any sort of feedback! Please report any bugs you find.

To do:

  • glide option and speed for pitch mode

  • finer control over pitch mode (octaves, cents)

  • ???

I’ve concluded that I won’t be able to do many of the things I was hoping with this tool, but will likely delve deeper into creating a plugin for this purpose in the future.

Ultimately, I was hoping to be able to add sample modulation set items so that loop start and loop end could be modulated with all of the existing options… right now being able to midi map the parameters sort of takes care of that, if you only intend to modulate the loop points of your currently selected sample in your composition ohmy.png

Looking good, can we dl it somewhere to test-drive?

Of course! I thought I added it as an attachment… Download

(added the link above as well)

Of course! I thought I added it as an attachment… Download

(added the link above as well)

Cool,

opened up the tool on a multi-sampled instrument, adjusted the sliders in the gui and nothing happened (probably misuse on my part), deleted the instrument, closed down the gui and opened up the tool again on an empty instrument slot and got this;

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

Please contact the author (artaslove [bonafide@martica.org]) for assistance…

main.lua:246: attempt to index global ‘selected_sample’ (a nil value)

stack traceback:

main.lua:246: in function ‘init_tool’

main.lua:433: in function main.lua:432

will play around some more.

Thank you I don’t test if selected_sample is nil… I’ll fix that soon. Also, the main loop only does something if the song is playing. I should have mentioned that. I guess that makes “Start” a little misleading…

I won’t be back in front of my Renoise system for a few hours.

the main loop only does something if the song is playing. I should have mentioned that.

Thanks! Thought it wasn’t working, this is great! B)

Wish it would be possible to be able to use renoise’s native render to sample in combination with this, of course the render to sample shortcut works and a sample is created, but without the creative mangling your tool creates when a pattern is running, just a static loop.

Awesome! More updates soon. If you want to play around without the song playing, just change

while rsong.transport.playing do

to

while true do

in main.lua … I’ll do it later, and take care of nil selected_sample … and more :slight_smile:

Now that I think about it, the reason I wanted the song to be playing is an artifact left over from trying to obtain the loop pitch from the last note in the sequence, which I ended up abandoning because it’s pretty silly. If you want that behavior you can just set the pitch of the loop to the base note of the sample and trigger the sample with notes as usual…

Thats exactly what i am missing till now! together with something like that you can do some part of the mangling yourself, so let the loop become bigger and smaller the way I want it :wink:

But for the rest, its an awesome tool! I think i will definitely use it more! instead of this 5 minutes testing on my way out

Thanks! Thought it wasn’t working, this is great! cool.png

Wish it would be possible to be able to use renoise’s native render to sample in combination with this, of course the render to sample shortcut works and a sample is created, but without the creative mangling your tool creates when a pattern is running, just a static loop.

Great!! I’ve updated the tool so “start” and “stop” always make sense and it won’t launch if there are no selected samples now.

I’ll keep at it. Yes, having the option to only modify one of the loop points if the user wants some manual control also is a potential mode to throw in as well.

Edit: I’ve started the version history at v0.1

Assink, I’ve added toggles for the start and end points in loose mode, so you can also manually change the loop points if you want smile.png

Thats exactly what i am missing till now! together with something like that you can do some part of the mangling yourself, so let the loop become bigger and smaller the way I want it :wink:

But for the rest, its an awesome tool! I think i will definitely use it more! instead of this 5 minutes testing on my way out

Ah. Nice! gonna check that out tomorrow :slight_smile:
I kept it opened in my renoise, so i will see it when i wake up :wink:

Assink, I’ve added toggles for the start and end points in loose mode, so you can also manually change the loop points if you want smile.png

I’m glad you didn’t check it out right away, there were bugs :confused:

…now it’s much more sensible though, if you disable control of a loop point and move it somewhere and resume control, it resumes from where you moved the loop point.

Edit: bumped version to v0.12 for clarity

I’ll be more cautious about future releases. I’m very happy that this tool is coming together, I’ve wanted to automate this process for … years. I think my only other previous posts on this forum prior to 2017 were related to changing the sample loop positions with track effects in the sequence.

yesterday i just think about this

Yes I’ve also been thinking about a feature like this for a Long long time already. Finally it’s there! So many thanks for that!
I’ve tested it a bit more, and for so far it works nice!
Gonna keep an eye on this topic :slight_smile:

I’m glad you didn’t check it out right away, there were bugs :confused:

…now it’s much more sensible though, if you disable control of a loop point and move it somewhere and resume control, it resumes from where you moved the loop point.

Edit: bumped version to v0.12 for clarity

I’ll be more cautious about future releases. I’m very happy that this tool is coming together, I’ve wanted to automate this process for … years. I think my only other previous posts on this forum prior to 2017 were related to changing the sample loop positions with track effects in the sequence.

Before I declare version 1.0 I’m going to have to fix all the problems of the parameters potentially being outside the sample properties. Right now there are no checks to see if a sample is smaller than the intended velocity or pitch for example. I put my idea out before working out all the potential issues.

There are some constants related to this, however they are in the tool’s preferences.xml file. If you prefer much higher velocities you can set “maxvelocity” higher (look out for exceeding the sample playback speed though), or if you want more control over lower velocities you could set maxvelocity lower I guess. If you don’t like high pitched sounds in loose mode during collisions you can set “minframes” higher (hopefully that value turns out to be smaller than your sample size). I believe renoise has to be closed in order for changes to the tool’s preferences.xml file to work.

I’ll likely include control of these values soon. It might be handy to use the selected pitch for minframes.

And about that selected pitch… the note displayed really only makes sense if you’re playing the base note of the sample at the time. There is no determination made of the actual pitch involved due to playback speed… yet. :slight_smile:

A few more changes today. Version 0.20 released with better control and the ability to gracefully return to pitch mode from loose mode. Comments, questions, bug reports welcome.

played around with the latest update, opened up a new songfile and got this;

‘C:\Users\pluge\AppData\Roaming\Renoise\V3.1.1\Scripts\Tools\ca.tonyscc.ModLoop.xrnx\main.lua’ failed in one of its notifiers.

The notifier will be disabled to prevent further errors.

Please contact the author (artaslove [bonafide@martica.org]) for assistance…

.\process_slicer.lua:111: std::logic_error: ‘trying to access a nil object of type ‘class RenoiseSong’. the object is not or no longer available.’

stack traceback:

[C]: in function ‘error’

.\process_slicer.lua:111: in function <.\process_slicer.lua:98>

Thanks for testing Djeroek, I’ll try to handle new songs opening up in the next release.

played around with the latest update, opened up a new songfile and got this;

Quick snippet if it helps for closing dialog on new song.

If you just want to reset some variables instead of closing the dialog just attach a relevant function instead of closer(d)

--------------------------------------------    
  --close dialog function ON NEW SONG
  --------------------------------------------
  local function closer(d)
     
    if (d ~= nil) and (d.visible == true) then
      d:close()
    end
     
    -- remove other notifiers here if needed

    --reset global my_dialog to nil again if needed
    my_dialog = nil 

  end

  -- attach notifier to close dialog on load of new song, my_dialog gets passed to closer()
  renoise.tool().app_release_document_observable:add_notifier(closer,my_dialog) 
  -------------------------------------------------------------------------------

Thanks for testing Djeroek

You’re welcome :slight_smile: ,

right now I’m slapping a recorder vst on the particular track I’m modlooping, tweaking the sliders while recording to create .wav files of crazy timestretching/granular-like effects. As stated above, I’d love to be able to use Renoises native render selection to sample in the pattern editor, but as far as I can see, Renoise resets the tool start to stop whenever you try to do this. Could there be a way to circumvent the reset? I see the the gui sliders and buttons can be midi mapped, but not sure how the midi mappings can be recorded inside the pattern editor so I can for example aim the tool to start at line 0. Currently playing around with an instr midi control meta device without any luck yet.

Also got this after closing the tool after midimapping the pitch slider to a controllers knob, and re-opening a new tool window;

‘C:\Users\pluge\AppData\Roaming\Renoise\V3.1.1\Scripts\Tools\ca.tonyscc.ModLoop.xrnx\main.lua’ failed in one of its notifiers.

The notifier will be disabled to prevent further errors.

Please contact the author (artaslove [bonafide@martica.org]) for assistance…

.\process_slicer.lua:111: std::logic_error: ‘ViewBuilder: invalid value for slider: ‘112’. value must be [21 - 107].’

stack traceback:

[C]: in function ‘error’

.\process_slicer.lua:111: in function <.\process_slicer.lua:98>