New Tool (3.5): TapeDeck

TapeDeck

tapedeck

Shortcuts for audio recording and monitoring.

I record a lot of audio with Renoise. But many things break the flow: switching channels to record a different instrument, selecting the correct monitor track, even naming my recordings.

TapeDeck lets you set up per-track recording settings, and then record into the selected track with a simple command. When you’re done, it names your recording based on the track name and the current date and time. Then it enables autoseek and autofade, which in my experience are useful more often than not.

There is also a monitor-only feature if you just want to insert a temporary Line-In on a given track.

How to record

1. Setup the Sample Recorder

Because TapeDeck cannot rely on built-in functionality for things like channel selection and monitoring(*), workarounds are used that require a specific Sample Recorder configuration.

Open Renoise’s Record New Sample... dialog box and set:

  • Monitor (speaker icon) = off
  • FX chain (dropdown) = No FX
  • Record dry = on
  • Create a new instrument on each take = off
  • Compensate input & output latencies = off

(*) Due to Renoise API limitations.

2. Name your monitor track

Currently, the only way(*) to tell TapeDeck which recording settings to use is to put them in your monitor track’s name. TapeDeck checks the end of the name for a set of options inside [square brackets]. These options are recognized:

  • Channel mode: L = left, R = right, LR = stereo (default)
  • Pattern sync: s = synced, u = unsynced (default)

For example, a track called guitar [Rs] would be recorded using the right input channel with pattern sync enabled.

If a track is missing any of these settings, they’ll be inherited first from parent groups, then from the master track.

(*) A future alternative might be to support custom pattern matching, so that a track with “guitar” in its name always uses the above settings.

3. Go!

Select your track and press the TapeDeck Record New Sample shortcut (or click Record New Sample With TapeDeck in the File menu).

This will start recording immediately with your specified settings, and if pattern sync is enabled, playback will be (re)started from the beginning of the pattern.

How to monitor

If you just want to monitor, perhaps to jam for a bit before recording, TapeDeck can take care of that too: activate the Toggle Monitor command (or click Toggle TapeDeck Monitor in the mixer/device list context menu). This will create a monitor device on the current track, or delete one that’s already there. Note that TapeDeck can only monitor (or record) on one track at a time.

Under the hood

When you activate TapeDeck’s recorder, it does these things:

  • Adds a Line-In device on the selected track
  • Mutes all columns on the track (simply muting the track would not work in all cases)
  • Creates a new instrument (or grabs an empty one)
  • Starts recording

When recording stops, it does these things:

  • Checks whether the instrument’s name has changed (from Renoise setting it post-record)
  • If it has, TapeDeck:
    • Renames the recording
    • Converts the recording to mono if necessary
  • If it hasn’t, TapeDeck assumes the user canceled recording
  • Finally, the Line-In device is deleted and column mute state is restored

Limitations

Renoise gives little scripting control over sample recording. That means TapeDeck is fundamentally a hack, and has some rough spots:

  • TapeDeck currently only handles one kind of recording: non-latency-compensated, “Live Recording Mode” recording with software monitoring. Latency compensation and “MIDI Return Mode” support are avenues for further exploration—they seem possible, but non-trivial given the API limitations.
  • Because TapeDeck needs to handle monitoring itself, it cannot do wet recording.
  • Due to the complexities of recording detection, metronome precount is not currently supported with pattern sync. TapeDeck disables it, then restores the old value when it’s done.
  • For similar reasons, stopping a synced recording immediately stops, rather than waiting for the pattern to end.
  • To undo a TapeDeck recording, you must press undo several times. Given how TapeDeck works, I’m not sure that consolidating into a single undo point is possible.

Also, there are no options for configuration (yet!)

Download (v0.1.0)

7 Likes

glad to see this go live!
maybe good to post a link to these api requests for better control over sample recorder :slight_smile: :

altho:

i’m not sure why this is so?
when i’ve been writing paketti overdub features, the stopping patternsync recording will stop the minute the pattern stops playing - when triggered. did you make it hide the sample recorder dialog? if so, yes it’ll stop recording instead of waiting for recording to stop. maybe a “is_recording timer” could be used that is triggered when pressing the stop shortcut?

1 Like

My code is just listening for song.transport.sample_recording to return false, which seems to happen as soon as the Stop button is pressed, without regard for pattern sync.

I’m curious how your code handles this. I realize I probably could have done it with a fancier timer, but this stuff is fragile enough as it is. (Incidentally, for my work, I prefer the current behavior. But adding an option would be nice.)

hmm. i do think the main difference here is the toggling off of sample recorder dialog. i decided against it, so it will cleanly save the patternsynced sample.

yes, the trouble of “is sample recorder visible? yes. is it recording? no? well, is it actually saving the file? yes, then don’t close it” is not something we can trivially solve. maybe an api solution would help. i mean, i’d love to know a solution.

BUT there might be something like this:

is_visible=yes? is_patternsync=yes? was_it_recording=yes? which pattern line are we at?=patternLength, then wait 3 rows and close dialog.

but feels like this’d be another brittle solution

1 Like

For me, hiding the recorder dialog is important. I want that thing out of my way. And as you say, that kind of guessing game is brittle—any number of things could happen between now and then. I tried to strike a balance between good UI, ease of implementation, and not blowing up in the user’s face when they do something unexpected.

A lot of this stuff will have to be revisited in due time, hopefully with better API support. Thanks for your thoughts.

1 Like

A better reply that my tired brain couldn’t put together last night: TapeDeck must be able to drop everything when you press the Cancel button. There is no way to programatically distinguish between Stop and Cancel. Essentially, if I wait for the pattern to end on Stop, I also have to wait on Cancel—and that would be a terrible UX.