Loops recorded by midi sync

Hey all,

I’m new to Norns + Grid, and loving it so far.

I’ve been on the Octatrack since 2014 and last year, on the Blackbox (that one’s still around, I see myself working the BBox into my workflow as I’ve learned the Norns + Grid well enough). A big deal for me is synced recordings through midi, where I for example build a loop somewhere - in a drum machine, a synth or whatnot - and launch recording from the Octatrack or Blackbox through midi sync, allowing me to create perfect start and end points. The Blackbox does this best, though the Octatrack is not bad, either.

One thing that I find missing on Norns as a platform, and I’m not finding it in any of the scripts I’ve tried either, is something similar to this.

For example - I got a great loop going in Awake. I want to record a perfect start and end point for this, within the Norns environment. Tape, however, seems to work just like a … well, tape :slight_smile: it records when I press Start, it stops when I press Stop. Should I want to use this loop in say Reels, I need to trim it accordingly if perfect timing is a thing for me.

The same seems to be true for scripts that allow for their own internal recording, such as Takt and Reels. While they record or sample just fine, I can’t tell it to start at a precise trigger and / or end at one. I need to work with them old school style, trim them as the scripts allow, and deal with it.

Now, I’m fine with this and don’t consider this an issue. I’m posting this here because -

Am I understanding this right? In general, synced recording to Tape for the purpose of perfect start and end points isn’t a thing?

And in general, scripts don’t support this but lean more towards improvisation, jamming and such? Note that I’m new and still exploring, so I’m well aware my knowledge and skills on what’s out there, is on a rookie level, at best.

Let’s assume I had some developer skills. Is there support for such an implementation out there? And it’s more a matter of this being a feature that people just aren’t all that into, when it comes to Norns, but it could be done if one set their mind to it?

Thanks for your time and patience with New Guy (being me, that is). All good, take care and stay safe.

7 Likes

Maybe this is what you’re looking for?

1 Like

Hey, thanks. I got Sam, I really like it, but I haven’t found a way for it to start recordings on sync. Though I do agree, it’s easy enough to trim the results.

I guess, the more I think about it, synced recording to Tape is what I’d really want. Tell Tape to start at the next 1/4, record for eight bars and then stop, kind of.

That’d mean that from any script I use, no matter which one, I can record results with perfect start and end points. Very useful if I do funky loops in Foulplay or Vials, Animator or whatnot.

As I said, I’m cool with this not being the case, it’s just me being damaged from synced recording, Octatrack and Blackbox style.

3 Likes

Synced recording is definitely doable, just maybe no ones done it yet. The tools you’d need are all there, midi in/out and recording to tape, and everything is script-able.

1 Like

Okay, thanks, very cool. So conceptually, this should work, then.

I’m entertaining the idea of perhaps writing a general script for the purpose, so that any script that produces sound could use this in their engine, to offer the option for synced recording with start and end points.

Though I’m very new to Norns, but I’ve used Lua on and off since the better part of the early 2000’s. Worked on a few video games that are more or less just engine work with API’s that you apply directly from Lua.

3 Likes

this sounds great! i think the upcoming clock module will help make this wicked easy – the module and full docs will be bundled up with a release happening very soon. what’s nice is that by syncing it to the norns global clock, the function becomes source agnostic – it could be driven by the internal clock, midi, link, or crow!

one way i could see it is as a small bit in PARAMS that maybe has a bar count the user can dial in and a trigger that sets a flag for a clock.sync to execute a record-to-tape command on the next beat. then, it stops after the specified number of beats have passed.

exciting idea, @circuitghost!

7 Likes

adding clock sync quantization to TAPE rec would be quite trivial indeed. as always, the UI is the challenge. cool idea!

4 Likes

I think some of what you say is also more of an aesthetic choice than a technical issue. What I mean is that the community behind most of the scripts is very interested in things like asynchronous looping, which shows in the choices being made for some of the scripts.
This said, I think this could be a great “excuse” to get into the coding part and see if you can do what you want youself. Especially with the clock module @dan_derks is talking about, this should not be too difficult.

1 Like

Yes I think this is true and I’m finding out that leaving my comfort zone as far as recording like this goes, it’s refreshing and frustrating at the same time.

But I’ve made two tracks now, one with Reels and one with Animator, and given the nature of these scripts, I’ve just had to come up with other ideas to make them work for me. And I like what I’ve come up with, so far.

Yep. Very true. Neither style nor substance is most important. It’s when they roll together, you got something great going.

1 Like

Thank you :slight_smile: I’ll look into the clock module, see if I can pick up the vibe. Could be that I’m jumping into this too early, just getting to know the Norns and Grid together better, might be an idea first. With this said, I’m producing tracks with them now, so it’s going somewhere, faster than I expected.

2 Likes

Glad you made it over here @circuitghost. This is my preferred way of sampling as well - I’ve got a basic app that would cover this specced out, but I’m still getting my feet wet with writing some basic apps. Excited to see what you come up with and once I get into this, let’s use this thread as a place to breed ideas!

2 Likes

Where are these UI challenges usually discussed/prototyped? I would love to help out or at very least lurk :slight_smile:

Hey, very cool to see you here as well :slight_smile: I’m glad we live in a small world.

Yeah, let’s trade ideas once we get to it. Which in my case, might take some time. I’ve started dabbling with tutorial scripts now and realise, writing Lua for Norns isn’t quite like writing Lua for some Xbox game or other :slight_smile:

Yes I was also wondering why there isn’t yet a synchronous looping script for norns, and wanted to make my own soon… Welcome to lines/norns and count me in if you need a helping hand!

3 Likes

Thank you :slight_smile: I’m not even sure I’m ready to venture into this part of the Norns world yet, so we’ll see. Still learning to make music with it :slight_smile:

i gotta chime in because i’m directly responsible for the half baked hot mess that is the TAPE subsystem.

(its QOL rewrite is a perpetually back-burner issue because we never intended to make a DAW on norns. {many thanks to @widdly for the recent bandaids!} )

the biggest caveat is: if you want the tightest possible timing for the start of capture, you should have already issued audio:tape_record_open(). think of this as “arming” the recording. (it performs tasks that are not realtime-safe, like opening a file pointer and, iirc, allocating a streaming buffer.)

anyways, if i needed to implement syncd recording on a time budget i would take a super quick caveman approach.

(folllowing code is not tested, just for ideation)

  1. make some parameters in the script or library. touching parameter A arms recording, touching param B starts recording, param C stops recording.
params:add({ name="arm", type="trigger", action=function() 
   audio.tape_record_open('capture.wav')
end })

params:add({ name="start", type="trigger", action=audio.tape_record_start })

params:add({ name="stop", type="trigger", action=audio.tape_record_stop })

(here, also: add more stuff to action functions to update GUI or whatever. assuming you might also want to trigger arm/start/stop from non-MIDI events, break those functions out in the script.

  1. just use MIDI learn in the parameter mapping menu to assign CCs.

if you need to trigger on some other kind of message (noteon, song start), then you need to add those midi handlers explicitly instead of using midi-learn. but this is also pretty simple and should be easy to figure out from looking at the system API docs and other code.

9 Likes

Whoa, thanks. Doesn’t look impossible when you line it out like that. Thank you for sharing this.

2 Likes