a continuous dynamic melody sequencer for grid+16n
Requirements
grid
16n or other controller
Optional
crow
midi voice
just friends
w/
Roadmap
crow envelope outs
copy and paste sequences
clock multiplication
slides
save sequences
arc support
an engine
visual representation of gate length
sempra
dynamic melody sequencer
what is this?
a dynamic melody sequencer for norns, 16n and a varibright grid 128. there is no engine built in - to hear sound, connect norns to midi, crow, w/syn and/or just friends.
two sequencers run in parallel, each with up to 8 steps. swap out phrases from a shared bank on the fly, edit durations and repeats per step, combine sequences together in modular for awake-style phasing.
how do i use this?
sempra contains a bank of 16 phrases. the 2 identical tracks run in parallel, each one pulling data from one of the 16 available phrases. you can switch out which phrase is routed to which track on the fly with simple key presses.
grid and 16n
place your 16n directly above the grid, so each fader lines up with a grid column.
the top half of the grid controls step duration, from 1 to 4 ticks per step.
the bottom half of the grid controls step trigger behavior. from the bottom up:
off: bypass the step.
single trigger: trigger only when the sequencer advances to this step.
multiple trigger: trigger every time the sequencer ticks while on this step.
hold: holds / ties the gate for the duration of the step.
the 16n fader above sets the pitch for that step.
keys and encoders
k1: shift key
k2: enter selection mode for track 1
k3: enter selection mode for track 2
enc1: gate length for track 1
enc2: change phrase length for track 1
enc3: change phrase lenth for track 2
enc4 (fates only): gate length for track 2
shift functions
enc1: gate length for track 2 (for 3-encoder norns)
enc2: time division for track 1
enc3: time division for track 2
selecting phrases
pressing k2 or k3 opens the selector pane for tracks 1 and 2 respectively. in this mode, the opposite track is covered up by a 4x4 grid of phrases to choose from. pressing any phrase assigns it to the track. when you do, the selector pane will disappear again.
to latch the selector pane, hold shift while selecting a phrase. press k2/k3 to unlatch.
to exit the selector pane without selecting anything, press k2/k3 again, or press the currently selected phrase (much brighter than the others)
phrase are selected immediately when you press them. all changes to the previous phrase are automatically saved and can be returned to instantly at any time.
params
each track has a few params in the norns menu that you can’t access from the main interface.
transpose: transpose the track (not phrase) by x semitones.
output: sets the track output. sempra currently supports crow, w/syn, just friends and midi gear. you can also route a track to transpose another. (not implemented)
Download
v1.0.6 - ;install https://github.com/zjb-s/sempra
this is my first fully-documented, full-release norns script! woohoo! let me know if anything is broken and i’ll fix it asap. PRs and feature requests are more than welcome.
oof, super gorgeous demo + docs – i’m always struck by the playfulness of your performances and it’s absolutely wonderful to recognize it as the foundational energy of sempra. also, such an imaginative and attuned way to pair 16n and grid!!
congratulations on the release, can’t wait to dig in!!
The 16 phrases include all the grid and fader information , the only thing they don’t include is transpose, scale, time division, that kind of thing. Though it would be pretty easy to add that as an option!
Unfortunately my 16n isn’t motorized (yet ) but until then, you can see the fader values on the screen, they’re only overwritten when you move a physical fader
Not working with JF for me. Nothing when I select any of the JF outs. I loaded Awake to make sure crow|JF ii was working and it was. Afterwards Sempra would not load at all (see Matron output). Also, install path does not work. I had to remove everything after sempra/ to get it to install. Looking forward to playing with this more, really looks like a great tool!
# script load: /home/we/dust/code/sempra/sempra.lua
including /home/we/dust/code/sempra/lib/params.lua
### SCRIPT ERROR: load fail
/home/we/norns/lua/core/paramset.lua:423: invalid paramset index: 60
stack traceback:
/home/we/norns/lua/core/norns.lua:146: in function </home/we/norns/lua/core/norns.lua:146>
[C]: in function 'error'
/home/we/norns/lua/core/paramset.lua:423: in function 'core/paramset.lookup_param'
/home/we/norns/lua/core/paramset.lua:327: in function 'core/paramset.get'
/home/we/norns/lua/core/menu/params.lua:62: in upvalue 'build_sub'
/home/we/norns/lua/core/menu/params.lua:649: in field 'rebuild_params'
/home/we/dust/code/sempra/lib/params.lua:169: in main chunk
[C]: in function 'dofile'
/home/we/norns/lua/core/startup.lua:42: in function 'include'
/home/we/dust/code/sempra/sempra.lua:2: in main chunk
[C]: in function 'dofile'
/home/we/norns/lua/core/script.lua:192: in function </home/we/norns/lua/core/script.lua:192>
[C]: in function 'xpcall'
/home/we/norns/lua/core/norns.lua:147: in field 'try'
/home/we/norns/lua/core/script.lua:192: in function 'core/script.load'
/home/we/norns/lua/core/menu/preview.lua:23: in function 'core/menu/preview.key'
/home/we/norns/lua/core/menu.lua:143: in function </home/we/norns/lua/core/menu.lua:120>
# script clear
calling: gridkeys-script-post-cleanup
mod - gridkeys - script post cleanup
mod - gridkeys - TOGGLE_GRID_KEY = false
mod - gridkeys - TOGGLE_GRID_KEY -> NO CHANGE
mod - gridkeys - clear at script stop / pre-start
lua:
/home/we/norns/lua/core/clock.lua:59: bad argument #1 to 'resume' (thread expected)
stack traceback:
[C]: in function 'coroutine.resume'
/home/we/norns/lua/core/clock.lua:59: in function 'core/clock.resume'
Seems to be anytime try and load Sempra after using another script with JF, this time after TVIBURAR. I added the Matron output to my original post. Thanks
I love how bringing in the 16n on top frees up UI on the grid and supports playability. this is honestly the last push I needed to build a 16n between the panels I cut for myself like 3 years ago. it looks like such a joy to play : )
it has exactly the right amount of features too, imo
added automatic 16n fader mapping, thanks @eigen for implementing that and writing the library!
fixed ii voices
fixed gate length controls
@yobink , I can’t reproduce that error, but let me know if you’re still having issues - it’s now working on my end. i made a silly mistake and put TT syntax in my lua without thinking about it (jf.vox vs jf.play_voice)
Had a lot of fun last night with the crow outputs. The 16n implementation is ace. Really easy to get off and running quickly. I was wondering if there could be a way to toggle repeats with ratchets? A division of the rhythm unit instead of a mult of it? Haven’t tried JF again will try it today.