Traffic

traffic

edit of @markeats loom for quickly decoupling motifs from their harmonic framework. updated to take advantage of global clock and menu redesign

i was going to wait until i found time to do the Big Redesign to add this to the library, but since there aren’t many scripts using arc on norns yet (and because i have no clue if i will ever be able to find time for the Big Redesign) i am adding it now.

as a computer music person i have always been drawn to sequencers as compositional tools. a standard way for me to write a song usually involves writing or creating an ostinato that i then reharm or recontextualize until it feels like it’s saying something that i agree with. usually this involves a lot of non chord tones, and i would never think of trying to do it in real time. but loom has become one of the most inspiring sequencers i’ve used. so much so that i wanted to try to do more of my compositional process on loom beyond just the initial inspiration.

so that was the goal for this project. i removed a lot of features from loom to condense the screen to one page. and on that page there’s always a way to 1) modulate key without transposing all the notes the same amount (through the circle of 5ths), 2) move the pitches up or down within that key, and 3) record these movements and play them back (have since learned this is called ‘metasequencing’…).

i am not good at coding and it took a long time but i have been really happy with the results!

a year later, the verdict is in. i will never find time for the Big Redesign. please enjoy this functional but nevertheless unfinished realization of personal goal.

Requirements

molly the poly – Molly the Poly

grid (optional but without a grid the sequencer pattern is random generator only)
arc (optional)

Documentation

quickstart:
–turn enc 3 to add/remove notes to a sequence. when you have a sequence you like,
–turn enc 1 to modulate the sequence through the circle of fifths, and/or
–turn enc 2 to transpose the sequence up/down within the current scale. when you hear some chords in an order you like,
– tap key 3 to turn on pattern recording, perform the key changes you like, then hit key 3 again.
–???
–song

other features:
key 2 toggles major/minor. if you hold key 2 it becomes shift.
shift + encoder 2 changes the amount encoder 2 moves per turn up to an octave.
shift + encoder 3 tweaks how the notes/triggers on loom interact.
stationary: normal loom
phasing: triggers move slower than notes
stationary: triggers don’t move
road rage: triggers are angry

known issues:
–pattern recording is not integrated with the new clock at all. unfortunately it is unlikely that i will be able to wrap my brain around fixing this.

Download

v1.2.0 - https://github.com/ypxk/traffic/archive/master.zip

github: https://github.com/ypxk/traffic

25 Likes

I am really digging this, thanks @ypxkap!

3 Likes

other two arc knobs:

I vote for controlling sound parameters. It would be neat if it’s assignable as well.
:slight_smile:

1 Like

not assignable but they should be working as of like 12 hours ago if you redownload!

they are pretty random though:
#3 controls adsr of env 2. counter clockwise more percussive, clockwise for more pad
#4 controls filter cutoff, resonance, env 1 attack/decay, filter tracking. counterclockwise for more percussive, clockwise for more brightness

i agree assignable would be good, but personally i don’t get enough utility out of just two parameters being mapped 1:1, there are too many parameters and sweet spots to just use cutoff/resonance or whatever. in my opinion the instrument rack mapping system in ableton is the gold standard, where more than one param can be assigned to a knob and the min/max value of the param can be set for each one and not for each knob.

i have no clue how to do that though.

but if you/anyone has ideas of stuff they’d want mapped to the arc other than what i put in here i could make some options as a meta param

1 Like

AWESOME!!!

downloading tonight!

thanks!!!

1 Like

small fix, midi clock in and clock out should now be working. i should have done it sooner, i did not actually realize how much fun midi sync is. sorry for the noise, here’s a video for the trouble.

4 Likes

(despite its decrepit, amateury code) i got this thing switched over to the new clock thanks to @dan_derksexcellent guide.

that was all i was planning to do since i have almost completely forgotten everything i know about scripting over the past busy year, but link support is such a great addition to norns! once i got it working, i had to add a couple more quality of life changes.

the main one is sync offset, a trigger in params that delays the sequence by 1 of the present step length. this is helpful because loom (the sequencer this is based on) by design has no concept of “measures”. this is part of the appeal—defining a note’s tempo only in relation to the tempo of other notes creates a lot of possibilities for unexpectedly deep/catchy grooves. but when you are driving a synth with loom and playing with a drum sequence also on link somewhere else, you at some point will discover that what you’re hearing as the downbeat of the pattern is actually the second 16th note of the third beat of measure 2. when that happens, just mash sync offset until the groove is landing in the pocket!

also, the params page is overhauled to include the new param group options. that’s it.

so thankful to everyone who put in all the work to get these things in. to anyone on the fence about scripting, i cannot overstate how little i know about any of this. that i could knock out all these changes in a single sunday evening after not thinking about this for literally an entire year is objectively insane.

here’s a pretty hard to follow video demonstration of the link workflow. traffic on norns is sending midi out to the OPZ, which is sending midi note data to ableton (basically a fancy midi bluetooth dongle so i don’t have to have a cord running to my laptop).

9 Likes

just a small note - I think the Output setting might be mislabeled
Audio + MIDI gives just Audio
Audio just gives you MIDI
MIDI just gives you MIDI

is there anyone still keeping eye on this who might be able to fix that?
ty

1 Like

hey there!

it looks like an easy fix, just changing a few numbers in a single function.

we can see the intended ouput options on line 37:

options.OUTPUT = {"Audio + MIDI", "Audio", "MIDI"}

  1. audio + midi
  2. audio only
  3. midi only

the old note_on makes audio on 1/3, and midi on 2/3 which doesn’t match up with the options above. so, we just need to match up the number/index of the options in the note_on function on line 647.

the new note_on uses 1/2 for audio, and 1/3 for midi, and looks like this:

local function note_on(note_num)
  
  local min_vel, max_vel = params:get("min_velocity"), params:get("max_velocity")
  if min_vel > max_vel then
    max_vel = min_vel
  end
  local note_midi_vel = math.random(min_vel, max_vel)
  
  -- print("note_on", note_num, note_midi_vel)
  
  -- Audio engine out
  if params:get("output") == 1 or params:get("output") == 2 then
    engine.noteOn(note_num, MusicUtil.note_num_to_freq(note_num), note_midi_vel / 127)
  end
  
  -- MIDI out
  if (params:get("output") == 1 or params:get("output") == 3) then
    midi_out_device:note_on(note_num, note_midi_vel, midi_out_channel)
  end
  
end

i just made a PR to fix this. :cowboy_hat_face:

3 Likes

Oh great! thank you
is this (creation of a PR) something I needed to do instead or are you asking me to make the fix that you have described?

i’ve already made the PR. but if you want to fix it yourself, before the PR is merged, you can just copy and paste that new note_on function over your old one. :cowboy_hat_face:

1 Like

nah im patient - i will wait lol
have a nice weekend

1 Like

thank you so much @Justmat, went ahead and merged (no idea when i would have found the time to fix this otherwise)

mind blowing to me people are still finding this and also that i never noticed this issue before :grimacing:. blanket apology for any other not-fun issues in this thing, i’ve since forgotten how it works

2 Likes