Hula logo

HulaShell screenshot Hula is a composition tool designed for the creation of algorithmically generated looping textures. Written in Python, and interfacing with the RTcmix synthesis and processing package, Hula supports sampling, synthesis and effects operations within an object-oriented scripting environment. Scripts are written in Python, so they have access to the full range of Python language features.

A graphical user interface, HulaShell, simplifies the business of writing and running Hula scripts. Its editor provides syntax hinting (via tab completion) and highlighting as you type. HulaShell is under active development; plans include graphical facilities for generating attack patterns and function tables.

In a Hula script, you create a player using one of the built-in objects, like Wavetable, RandSkip, or Granulate. You specify an attack pattern in numerical form, set various properties of the player, then tell the player to play its pattern repeatedly. While it plays, the pattern can mutate in several ways, so that no two iterations of a pattern sound exactly alike.

from randskip import *
file = "mysound.aif"
attacks = (0, 0.25, 0.5, 0.75, 1)        # attack pattern (beats)
dur = (0.2, 0.3, 0.4, 0.5)               # note durations
transpose = gain = pan = seed = 0
skipper = RandSkip(attacks, dur, gain, pan, transpose, seed, file)
skipper.set_gain_range(-18, -3)          # in dBFS
skipper.auto_mutate_gains()              # randomly change note gains,
skipper.auto_mutate_pans()               #   panning, and
skipper.auto_mutate_inskips()            #   sample start points = 0, iterations = 12) # play pattern 12 times

Hula and HulaShell run on Linux and Mac OS X.

Hula requires a working installation of RTcmix, with the PYCMIX program.

Latest versions of RTcmix: <>

RTcmix documentation and tutorials at

Download my introduction to Hula, Loop-based Composition with RTcmix and Hula, which appears in Proceedings of the 2004 International Computer Music Conference, pp. 470-4.