Norns: scripting



You might also take a look at nano instead of vim. It’s not as cryptic.

man nano from your command line

There’s probably a way to watch the maiden output on the command line, but I don’t know the incantations for that one.


vim is my goto editor, so I’m using the same approach. here are a few random vim thoughts.

I could go on forever. the best advice I can give is to learn as you go. whenever something feels inefficient, that’s probably a good sign that you can learn a vim command to make it easier.


the time invested in becoming proficient in a good editor (vim, emacs (although obviously as a vim user I’m duty bound to make jokes about emacs users - it’s contractual in the vim eula) and there are now a few good desktop ones that people swear by) is well worth it.


Don’t forget :syntax on (in vim)


oh yes! there are a lot of good things you can and should add to your .vimrc file in the home directory. here are a few that I find useful(you may want to change tabs from 4 to 2 since it seems to be the lua norm).

colorscheme darkblue
syntax on
set hlsearch " hilite search "
set ic " ignore case "
set nu " line numbers "

filetype plugin indent on
set tabstop=4 " width of a TAB(\t) is set to 4 "
set softtabstop=4 " TAB(\t) inserts 4 spaces when in insert/edit mode "
set shiftwidth=4 " indents have a width of 4 "
set smarttab
set autoindent

" return to last edit position when opening files (you want this!) "
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif


once you’re ssh’d in:

cd norns
./ > /dev/nulll &

running matron without websocket redirection means you can type REPL directly into the terminal (helpful!) but there is no readline (ezra originally made a readline terminal-based maiden prior to the web maiden, but we removed it from the repo… maybe we can revive it)

workflow for script development:

open another terminal, run vim editing scripts in dust. to see changes, save file and use system menu on hardware to simply re-launch (SELECT) the script.


What’s the best approach if I want to load a bunch of short samples to be triggered by grid? (like a grid of one-shots)

Looks like ack allows for 8 samples. To get like 32 or 64 samples, would I need to make a version of ack that supports that many samples, or are those like “voices” in a hardware sampler and I could potentially have many different samples loaded for each voice?


You could have more buffers than voices and provide a command to point a given voice at a an arbitrary buffer - this is simple and oefficient in SC but you gotta worry about buffer boundaries I guess.

Alternatively you could load your multiple samples into one large buffer and skip around in it


any special scripting necessary to get param midi learn working with a particular script? or any stuff that breaks it? a few folks have reported that they can’t map any of the params except volume in cranes :frowning:


parameter mapping is currently limited to Control param types.

working on a big update for all param types, along with range scaling and rotary encoder support

(also fyi new standalone softcut is amazinggg)


so so so stoked!

rad to know re: Control params – speeds are all options, so mystery solved, thank you!


Yeah, thanks so much. Looking forward to the update. Not hurry. Got plenty to keep me busy.


Further to my thinking out loud about soundfile editing, saving files and the issue of filenaming: I was wondering if a nice solution to hunting through characters with encoders could be a random filename generator, but instead of characters and numbers it could generate filenames from a big dictionary of random words? I feel like it would be cool to have a lines’ey corpus of strings that could be mushed together to make quick filenames on the go for recordings that are more memorable than R-1239BLAH.wav

Useful or problematic?


The ER-301 module does something similar with naming its custom units. Here is a link to a discussion of their new approach.


i’m with bobb on this one


(blushes in 20 characters)


A middle ground here could be hunting through small (10~) banks of words or symbols with encoders. These could be kind of like tags, and they could be kept specific or sufficiently abstract for people to ascribe meaning to them. That way you can get some amount of information attached to each file, but it’s still relatively quick to name them.


i literally half-implemented something like this for tape name generation!!

my (obviously not original) idea was to have a user text file with dictionary data to pull from, so the creation of the dictionary could simply be defined by the user


Is there a way to only confirm parameter setting by pressing key 3? I’m implementing a save/load function in parameters, and want params:set_action() to only work on key press.


i wrote a performance script for norns this year, here’s a quick demo vid