The Phraser program is underpinned by a particular conception of the elementary structure of music. This conception is expressed through three interrelated types of objects: sequence, event, and phrase.
A sequence object is defined as a list of integers, for example [9, 2, 6] which has the following attributes:
- cardinal: a number, for example 12, which constrains the following attribute:
- prime: a unique representation of the interval structure of the sequence, derived as follows: the list of the intervals between the unique, ordered remainders of each sequence element when divided by the cardinal, is rotated such that it is maximally packed to the left, then the intervals are sequentially summed from zero. For the example above this would be [0, 4, 7]. This corresponds to “prime form” in pitch-class-set theory.
- offset: the interval by which the sequence is offset from its prime form, in this case, 2
- order: a list of zero-based indexes expressing the order in which the offset elements of the prime form occur in the sequence. In this case, [2, 0, 1]
- octave: a list of numbers expressing how many octaves above or below 0 each element is. In this case, [0, 0, 0]
An event is defined as a list of zero or more “pitches” (broadly defined as any any instructions about what to play, including, say, percussive timbres) with (so far) the following additional attributes:
- start: when to play relative to an arbitrary time origin
- temperament: (the number of equal steps by which the octave is divided)
- any others I care to add
A phrase is defined as a list of events, and corresponds roughly to a musical bar. Phrases are useful for conveniently grouping events which are related in some way, e.g., they form a rhythmic or melodic figure
Within the Phraser program, events and phrases are created by combining sequences. For example, the pitches used in an event may be the values from the set attribute of a sequence, and a phrase may be formed from a series of such events whose volume is determined by the set values of another sequence, and whose duration may be determined by the steps values of yet another sequence.
Any functions may be used to produce integer lists which are converted to sequences. Any functions may then be used to produce events, and then phrases, from sequences.
As events and phrases are produced further functions display and play the results and produce printable scores.