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.
requirements
norns (201029 or later)
midi keyboard - for note input, preferably with velocity sensitivity
midi controller (encouraged) - for mapping performance parameters to dedicated
controls
optional
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
documentation
available in the tambla-docs repository on GitHub.
download
latest version always available via maiden
sketches
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:
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
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.
…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.
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