# User:Peter M. Armstrong/Algorithms

Free public domain sheet music from IMSLP / Petrucci Music Library

**Three Pre-compositional Algorithms**

- __________________________________________________________________________

*IntLens*: A Quasi-Prismatic Pitch-Class Series Registrator

*Version 1*, 1986 (Pascal)- IntLens octave-complements &/or compounds the intervals of an input pitch-class series in all
- combinations of selection by interval class. The selection cycle iterates for each of six ranges
- of expansion, defined as <starting level for all ICs> to <target level for selected ICs>. These
- are: class to complement, class to compound, class to both; complement to compound, com-
- plement to both; compound to both. Within each range and combination, series registrations
- are calculated separately per mirror form (P,I,R,RI) and coordinate order (X/Y, Y/X). These
- registrations total (48 times (2 to the power of half the octave modulus)). Each is output as a
- pitch series array of signed integers beginning with 0.

*Version 2*, 1988 (Forth)- Generation is expanded to specify for each Version 1 array all multiples within a range of nine
- octaves. The registrations are now examined as simultaneities, i.e., as chromatic saturation
- chords. Output for each is a half-page chart with graph and associated statistics, e.g.:

SIF +1: 2 2 2 0 2 UrPC: 0 5 6 2 4 7 4 1 8 9 3 OD-Base 11 -1: 0 0 1 2 0 IC: 5 1 -4 2 3 3 2 -4 1 5 -3 SIF +1: 2 2 2 0 2 NwPC: 0 5 6 2 4 7 A 1 8 9 3 X/ C*1 O*1 -1: 0 0 1 2 0 IC: 5 1 -4 2 3 3 2 -4 1 5 -3 Prime R:0 TICs : 1 - - 4 - RfrP: A 19 0 13 17 22 28 31 44 26 35 S->T # 9 Rfr1: A-19 13 4 6 6 4 13-19 A Factor 2 | | | | | *---------*---*---*-*---*---*-*---*---*---------* 2 0 3 4 1 5 9 6 7 A 8 Timbre: P: 0 A 13 17 19 22 26 28 31 35 44 Range 44 I: 10 4 4 2 4 4 2 4 4 10 Transp 33 Timbre Int: 2 3 4 5 6 7 8 9 A Occur Freq: 2 6 2 TI: Min-Max 2- A Spread 9 Used 3 > OD: 0 OF: 2- A 5 2 Frame: 9 A 10 11 12 Clusters: 3 4 5 6 7 8 9 A 10 OF : 8 1 OF : [240]

- A separate sort, available also outside the main loop, details relationships among these other-
- wise arbitrarily sequenced registrations. Up to sixteen criteria keys are applied, independently
- ascending or descending and in user-specified priority. Output is a vector-graph cascade with
- a sidebar of key values. The criteria are:

- 1) ExpLevel 5) Frame 9) MinInt 13) MinFreq
- 2) RowNum 6) Gaps>OD 10) MaxInt 14) MaxFreq
- 3) Factor 7) NumClust 11) IntSpread 15) FrqSpread
- 4) Range 8) MaxClust 12) IntsUsed 16) FrqsUsed

- This version was optimized for prime-number octave dimensions through routines incorporated
- from
*SetTrans_P*, below. "AllDeg", one of*IntLens*'s secondary functions, was fully developed - later and separately as
*KRIKOS*, score generator for several pieces of that name. Its algorithm - is described in their scores.
*IntLens 2*has a separate manual. Phil Winsor of UNT included - the package in Summer 1989 curricular materials at National Chiao Tung University, Taiwan.

*Version 3*, 1989 (APL)- Initially a development environment port, producing the first dependable output graphs from
- function SORT, this version expanded IntLens's filing of intermediate data for subsequent
- retrieval by external compositional software.

*Version 4*, 2001 (J)- A final port, more fully absorbing its precursors and in a contemporary APL incarnation, this
- version anticipates its use as an external function with Csound-score building and related
- facilities incorporated from KRIKOS.
- __________________________________________________________________________

*AIR*: All-Interval-Row Generator

- An old utility written in eight screens of Forth. Many fewer screens (or one line of APL) could
- deliver all that the subtitle promises. But its logic extends to emphasize further constraints.
- Quoting the documentation:

- Generate a permutation of the integers modulo-n (pitch classes), such that all
- possible unique successive differences are represented in absolute value (i.e.,
- as interval classes) twice each. If the modulus is even, then signs modifying the
- instances of a given interval class must be opposite; if it is odd, they must be
- the same, but with a final value redundancy. The number of array positions sep-
- arating the members of each interval class pair must be unique for odd moduli
- and nearly so (one exception) for even.

- Three arrays are output per example found: the pitch-class series, its intervals as signed
- classes, and the IC-pair inner position separations.
- __________________________________________________________________________

*SetTrans_P*: Generalized Multiplicative Transform via Prime-only Octave Dimensions

- Otherwise a standard PIRRI-matrix generator, this program assumed any octave mod-
- ulus (from its input-array dimension) and issued separate outputs per coordinate order
- and interval-multiplicative factor, to explore and document the following perspective:

- If the multiplicative transform is applied to a series whose octave dimension
- is evenly divisible, a full cycle of permutations preserving the total chromatic
- cannot be had. It is for this reason alone that our 12-tone system yields not
- five such transformations (via factors 6,5,4,3,2) but just :one (via factor 5).
- A 6-tone system yields none, but not because of its smallness. The mere
- 7-tone yields already two (via 3,2) and the 11-tone, four (5,4,3,2). These
- occur simply because 7 and 11 are not divisible, as they are
*prime*.

- If octave dimension is prime and the multiplicative transform is applied via all
- factors (cardinally &/or ordinally, leading to I, R or RI), all intermediate permu-
- tations preserve the full chromatic. Further, each end series is seen integrally
- with them in a continuous generation. Freed from its special-case constraint,
- the transform now acts as a generative principle.

- This context integrates simple augmentation as well. Before its reduction
- in-modulo, any series multiple "refracts" as-it-were the series in expansions
- ranging another octave &/or durations-cycle for each factor increment.

- The program's essential functions were later subsumed by
*IntLens 2*, described above. - __________________________________________________________________________

- PMA