User:Peter M. Armstrong/Algorithms

Three Pre-compositional Algorithms
__________________________________________________________________________

IntLens: A Quasi-Prismatic Pitch-Class Series Registrator (1986..2001)
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 (1988)
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 (1985)
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