splnkr

splnkr is an amplitude and frequency tracking sampler/sequencer/effects processor with a set of 16 grid-controlled bandpass filters for monome norns.


v0.3.1 documentation ← click for a pdf!

twitch tv walkthrough #1 (sampling) ← on vimeo

twitch tv walkthrough #1 (sequencing) ← on vimeo


note: the two walkthroughs linked above were recorded with v0.1.0 and as of v0.2.0 the grid controls have changed slightly (i.e. there is a new live sampling selector added to the device type selectors (2nd row of the grid). the pdf document (linked above) has been updated with the new grid controls.

the script’s README on GitHub has additional documentation.

requirements

  • norns
  • 128 key grid (required for sequencing)
  • midi-enabled synth (optional)
  • crow (optional)
  • just friends (optional)
  • w/ (optional)

installation

in maiden:

refresh the community catalog, find splnkr and install it, or

run: ;install https://github.com/jaseknighter/splnkr

then restart to boot the new engine

latest version: v0.2.0 (live sampling)

roadmap

  • fix bugs and usability issues
  • enable sequencing for 64 key grids
  • live sampling
  • rotate sequences and sub-sequences
  • new and improved features requested by the community (tbd)

credit and appreciation

80 Likes

:astonished:

Looks incredible. Can’t wait to dig into this, thanks for posting. Will make a great companion for the newest round of lockdowns.

2 Likes

wowee, the demos are awesome! looking forward to jumping in :sweat_smile:

4 Likes

brilliant! i’m blown away again - can’t wait to dig deeper …

2 Likes

Can’t wait to try this out! Looks amazing

1 Like

Hatts off to you @jaseknighter. This is really something else.

3 Likes

SO AWESOME!!
And so glad to see the release!

This script is so crazy…It’s been hard to keep the secret!
:stuck_out_tongue_closed_eyes::stuck_out_tongue_closed_eyes::stuck_out_tongue_closed_eyes:
This one is a definite “read the manual” and lots of experimentation kind of noiz beast!
:tada::loud_sound::tada:

6 Likes

This looks really awesome @jaseknighter and the videos look great! Really nice work!!

1 Like

just noticed this in the docs:

audio routing

unlike most other norn’s scripts, the splnkr script changes how audio is internally routed. this was done so that softcut audio can be processed by SuperCollider which isn’t the case with the default routing configuration. three routing options are provided in the params menu:

  • in+cut->eng: sends audio in and softcut audio to the supercollider engine
  • in->eng: sends audio in to the supercollider engine
  • cut->eng: sends audio in and softcut audio to the supercollider engine

that is INSANE
so i’m curious, first of all, is splnkr the only script to try this? (softcut into sc)

also
is there a typo in the description? otherwise what’s the difference between in+cut->eng and cut->eng??

13 Likes

@glia, thanks for bringing this typo to my attention.

selecting cut->eng only reroutes softcut audio to the SuperCollider engine. with this setting selected, audio in audio isn’t rerouted. i’ll fix this in the docs.

the only other script i’m aware of that does this sort of rerouting is @infinitedigits stonesoup script mentioned above.

EDIT: the typo is now fixed in the GitHub readme and pdf instructions.

4 Likes

pretty wild

thanks again for the script and all the documentation!
splnkr sounds so special

2 Likes

I can’t stop looking at the how the wood grain on the shield lines up with the table on the left side

9 Likes

Thanks for sharing! I’m trying to use my launchpad as grid with midigrid (I’ve placed the code on global.lua) but is not working, there is a way (or it will be) to use it, or for now it’s just for “real” grid?
Thank you!

3 Likes

i’ll investigate and report back.

EDIT: @asymmetriccut, would you mind sharing the code you placed on global.lua? also, when you added the code and restarted the script, did you see any messages related to midigrid in the maiden message window?

1 Like

@jaseknighter this is so inventive, so clever and so beautiful sounding! I can’t wait to dig in with it and play. you’ve once again created a whole world of music design/manipulation to explore. (and those demo videos are so simultaneously enlightening and lovely sounding!)

4 Likes

Sure :slight_smile:
Here the code that I’ve placed (lib/globals.lua):

local grid = include("midigrid/lib/mg_128")
local g = grid.connect()
--g = grid.connect()

And here the messagge from maiden window:

norns.script.load(“code/splnkr/splnkr.lua”)

# script clear

# script load: /home/we/dust/code/splnkr/splnkr.lua

including /home/we/dust/code/splnkr/lib/includes.lua

including /home/we/dust/code/splnkr/lib/globals.lua

including /home/we/dust/code/midigrid/lib/mg_128.lua

including /home/we/dust/code/midigrid/lib/midigrid.lua

including /home/we/dust/code/midigrid/lib/vgrid.lua

including /home/we/dust/code/midigrid/lib/supported_devices.lua

vgrid init with layout: 128

3 core midi devices

Scanning for supported midigrid devices:

virtual – Not supported

Arturia MicroFreak – Not supported

launchpad – Supported

mounted_devices

3 launchpad

Loading midi device type:launchpad on midi port 3

including /home/we/dust/code/midigrid/lib/devices/launchpad.lua

including /home/we/dust/code/midigrid/lib/devices/generic_device.lua

Attaching devices:

including /home/we/dust/code/splnkr/lib/grid_filter.lua

including /home/we/dust/code/splnkr/lib/grid_sequencer.lua

including /home/we/dust/code/splnkr/lib/sequencer_controller.lua

including /home/we/dust/code/splnkr/lib/w_slash.lua

including /home/we/dust/code/splnkr/lib/midi_helper.lua

including /home/we/dust/code/flora/lib/ArbitraryGraph.lua

including /home/we/dust/code/splnkr/lib/envelope.lua

including /home/we/dust/code/splnkr/lib/polling.lua

including /home/we/dust/code/splnkr/lib/externals.lua

including /home/we/dust/code/splnkr/lib/encoders_and_keys.lua

including /home/we/dust/code/splnkr/lib/controller.lua

including /home/we/dust/code/splnkr/lib/sample_player.lua

including /home/we/dust/code/splnkr/lib/sample_recorder.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/softcut_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/devices_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/devices_midi_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/devices_crow_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/devices_jf_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/devices_w_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/effects_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processors/time_processor.lua

including /home/we/dust/code/splnkr/lib/sequin_processor.lua

including /home/we/dust/code/splnkr/lib/Sequin.lua

including /home/we/dust/code/splnkr/lib/Sequinset.lua

including /home/we/dust/code/splnkr/lib/Sequencer.lua

including /home/we/dust/code/splnkr/lib/sequencer_screen.lua

including /home/we/dust/code/splnkr/lib/Cutter.lua

including /home/we/dust/code/splnkr/lib/cut_detector.lua

including /home/we/dust/code/splnkr/lib/save_load.lua

including /home/we/dust/code/splnkr/lib/parameters.lua

including /home/we/dust/code/splnkr/lib/instructions.lua

### SCRIPT ERROR: load fail

/home/we/dust/code/splnkr/splnkr.lua:186: attempt to index a nil value (global ‘g’)

stack traceback:

/home/we/norns/lua/core/norns.lua:145: in metamethod ‘__newindex’

/home/we/dust/code/splnkr/splnkr.lua:186: 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:146: in field ‘try’

/home/we/norns/lua/core/script.lua:192: in function ‘core/script.load’

(…tail calls…)

# script clear

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’

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’

Thanks for your help :slight_smile:

1 Like

I’ve got midigrid working with the standard edit, running two Launchpad mk1 minis.

I put the following line just before g = grid.connect() in the globals.lua file

local grid = util.file_exists(_path.code.."midigrid") and include "midigrid/lib/mg_128" or grid

The issue with your edit is that g needs to be a global value but you’ve made it a local value:

### SCRIPT ERROR: load fail

/home/we/dust/code/splnkr/splnkr.lua:186: attempt to index a nil value (global ‘g’)

If you want to edit other scritps there is a list here of ones that work with midigrid midigrid | norns community

3 Likes

Thank u very much :pray:
No error and my launchpad mk2 is working, but I think I will need two of those!
I will try to figure out, how is is works.

Thanks again :slight_smile:

3 Likes

This looks amazing. Can’t wait to try once I receive my Norns

2 Likes

many, many thanks to everyone who has posted such kind words about the splnkr script. i hope you and everyone who plays with the script has a good experience with it. i’ll do my best to address any bugs and usability issues that appear.

i’m happy to hear you were able to get your launchpad working (thanks @edrapley for the assistance!), but i’m not sure how much use you will get out of it with just 64 keys. i will try to get the script working for 64 key grid devices sooner rather than later.

as a side note, if you edit your long post above, you’ll see an option to hide code under the settings icon in the top right corner of the edit menu. that way, folks won’t have to scroll through all the code when reading through this thread.

:heart:

7 Likes