a semi-generative rhythmic arpeggiator with bendable playheads


tambla affords exploration of polyrhythms and syncopation. it was born out of a love for arpeggiators and the desire to explore what might happen when wandering off strict grid based timing.

patterns consist of four rows. rows have 2-16 triggers with velocity, duration, and chance values per step. holding down a key generates notes at the given pitch with the trigger pattern in the first (top most) row. each subsequent key held, begins generation based on the trigger pattern in next lower row. note generation starts from the current playhead position instead of the beginning of the row ensuring the overall rhythmic structure is maintained unless note based sync it chosen.

the four playheads scanning each row are synchronized to a common clock. individual rows can divide down the clock for linear phasing effects or bending the clock or both. bend values < 1.0 result in the playhead progressing in a logarithmic fashion (fast then slowing down) where as bend values > 1.0 result in exponential progression (slow then speeding up).

tambla aspires to one day provide sequencing of patterns or generative variation so as to provide something to play against while learning/exploring djembe and handpan. areas of immediate interest include expanding performance controls, developing an engine to provide a unique self contained voice, and crow support.

tambla is also a technical experiment. it is built using a high level event processing framework called sky which imagines writing norns scripts in a declarative fashion using chains of high level building blocks that transform events.


  • norns (201029 or later)
  • midi keyboard - for note input, preferably with velocity sensitivity
  • midi controller (encouraged) - for mapping performance parameters to dedicated


  • grid - note input
  • arc - various performance controls

pairs well with

  • multi-channel MIDI-CV converters
  • (one or more) velocity sensitive polyphonic MIDI sound sources
  • delays
  • clock synchronized setups


available in the tambla-docs repository on GitHub.


latest version always available via maiden


over the course of development various experiments were captured along the way. tambla itself is still looking for its voice, it can make music but it is still learning how. the experiments below are just that, norns driving softsynths via midi:


Can’t wait to try this out (and taking a look at the code). Thanks for sharing!

super kewl!

going to pair this up with my RAV drum!

Very interested to try this out! Is a midi keyboard required if Grid is being used for note input?

1 Like

this looks awesome! so many great norns scripts these days :partying_face:


either a MIDI keyboard or a grid can be used, sorry for the confusion!


this is exciting!

thanks @ngwese


i’m curious to see what comes of this. it is daunting to share when there is so many amazing tools being generated out there. it is very easy to stay tinkering in a corner.

using small bend values on one or two tracks brings some nice but subtle interplay between the patterns. …just thinking about this makes me want to add lfos to animate the bend parameters slightly to create a sensation of rushing and dragging.


hi i like the script! i just wanted to sequenz a external synth but no luck. just the internal sound engine response. if i try awake script to midi out synth response. so in that case i do something wrong with ur script :slight_smile:

the main output is either the internal polyperc synth or midi. the default is polyperc. to change where things are routed one has to set the output parameter, see the tambla: i/o part of the docs

note that there are ways to set each row to output to a different destination and/or channel as well.


Thank you for sharing this! Can’t wait to play around and take a closer look at how it all comes together.

every day it becomes less clear to me why I own an OP-1


tambla: rows -> midi out did the trick! realy nice :smiley:

Those sketches sound tasty, can’t wait to give this a try. Nice work.

a small test :
pyramid 4 drone Notes -> Tambla -> Microfreak

i love ur script! :slight_smile: thank you very much!


cool, thanks for sharing!

…there is a lot of potential which i haven’t fully explored by clocking the script from a sequencer and using norns parameter mapping to drive tambla parameters remotely via MIDI in addition to playing live.


This looks amazing!
Can’t wait for crow support and JF over i2c.

1 Like

need a little help, getting a load fail error:

script load: /home/we/dust/code/tambla/tambla.lua


script clear

ERROR (i2c/hp) failed to write
including /home/we/norns/lua/extn/sky/unstable.lua
including /home/we/norns/lua/extn/sky/prelude.lua
using /home/we/norns/lua/extn/sky/core/object.lua
using /home/we/norns/lua/extn/sky/v1/core/event.lua
using /home/we/norns/lua/extn/sky/v1/core/process.lua
using /home/we/norns/lua/extn/sky/v1/device/utility.lua
using /home/we/norns/lua/extn/sky/v1/device/virtual.lua
using /home/we/norns/lua/extn/sky/v1/device/make_note.lua
using /home/we/norns/lua/extn/sky/v1/device/arp.lua
using /home/we/norns/lua/extn/sky/v1/device/switcher.lua
using /home/we/norns/lua/extn/sky/v1/device/transform.lua
using /home/we/dust/code/tambla/lib/device/linn.lua
using /home/we/norns/lua/extn/sky/unstable/io/grid.lua
using /home/we/norns/lua/extn/sky/unstable/io/norns.lua
using /home/we/dust/code/tambla/lib/io/grid.lua
using /home/we/norns/lua/extn/sky/unstable/io/arc.lua
using /home/we/norns/lua/extn/sky/unstable/engine/polyperc.lua
including /home/we/dust/code/tambla/lib/halfsecond.lua
including /home/we/dust/code/tambla/lib/model.lua
including /home/we/dust/code/tambla/lib/pages.lua
using /home/we/norns/lua/extn/sky/unstable/core/page.lua

MISSING INCLUDE: lib/dep/rxi-json/json

SCRIPT ERROR: load fail

/home/we/dust/code/tambla/lib/pages.lua:4: MISSING INCLUDE: lib/dep/rxi-json/json
stack traceback:
/home/we/norns/lua/core/norns.lua:138: in function </home/we/norns/lua/core/norns.lua:138>
[C]: in function ‘error’
/home/we/norns/lua/core/startup.lua:48: in function ‘include’
/home/we/dust/code/tambla/lib/pages.lua:4: in main chunk
[C]: in function ‘dofile’
/home/we/norns/lua/core/startup.lua:42: in function ‘include’
/home/we/dust/code/tambla/tambla.lua:29: in main chunk
[C]: in function ‘dofile’
/home/we/norns/lua/core/script.lua:172: in function </home/we/norns/lua/core/script.lua:172>
[C]: in function ‘xpcall’
/home/we/norns/lua/core/norns.lua:139: in field ‘try’
/home/we/norns/lua/core/script.lua:172: in function ‘core/script.load’
/home/we/norns/lua/core/menu/preview.lua:21: in function ‘core/menu/preview.key’
/home/we/norns/lua/core/menu.lua:139: in function </home/we/norns/lua/core/menu.lua:116>

script clear

ERROR (i2c/hp) failed to write
clock: ignoring resumption of canceled clock (no coroutine)

sorry, my bad - i’m guessing the zip file was used? i just pulled down the link for now. the rxi-json lib is being pulled in as a git submodule which the maiden install will handle but the zip file is missing.

i’ll correct the zip file next chance i get.

i’d recommend deleting the install you have and using maiden


thanks for the help! i was unaware that i needed to refresh the community catalog actually haha. found on maiden now and working

lovely script by the way!

1 Like