A Composer's Amanuensis for the Web

This paper describes MIDI composition software that facilitates a transformative algorithmic method. After a brief discussion of the compositional model and objectives, these tools are examined in detail and their operations explicated by way of an extended musical example. The paper ends with a discussion of the Internet as a means to store the software’s output, and to foster exchange among composers using the software. 1. Introductory Notes This paper begins with a description of a collection of MIDI software tools that facilitate a generative algorithmic compositional method based on principles of musical variation or transformation (Rowe 1993, Winkler 1998). After a brief discussion of a compositional model and objectives, the two principle of these tools will be examined in detail: a data structure for an abstract representation of a theme or ‘musical object’ and a template for composing variations (or transformations) upon musical input. These tools are written in the graphical programming language Max, and are presented as an application within the frame of a Max ‘patcher. ’ In the second section of this paper, the musical utility and operations of this method will be examined through a short musical example. Seven transformations (variations) on a musical object show the design of transformative functions and their musical results. This section will conclude with a discussion of means provided for the combination of these resulting transformations. In conjunction with a standard web browser, musical objects and transformations may be stored independent of the original Max ‘patch,’ as part of a database on an Internet-accessible server. The third section of the paper will describe the use of the Internet as a storage medium. 2. The compositional method These tools will allow a composer to build new, consanguineous musical “objects” from existing ones. These objects, the building blocks from which a composition may be built, are the progeny of Pierre Schaeffer's objets musicaux, Varesian 'sound masses' and Ralph Shapey's 'graven images. ' An object, as a self-identical form, has the potential to be altered (varied, embellished, dissected, juxtaposed, overlaid, enlarged, and fragmented) while still retaining its essential, ontological musical identity. These material building blocks are created through a cyclical process of statement and modification/variation, and are then combined into a larger form. Within the scope of operations of this algorithmic environment, musical objects are statements to be shaped and combined to meet the requirements of this larger context, the compositional design, which makes demands upon its component parts. Good fit, a composer’s judgment in light of a “programmatic clarity” of a composition, is a necessary property. Form, or a composition's logical internal constitution, results from clarity in using a compositional language (Alexander 1964). 3. The data structure and transformation engine At the core of this composing method are two principle software tools. A data structure is an object which abstracts a MIDI representation of a musical object into a matrix of parameters for processing, collectively called transformation data. Second, a tranformation engine can be used to design and compute alterations to transformation data, and return a new object. Through the data structure object, MIDI input (either in the form of a Standard MIDI file or a live performance) becomes array of events and relationships, the grist for the transformational mill. Transformation data describes the events in an object in terms of two classes of musical parameters, STATIC and DYNAMIC. There are five STATIC classes: PITCH, VELOCITY, GATETIME, RELEASE and POSITION. There are four DYNAMIC classes: ∆PITCH, ∆VELOCITY, ∆GATETIME, and ∆RELEASE. The STATIC parameters are concerned with the measurable musical characteristic of each given event of an object while DYNAMIC parameters measure aspects of the movement between successive events. Pitch and velocity are both notated in CSound’s octave point pitch-class form (Vercoe 1993). Timing information is notated as beats plus parts of beats. Additionally, editable object constants include STEP SIZE, the resolution of the quarter note (default is 480), MIDI CHANNEL (which is initially set according to the original input), and TEMPO. INITIAL PITCH and INITIAL VELOCITY are used as starting points for DYNAMIC calculations. In a single transformation, there are three levels of nested function definitions which are enacted sequentially. A first order transformation definition returns a chosen transformation data parameter altered by an arithmetic expression applied to this specified parameter. Additionally, at this level of transformation, the values for one parameter may be mapped onto another. For example, an object’s ∆PITCH values be converted into VELOCITY information to create dynamic and timbral changes which are analogous to the motions of the object’s interval progression. Second order functions are expressions which use the parameter POSITION as an index. The effect of second order functions increases (or decreases) as a function of the sequential position of events in an object. Finally, third order functions are expressions which can utilize multiple parameters simultaneously. By nesting the first and second order functions within this final superior level, a complex expression may be created. The syntax for third order functions are identical to first order expressions except that whenever there is a first or second order expression modifying a parameter defined in the third order expression, the result of the lower order function are evaluated first and the resultant number becomes the input for the higher order function. At each of these levels, a limiting BIAS may be applied to either the index or to the data itself. Several subsidiary objects support the two discussed above, and round out the functions of the application. Objects are included to convert the data structure back to MIDI (and audible output), support graphical viewing and editing of the variations, create a ‘score’ to control timing for combining individual variations, and direct input from either a live performance or from a sequence stored as a Standard MIDI file. 4. Operation by way of musical example This object, taken from my composition, The Ballad of the Strange Strand, will serve here as the basis for creating a short musical example which will demonstrate this process of transformations. The musical events notated yield the following transformation data: pos pitch vel gate rel ∆pitch ∆vel ∆gate ∆rel RT 1 5.01 5.04 0.360 0/0 2 5.02 6.03 0.059 0 0.01 1.04 -0.301 0 0.360 3 4.03 5.04 0.107 0.060 0.01 -1.01 0.048 0.060 0.119 4 6.04 5.04 0.096 0.012 0.01 0.01 -0.011 -0.048 0.119 5 3.05 5.04 0.082 0.023 0.01 0 -0.014 0.011 0.119 6 7.06 5.04 0.082 0.014 0.01 0 0 -0.009 0.096 7 2.07 5.04 0.289 0.014 0.01 0 0.207 0 0.096 8 6.08 7.06 0.82 -0.194 0.01 2.0 -0.207 -0.208 0.096 9 4.09 5.04 0.047 0.014 0.01 -2.02 -0.035 0.208 0.096 10 5.1 5.04 0.051 0.169 0.01 -0.02 0.004 0.155 0.216 11 4.11 5.04 1.0 0.068 0.01 0 -1.051 -0.101 0.060 12 5.00 4.02 0.191 0 0.01 -1.0 -1.191 -0.068 1.0 The process of building this musical example began with experimentation. This object was used as the basis for creating, through trial and error, a large collection of new but associated objects. They share a common set of transformation data. Each variation is defined by its transformation definitions.