Twine: random granulator

This is awesome! Having a blast granulating some Casio SK-1 stuff I recorded on Norns Tape, then re-recording that to Tape, and so forth and so on… Who needs Beads when you’ve got this!

5 Likes

i like this simple+powerful norns workflow around twine: record two snippets onto tape with mx.samples on two different instruments. i then load both into twine and “perform them” (e.g. memorize general seek positions that i like and move between them) while recording to tape. i then playback recording and add very choppy kolor drums on top while recording that to tape.

here’s an example (video before adding drums, but audio with drums added):

i’m totally en-twined (ha).

here are original snippets i use:

23 Likes

I love hearing the samples people use. I love seeing the workflow, but hearing the ingredients is so helpful to me as I learn these processes and techniques - thank you!

4 Likes

Where do I find this? I have Glut already, but can’t find Twine anywhere in Maiden.

@xcc Try clicking the refresh icon next to “community” to fetch the latest list of available community scripts!

Oh wow I’m a maroon. I was just refreshing the base. Thanks!

Bit of a general norns question I guess but is it possible to map two things to the same midi slider? I had the idea to map the volume of both channel to one control with the midi range reversed for the 2nd, to make a crossfader of sorts, but can’t persuade it to do so

1 Like

Haha I also felt like having them “in relation” with each other gives great effects. And also when they have the exact same value, right? One following another

not yet! request has been logged, though :slight_smile: PARAMETERS: mapping enhancement springboards · Issue #1248 · monome/norns · GitHub

5 Likes

Thanks, in The meantime two neighboring sliders with one inverted will have to do :slight_smile:

EDIT: that kind of doesn’t work of course because it’s linear? and you get a volume dip

1 Like

I would love to modulate the seek with an LFO. Please make this happen! My fingers get tired from turning the encoders. lol.

4 Likes

Just want to say thank you for creating Twine. It’s such an immediate and inspiring script.

I was messing with a flute sample and a string sample that I made using Kontakt libraries:


And those became these quite easily (found some good values, and then played the encoders)


5 Likes

It’s…perfect! Thank you😊

1 Like

first noiz exploration with Twine.
really dig this script!

this is last night’s session using Twine, the new code manifistation by @infinitedigits Granchild capturing some of the noiz with live processing and Jala by @ulfster controlling a Motorsynth.

2 Likes

https://www.instagram.com/p/CLq0NGrhtYL/?utm_source=ig_web_copy_link

Another Twine Jam. I love it.

Once I’m grid-enabled I’d love to be able to “bookmark” particular locations, or sequence particular locations to make something musical. Using the encoders to scrub is great fun, but i’d love to make something long-form with these sounds. Perhaps Granchild is the one for that?

5 Likes

Is it just me (all updated I believe), but does the on-screen UI not update the seek values when receiving them from MIDI? The setting itself changes as I hear the sound change, but this doesn’t seem to be reflected in the the UI.

Would maybe a call to redraw from each of the the params:set_action functions be the appropriate remedy? That seemed to work when I tested it on a single parameter from

params:set_action(i .. "seek", function(value) engine.seek(i, value / 100); end)

to

params:set_action(i .. "seek", function(value) engine.seek(i, value / 100); redraw(); end)

but I lack the brainspace at the time right now to submit a tested pull request which I would be confident about, sorry.

maybe this is more of a basic norns coding question but I’m wondering how I would go about changing the seek parameters to scale through the full range of % rather than it jumping in increments of .5? hoping to get a little more micro…

i know it’s located on lines 47,48

Summary

params:add_taper(i … “seek”, i … " seek", 0, 100, 0, 0, “%”)
params:set_action(i … “seek”, function(value) engine.seek(i, value / 100) end)

any help would be appreciated, ty!

Is it just me (all updated I believe), but does the on-screen UI not update the seek values when receiving them from MIDI?

Ah yeah. Either calling redraw() or creating a UI updating metro would be a good idea to fix this. I’ve been wanting to experiment with the latter, so I’ll give that a shot. Thanks for noticing!

maybe this is more of a basic norns coding question but I’m wondering how I would go about changing the seek parameters to scale through the full range of ms rather than having them change in increments of .5?

Hmm, I think using a custom controlspec instead of add_taper would allow for smaller quantization values…

As for displaying actual ms I’m not sure how to update the range of a spec (min/max would be different with different files). I could be wrong, but I think a finer grained % as shown above is the way to go. The redraw() could always try to convert it to ms for display though (would need to read audio file info and do some math).

Once I’m grid-enabled I’d love to be able to “bookmark” particular locations, or sequence particular locations to make something musical.

Nice, I’ve got a branch experimenting with grid. Hopefully can get it to a releasable spot soon!

3 Likes

ahh sorry, what i meant was percentage not ms, although ms would be great also

this would allow one to smoothly scrub through the sample rather than it jumping .50%

does that make sense ?

I think event-based (redrawing when needed) is preferable and more modern than polling-style (redrawing at an interval) but whatever works and sparks joy :sparkles:

Meanwhile I’ve been having some sweet textures of Twine munging the Free Pack: Sounds from the Polish Radio Experimental Studio | Ableton, plus Kastle 1.5 serving as a strange clock for NTS-1 arpeggiator. Thank you.

2 Likes