n.b. et al. v0.1

n.b. et al.

Nota Bene is a voice library for Norns.

It’s also the core of a new voice mod ecosystem for Norns.

I got here by writing the part of colorwheel that outputs various voices like Just Friends and w/syn and crow and ansible, and then doing it again for another script, and then realizing that not only did I want to reuse code, I wanted a good library for writing vocies separate from sequencer scripts. This was… almost a year ago now that I started work on that library. It languished behind other projects, but now @zbs is working on a sequencer and kindly agreed to let me whitewash the fence of handling voices, so now the library is working.

So what’s included in this ecosystem so far?

  • nb is the library. You import the library into your script (with a git submodule). It provides:
    • A method to add a voice-selector param to your script. The voice-selector param will allow users to choose any voice, provided by the script or by a mod.
    • A method to ask the voice-selector param for a player, an object that can play notes, and has some modulation abilities.
    • A built-in voice implementation for midi out.
    • A very simple script that shows an example of using the nb library itself.
  • tg is a mod that provides access to nb voices directly from the params menu — it gives voices a trigger and a gate, both as boolean params. I recommend using matrix and either toolkit or the Cyrene mod to trigger them. To install, ;install https://github.com/sixolet/tg
  • nbout is a mod that provides a virtual 17th “midi device” that outputs to nb voices. It acts as an adapter for scripts that don’t use nb directly, so you can quickly make any script that outputs midi support jf, w/syn, crow, etc etc etc. To install, ;install https://github.com/sixolet/nbout, turn on the mod, and restart.
  • nbin was suggested by @zzsnzmn , and rightly so. It allows playing nb voices with an external MIDI controller or sequencer while using a different Norns script. It supports mpe, even.
  • emplaitress is a “pseudo-engine” mod and nb voice provider. It provides four copies of the MI Plaits code accessible in Supercollider and runs in parallel with whatever other engine you are running. It’s what I have spent the most time testing this whole ecosystem with, since right now I am stuck in Omaha with a shield, a grid, and a linnstrument as the sum total of my tiny studio corner. Thanks, Southwest. To install, ;install https://github.com/sixolet/emplaitress, turn on the mod, and restart twice.
  • nb_wsyn is the voice mod to provide access to w/syn for nb scripts. Now tested and minorly bugfixed. To install, ;install https://github.com/sixolet/nb_wsyn, turn on the mod, and restart.
  • nb_jf is the voice mod to provide access to Just Friends for nb scripts. Three voice modes — individual mono n voices (with slew), polysynth, kit, and unison mode. ;install https://github.com/sixolet/nb_jf and turn on and restart.
  • nb_crow Crow v/8 and envelope (not just gates!) ;install https://github.com/sixolet/nb_crow and turn on and restart. Also includes paraphonic voice support.
  • nb_ex Disting ex i2c support through Crow. ;install https://github.com/sixolet/nb_ex.
  • nb_ansible Ansible voices.
  • TxO is TODO
  • More pseudo-engines are TODO

N.B. it’s still the early days with this ecosystem, there is a small chance I will have to make a breaking change. If so I’ll talk to everyone that I know has incorporated nb into a script. I think I got all that out of my system with using it for the example script and the sequencer @zbs or maybe it’s @zbs and I now are building.


See each github repository for documentation.




Wow! This is really impressive, great work :heart:


Amazing work. Thanks so much for all that you have done.


Awesome!!! Thanks @sixolet

1 Like

maybe someone can help me out. I’m getting an error, when i try t add the git to my library: using

git submodule add https://github.com/sixolet/nb.git lib/nb

gives me this error:
not a git repository (or any of the parent directories): .git

i’m at dust/code in my terminal. I tried ssh into my in via sudo and just as a regular user. Both ways give me the same error.

I’m not a programmer, and am barely a competent Norns user, but I had a question about this as well, as I am trying to understand the steps necessary to install this (it appears to be fantastic and incredibly useful!). Do we first need to install the nb library before a script (such as n.Kria) imports it for use? If so, would we install it by typing ;install https://github.com/sixolet/nb.git in Maiden, similar to the way the instructions for the mods listed above are stated?

Thanks in advance!

Ah sorry those instructions assumed a git repository was initialized in the directory.

If you don’t plan to use git to track changes and share your script, or if you’re making a local modification to another script, you can just install nb as if it were a script, and import it from require(“nb/lib/nb”) from the target script.

1 Like

The complicated steps above are only to install it if you’re writing a script — nb itself is a library, and is designed to be included “vendored” in to other scripts. If you just want to use it, nbout or tg mods should include it already. Let me know if you have trouble installing them.


Thank you very much for the clarification!

I just updated the built-in midi out to support multiple voices, and provided a method that the calling script can set the number of voices.


thanks for clearing this up. Got i t all working.


I really like standalone libraries; thanks for making some!

I’m curious to hear how you decided what goes in the library vs a mod. Are there different features that you’re able to access? A structural/conceptual benefit? Something else? I don’t have a firm sense myself, so it’d be interesting to hear another perspective.


Two things influenced the decision to provide midi within nb rather than as a separate mod, and I hope I don’t regret it.

  1. The experience of opening up a script you just downloaded that uses nb. I wanted the default experience to be “You can use it with midi synths” rather than “nothing working until you install a separate mod”.
  2. Midi devices announce their presence in the api, so nb can only present you with midi devices you have connected. On the other hand, I didn’t want to clutter the interface with things like just friends when crow and just friends are so hard to come by. Only install the mods for the gear you have, and you won’t have options for the gear you might covet staring you in the face.

I could have made Emplaitress rather than midi the default, I guess, but that would make it hard to install because of the double-reboot thing and it carries more chance of ugen installation failures.


Cool, so it sounds like mods were a way to make the library more modular. That’s a neat strategy! I had also assumed that a mod setup was a requirement for a parallel engine, so it’s very interesting to hear you say that emplaitress was a possible default. Thanks for the details :+1:


This is great. It would be nice to see output for Er 301 as well.


Want to write it? It’s not a piece of gear I have, so I can’t really, but I can help you to.


@doomglue @sixolet -

last i checked:

crow doesn’t have any premade functions for talking to er-301, so you’d have to use ii.raw. fortunately, 301 only has 2 messages: on TT they’re called SC.TR and SC.CV. So it should be pretty simple once we/you/y’all figure out what those messages are :))

e: just kidding, it is supported, so even easier. thanks @ioflow for the pointer: crow/er301.lua at main · monome/crow · GitHub


Sorry for putting this request forward without any offer to help in any way. I am afraid that all my attempts at “coding” or more precisely impatiently copy/pasting in lua with some hope that it might work were usually more miss than hit and right now my free time is not much. That being said, I am happy to test stuff for sure but totally understand if it is not getting added. Last but not least, thanks for sharing this and other scripts of yours, I really appreciate it. Also, happy new year. :slight_smile:


If it’s any help the latest Awake script has er301 support to check the right code format


Sure. I might try doing that. I only went out of my usual lurker mode as I thought that suggesting this would be super useful for a few people. If I was GitHub and lua savy, I’d just do it and add disting ex and whatever might be there as well. I just think that it would be supercool to have a general mod, adding these outputs/conversions.
I get it that for people with coding experience it all seems super trivial and GitHub and pull requests might be part of your life. I don’t have that. Also my English might be dumb.