A random sequencer for ambient soundscapes
History and inspiration
Long before I even called a norns device my own, I stumbled upon Datu Arellanos work (https://www.datuarellano.com/tahigami-music), specifically a MIDI controller, that played in-scale notes at the push of a single button. I really liked the idea and pondered building a custom MIDI controller with an ESP32. It turned out to be more complicated than I had thought, and combined with a lack of time, I put the idea aside to stew awhile.
After norns got my attention and the device finally arrived, it rekindled the initial spark and I started working on it again. It turned out, norns was the perfect framework for what I had in mind, since all the building blocks were neatly in place. During development I strongly leaned on, and took a lot of code from awake and midi-monitor, so thank you very much @tehn and @okyeron !! Without those two projects, Jala would not be anywhere near where it has gotten already. I am still just scratching the surface of what norns can do, but the community contributions already blow my mind and I look forward extending this project.
The name is an amalgamation of my two little children’s names
- Support for mx.samples as an output
- More randomization algorithms for the changing probabilities
- Weights for single notes on scale
- Make remaining relevant parameters configurable
- Add MIDI Capabilites for CC messages
And hopefully a lot of input from this awesome community!
A MIDI-capable device for output is highly recommended, ideally a device with more than one voice (e.g. Arturia Microfreak works fine). Normal audio output is available too, but more for demonstration purposes.
The script starts out in C major scale. On the center grid, you see the notes on the scale, the brightness indicates if they are playing at the moment. The bar below the note name indicates the probabilities for the next note played. After a note is played, its probability gets cut in half and distributed randomly on the other remaining notes. The length of the note is chosen at random between min and max length. If you press K3, playing stops until you release the button, then a note is played immediatelly.
E1 changes the root note, E2 changes the option shortcut you can change, E3 changes its value. All the options are accessible in the parameters page, I put the most important in the shortcut list at the bottom.
Pressing K2 starts the learning-mode. The script now listens to the notes you play on the connected midi in device and displays the fitting scales. E2 lets you select the scale you want, pressing K2 again takes the new scale and starts playing. Until you press K2 a second time, the old scale is played, this can be used for precisely timing the change in scale.
The following options are available at the moment:
- Output: select audio, midi or audio + midi (audio uses the basic PolyPerc engine)
- Step division: How often will the routine be called, 4 means for every quarter note and so on
- Probability: Trig probability for every step. Use this to add more randomness
- Note length min: If a note is played, for how long at least (in steps)
- Note length max: If a note is played, for how long at most (in steps)
- Octaves: How many octaves will be played, the lowest one is always weighed a little more heavily than the higher ones
- Midi in: Use this device to play notes in learning mode
- Midi out: The notes get sent to this device, if the output is set accordingly
Standard norns clock is used. I have not tested if you set it to MIDI.
Intended use (YMMV)
I built this to get some in-tune but still random sounds to lay a foundation for anything ambient, so I generally keep everything very slow. Combining the parameters in different ways can give you very different result. For example, step division of 1 with probability 100% will result in the same number of notes played as step division 4 with 25% probability, but will give you a very different feel. Setting a broad range of note length values will also give you something a little more unpredictable.
As for the sound source, if you use something single-voice it will not be very interesting, polyphonic devices or plugins are preferrable here. Try to experiment with longer attack times and higher glide values, this gives you a nice drony experience. See the video above for a simple example using the Microfreak.