Oz Programming Language
Strasheela (since 2003, work in progress)
Strasheela is a highly expressive constraint-based music composition system. The Strasheela user declaratively states a music theory and the computer generates music which complies with this theory. A theory is formulated as a constraint satisfaction problem (CSP) by a set of rules (constraints) applied to a music representation in which some aspects are expressed by variables (unknowns). Music constraint programming is style-independent and is well-suited for highly complex theories (e.g. a fully-fledged theory of harmony). User-interface is the programming language Oz. The results can be output into various formats including MIDI, Csound, and Lilypond.
A range of extensions have been developed for Strasheela; many of them model musical concepts and theories. For example, there exists a comprehensive harmony model that is suitable for a wide range of styles including microtonal music, a model for controlling musical texture (based on ideas by Wallace Berry), a model for musical rhythm that controls musical accents on various levels (also based on ideas by Wallace Berry), a meter model, and several models for musical form and motifs.
Emacs is a very powerful text editor, and Org mode is an Emacs mode for fast and effective authoring of structured text documents, which can be exported into various formats, including HTML and PDF. Org-babel extends Org-mode with the ability to execute source code of various programming languages directly within your documents. Org-babel-Fomus adds support for the music notation language of Fomus to Org-babel. Org-babel-Fomus is distributed with Org mode itself (under contrib/babel/langs).
ManuScript Language of Music Notation Software Sibelius
The tuning system 31-tone equal temperament can be notated with standard accidentals plus quartertone accidentals, and this temperament can therefore be notated in standard notation software like Sibelius. This script additionally adds microtonal playback for music in this temperament, so that Sibelius can be used for both notation and playback of polyphonic music in this temperament. Microtuner-31TET depends on my software CC-Microtuning (see below).
Music Notation Software Lilypond
Scripting Language of Sampler Kontakt
This script dynamically changes the tuning of the Kontakt sampler via MIDI continuous controller messages. In contrast to MIDI pitch bend messages, which always change the tuning of all tones played on its MIDI channel, this script allows to individually tune each of the12 pitch classes (C, C#, D ...) on the fly, and that way allows for great microtonal flexibility using a single MIDI channel. Multiple channels are thus preserved for playing different sounds (e.g., different instruments), as originally intended.
Spatializer implements the room in a room spatialization model (F. Richard Moore). In this model, the loudspeakers are interpreted as holes in a virtual inner room, through which sounds radiate from a virtual outer room. The implementation defines a data type hierarchy of virtual loudspeakers, microphones and twodimensional room characteristics as well as means to place and move loudspeakers and microphones in a room. The software generalises the four channel model of Moore to an arbitrary number of channels in a two dimensional plane.
Score represents an hierarchic score data structure in which the container hierarchy determines the timing of their elements. The data structure is implemented equally in Common Lisp and SuperCollider to allow interaction. The Lisp implementation can express Tao scores nested in SuperCollider scores (see below).
control-tao allows to generate and transform a script for the Tao physical modeling sound synthesis program (by Mark Pearson). control-tao offers Lisp equivalents to all tao score constructs and defines higher abstractions for tao score actions. control-tao extends the score representation of Common Music (by Heinrich Taube) to support tao-actions.
func-env uses numeric functions to represent envelopes and defines a rich set of Lisp functions to generate, combine and transform these envelopes.
text-changer changes a text (string or file) as specified by the user in a clause-like manner. The text -- marked by arbitrary but strictly hierarchically nested tags -- is parsed into a respective nested data structure. Change clauses consist of two functions: any element of the parsed data structure matching the key function (a predicate) will be replaced by the result of the action function, applied to this element. The program was used for text format conversion and to generate variations of a template (e.g. generation of HTML pages with the layout of a template HTML file, but with a different content).
Possible applications: format conversion (e.g. LaTeX -> HTML), generation of variations of a template (e.g. generation of HTML pages with the layout of a template HTML file, but with a different content).
draw-tree draws a tree picture of arbitrary Lisp data which are hierarchically nested. Therefore, the program expects functions as arguments which access subtrees, test for terminal nodes etc. The tree layout as well is defined by functional arguments which specify how to draw a node, draw an arc, calculate the node placement etc. Argument sets for various data types as well as tree layouts are predefined. draw-tree redesigns and extends a program by Peter Desain.
seq/sim->cmn converts an abstract score data structure -- representing the timing structure by hierarchically nested sequential and simultaneous containers -- into a call to the program Common Music Notation (by Bill Schottstaedt) to generate a graphical score. The program allows the user to add arbitrary missing information in a clause-like fashion (e.g. splitting music in multiple systems or adding articulation signs). Many layout-settings are already predefined. This web application was created using text-changer and seq/sim->cmn.
arno extends Common Music by the means of constraint programming using Screamer (by J.M. Siskind and D.A. McAllester). Parameters of Common Music elements are declared nondeterministically using finite domains. Constraints restrict parameter values and are expressed as predicate functions.
lisp->gnuplot provides a means to generate 2D and 3D plots of Lisp data by calling the gnuplot program (by Thomas Williams and Colin Kelley et. al.).