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 * set_audio() 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 skipper.play(start = 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: <ftp://presto.music.virginia.edu/pub/rtcmix>RTcmix documentation and tutorials at rtcmix.org.
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.