New tool (3.0, 3.1): Noodletrap

Noodletrap - realtime recording of PC/MIDI Keyboard (notes only)

5312 noodletrap-splash.png

Looks familiar? I modelled it after the existing sample recording dialog in Renoise B)
What you see in the middle are current phrases in the instrument:

Green = Not selected
Yellow = Selected
Red = The “virtual” phrase (where the next recording will appear)

Main features

  • Record notes from MIDI/PC keyboard at any LPB (lines-per-beat) value

  • Recordings are stored as phrases in the instrument

  • Bypass edit mode: your keyboard noodlings can be recorded even when playback is paused

  • Many recording options, ability to split recordings into “takes”, etc.

  • MIDI assignable interface

Keyboard shortcuts (when the dialog is focused)

[Left/Right] Push the arrow keys to select the current phrase
[Delete] Remove the current phrase from the instrument
[Enter] When not recording: prepare for input (“record-arm”). While recording: finalize recording (“stop”)
[Esc]While recording: cancel recording, else toggle edit mode
[Tab]Will take you back and forth between the phrase editor and your “current working space”
(it will try to memorize whatever middle frame you have currently selected, and restore that)

Requirements

Renoise 3.0.1 has an important bugfix in the lua coroutine.

This version is required for Noodletrap to work properly

Download

http://www.renoise.com/tools/noodletrap

Noodletrap 0.5

Uhm, posted a version with some debug crap enabled. Sorry, should work now

looks super cool. I’ve gotta try this when I get home!

So you’re saying I can record MIDI notes without recording other MIDI parameters? I have been looking for a way to do this…

I exceeded the legal phrase size (512) and got this error. The tool’s stop button locks up and I can’t record anything without restarting renoise.

.\classes/NTrap.lua:956: attempt to compare nil with number
stack traceback:
.\classes/NTrap.lua:956: in function ‘_get_virtual_phrase’
.\classes/NTrap.lua:1198: in function ‘_process_recording’
.\classes/NTrap.lua:201: in function ‘stop_recording’
.\classes/NTrapUI.lua:817: in function <.\classes/NTrapUI.lua:808>

I work with a high bpm so this is partially my own doing that it got to 512 so quickly. But a bug is a bug. :stuck_out_tongue:

edit: possible feature request to remedy this: could virtual phrases be split in multiple 512 line chunks, so that we can record indefinitely? (at least for however many notes are on the keyboard ofc)

Nice! This is super slick, having lots of fun with it!

I’ve never managed to work out how to get a tool to record notes played on qwerty keyboard with all the timings intact so will definitely be hacking this.

Also bonus points for a tool that doesn’t require duplex, qwerty keyboard is all the controller I need :badteethslayer:

Introducing Noodletrap

Nice! B)

I get this error when starting Renoise or opening a new song.

std::runtime_error: 'notifier feedback loop detected. do not change values you are listening to within your notifiers.'
stack traceback:
  [C]: ?
  [C]: in function '__newindex'
  [string "do..."]:22: in function <[string "do..."]:11>
  ./classes/NTrapUI.lua:1463: in function '_apply_instrument_from_option'
  ./classes/NTrapUI.lua:903: in function 'update'
  ./classes/NTrapUI.lua:425: in function <./classes/NTrapUI.lua:422>
  [C]: ?
  [C]: in function '__newindex'
  [string "do..."]:22: in function <[string "do..."]:11>
  ./classes/NTrapUI.lua:897: in function 'update'
  ./classes/NTrap.lua:395: in function '_on_idle'
  main.lua:84: in function <main.lua:77>

Thanks for the feedback / bug reports!

The tool’s stop button locks up and I can’t record anything without restarting renoise.

Ouch. Well, whenever a tool locks up you can still restart that particular tool without restarting Renoise. The tool browser has a “disable/enable” tool button that you can use. Should be a bit less painful :slight_smile:

possible feature request to remedy this: could virtual phrases be split in multiple 512 line chunks, so that we can record indefinitely? (at least for however many notes are on the keyboard ofc)

Even better - a split option that we could control while recording, creating phrases on the fly?

Because, splitting automatically could be quite hard to manage (creating a bunch of recordings with 512 lines?).

Edit: all of the ideas below have been implemented since v0.9

Instead, I have been thinking about how it could be an option, much like the existing options:

* Manual split (hit some button/shortcut)

* Automatically split after #number_of_lines

* Automatically split when reaching end of pattern

Last option is perhaps especially interesting, as it would allow you to accompany your song and have each phrase aligned to each pattern’s beginning.

I should add too, that currently the tool is able to sync to the beginning and end of a pattern. It does however rely on idle notifiers, polling the playback progress ~10 times per second. And sometimes, it overshoots a little, depending on the song tempo and several other factors.

However, this is relatively easy to fix but simply something I have not yet gotten around to (on the TODO list).

I’ve never managed to work out how to get a tool to record notes played on qwerty keyboard with all the timings intact so will definitely be hacking this.

Also bonus points for a tool that doesn’t require duplex, qwerty keyboard is all the controller I need :badteethslayer:

Well, you should be aware that the PC keyboard input in this tool is in fact a huge hackaround. Currently, we can’t detect released keys, so what I’m doing is to listen for a pressed key and then “mimic” a pressed key by extending it’s life for as long as the tool is receiving a stream of repeated keys. This is good enough for note-on events, but not exactly precise for note offs. Furthermore, when you are pressing multiple keys, the first released one will release the other ones as well (because the stream of repeated keys temporarily pauses). So, if (note-off) timing really is essential you still need to get a MIDI controller of some kind.

Speaking of Duplex, working on the Keyboard application was actually what inspired me to make this. But yes, I thought it would be useful in other ways too so I decided to make it a standalone tool to begin with. And of course, once we’ve gotten rid of the worst bugs other tool authors are more than welcome to integrate Noodletrap into their own creations as well :slight_smile:

Again, thanks for the feedback.

Thanks danoise! You’re doing awesome work! :slight_smile:

I have gotten rid of the reported bugs, but want to do some feature finetuning before releasing.

First and foremost, it would be great if - when recording synced to beginning / end of pattern, that the resulting phrase would have this exact length.
Right now, it just looks at the recording’s length, which doesn’t work that well with phrases that are supposed to be looped.
Instead, I want to be so that recording in a 48 lines pattern, looping it a couple of times and proceeding into another one with 128 lines would result in a total of (48+48+128) 224 lines.

Also, I think it would be a good thing if a recording with a stop-timer (after X number of beats) would actually “pad” the recording to the recorded length in beats.
So, if you recorded for almost 16 beats and then let it time out, the resulting length could be “padded” to exactly 16 beats. Currently, it’s just using the recording’s length, which could be something like 15.62 beats.

Opening up Renoise just gave me;

‘C:\Users\plugexpert\AppData\Roaming\Renoise\V3.0.1\Scripts\Tools\com.renoise.NoodleTrap.xrnx\main.lua’ failed in one of its notifiers.

Please contact the author (danoise (bjorn@renoise.com)) for assistance…

std::runtime_error: ‘notifier feedback loop detected. do not change values you are listening to within your notifiers.’

stack traceback:

C: in function ‘__newindex’

[string “do…”]:22: in function <[string “do…”]:9>

.\classes/NTrapUI.lua:1463: in function ‘_apply_instrument_from_option’

.\classes/NTrapUI.lua:903: in function ‘update’

.\classes/NTrapUI.lua:425: in function <.\classes/NTrapUI.lua:422>

C: in function ‘__newindex’

[string “do…”]:22: in function <[string “do…”]:9>

.\classes/NTrapUI.lua:897: in function ‘update’

.\classes/NTrap.lua:395: in function ‘_on_idle’

main.lua:84: in function main.lua:77

Clicking away this notice popped up the ‘script is taking to long’ window.

Yes, I was made aware of that bug and a fix will arrive shortly (if all goes well, tonight).

I have also discovered and fixed another bug that affected slow LPB recordings.

It’s supposed to work like this: when you record in a sufficiently slow tempo, the note could end up on the same line.

So, noodletrap detects when the repeating the same note quickly and assign each note to a unique note column.

But, somehow this was a little broken and as a result, slow recordingscould skip notes under certain conditions.

Noodletrap v0.9 is out

Please uninstall the previous version before installing this one

Fixed all the known bugs, had a blast recording my new softsynth this evening :lol:

Also, the new “split” feature is very useful for creating multiple takes

IMPORTANT: thisrelease is using lua coroutines to reduce CPU usage,

Therefore, it is NOT recommended to use Renoise 3.0 (please update to 3.0.1)

Noodletrap v0.91 has arrived

A few bug fixes and a couple of new features.

+ MIDI Assignable record buttons
+ When using timed recording mode "stop after note --> beats" + "start atfirst incoming note", automatically prepare for new recording after having finished one.
FIXME When basing the recording’s length of an existing phrase, the result would become one line longer
FIXME When another instrument is loaded on top of (replacing) the working instrument, selecting a phrase could throw an error

MIDI assignable buttons should be pretty self-explanatory, but it’s worth pointing out that noodletrap expects a “trigger” (not a toggle) mapping. You can use toggling buttons, but you might need to press twice…to make use of them, first press CTRL/CMD+M to bring up the MIDI mapping dialog

The second feature is nothing but a little tweak to the existing functionality…

Yesterday, I was recording a set of standalone chords using the “start recording when first note arrives” (so notes are at the very start of the phrase), and with an automatic timeout (the “stop after note --> beats” option).

But I found it a bit annoying having to constantly prepare for a new recording (it means having to remove your hand from the keyboard!!), so I made the combination of these two start/stop options a special case that will automatically prepare for a new recording after each take.

This is amazing tool but i cant figure out how to record mono (oneline phrase).
Even if i just pressing just one one on the pc keyboard it creates multiple lines (usually 4 of them).

This is amazing tool but i cant figure out how to record mono (oneline phrase).
Even if i just pressing just one one on the pc keyboard it creates multiple lines (usually 4 of them).

I guess one possible configuration would be to start record when a note is received, with a fixed length of one line?

Or, do you mean recording into a single column… you mention both columns and lines.

In case of monophone, it should respect the mono setting of the instrument. If not, this is a bug.

I am sorry i meant mono setting (one collumn) of course…

and it doesnt respect it i have feeling that it doesnt respect quantization also.

would be great if it can be selected in your dialog both.

Ok… I should have started using this way sooner. This is probably the most useful tool I’ve ever installed.

1 Like

So mono recording wont be possible?

btw. noodletrap is the only tool that can be influenced by the other tools, if i install akaizer i have to reinstall noodletrap because it is blank.