I’m just starting out on Norns and was wondering if the output of tape playback can be routed through the audio engine of scripts as if it was an input. I suspect the answer is “no” but I thought I’d ask in case I’m missing something obvious.
If not, then is this something that might be considered for a future update or does it pose technical challenges? It would be amazing to, for example, record the output of a script like Awake and then send it into Compass for further mangling. I could imagine lots of happy hours bouncing audio through multiple scripts without ever leaving Norns. (I think such a thing would want to be a toggle-able option because sometimes it’s good to be able to have the tape play alongside another script.)
This has been asked a few times, and the other ask has been softcut -> SC.
Of course we could add these, it is not a technical challenge in itself, but my gut reaction re:usability and efficiency is that once we start adding routes with feedback it starts to seem a bit much. I would want to have controls to completely disable the processing of routes instead of just modulating their levels. I’m not categorically opposed to those features but am not motivated to pursue them, especially when UI plumbing is considered.
So yeah, consider just doing more in SC. Norns tape functionality is extremely simple, and it is only placed at the end of the chain to facilitate capturing stuff.
In particular, I think engines that are just a simple live effect (like Greyhole) would benefit from having a built-in facility to stream from disk in parallel with the ADC input (or to load a whole file to RAM buffer and play from there.) I’d be happy to create a couple simple abstractions / engine utilities in SC to facilitate this. We’re presently overhauling some of the SC Engine stuff and preparing better documentation for it, so maybe that will help things along.
… I dunno. Thinking about it. If I make more specialized level smoothers that latch and disable processing when zeroed, feedback routes could be ok. At the moment we are focused on polishing the components at all those endpoints (more/easier engines, cleaner audio for tape and softcut, more usable tape.) But by “we” I mean mostly me. Iterating on the mixing routines themselves is relatively easy so it would be a nice place for people to consider contributing.
I still think it could be a little gnarly from UX standpoint and lead to nasty surprises to have feedback routes whose controls will necessarily be tucked into a parameter menu, but I suppose the implications are obvious enough.
Btw @SimonKirby I edited the title to make it clearer (to me at least,) hope that is ok
Basic c++ and spending some time looking the MixerClient source, which is neither lengthy nor complicated. I’m happy to answer questions and give pointers, it feels better to do that with engaged participants than it does to simply respond to feature requests.
When I’m not on a phone I can make an issue with some breadcrumbs and covering what I think would be good ways to optimize route processing as the number of routes increases.
Thank you so much for such a clear and detailed answer! It really helps me understand the issues involved. I’m not yet at the point of messing around with existing scripts, but will be there soon I hope! I’m really looking to use a script like Compass to mess with an existing tape - Ideally I’d like to add a simple pre/post toggle for tape.
One thing I didn’t understand by looking at the routing diagram is that it seems like there is a way to get tape into softcut. My current (somewhat limited) understanding is that Compass uses softcut, but I couldn’t figure out how to get it to take the tape input. Is this just a change that needs to be made at the level of the script? Perusing the github discussion makes it seem that way, but I’m not sure exactly how to make that change in the script.
@dan_derks took back a comment but actually i think the gist was valuable: its easy for a softcut-based script to simply load a file into the RAM buffer. And there are plenty of examples of doing this with the filename as a script param &c. (See norns-circle-01 for example.) This seems way nicer for usability compared to futzing with TAPE.
The tape->cut live routing does have the advantage of supporting arbitrarily long soundfiles.
Thank you again (and @dan_derks for his ephemeral comment ) - I can see for many uses, the sound file approach makes sense, but you’re right that streaming from a long tape into a looper style script is what I was thinking about. I’m giving myself a crash course in the softcut studies as we speak and I see it’s trivial to set tape->cut routing with audio.level_tape_cut(level).
I am puzzled by your note about this being in the system AUDIO menu though. It’s not there on mine for some reason.