In lieu of an abstract, here is a brief excerpt of the content:

  • The Xenakis Sieve as Object:A New Model and a Complete Implementation
  • Christopher Ariza

In numerous publications from 1965 to 1992, composer, architect, and theorist Iannis Xenakis (1922– 2001) developed an elegant and powerful system for creating integer-sequence generators called sieves. Xenakis used sieves (cribles) for the generation of pitch scales and rhythm sequences in many compositions, and he suggested their application to a variety of additional musical parameters. Though sieves are best calculated with the aid of a computer, no complete implementation has been widely distributed. Xenakis's published code is incomplete and insufficient for broad use.

This article demonstrates a new object-oriented model and Python implementation of the Xenakis sieve. This model introduces a bi-faceted representation of the sieve, expands Xenakis's use of logic operators, employs a practical notation, produces sieve segments and transpositions, and easily integrates within higher-level systems. This modular implementation is deployed within athenaCL, a cross-platform, open-source, interactive command-line environment for algorithmic composition using Csound and MIDI. High-level, practical interfaces have been developed to provide athenaCL users with sieve-based tools for the algorithmic generation of pitches, rhythms, and general parameter values.

Definition of the Sieve

Xenakis's theory changed over the course of his many writings on the sieve. Procedures, notation, and nomenclature varied as the theory developed, yet often with inconsistent and unexplained usage. To avoid the complexity of Xenakis's presentation, a sieve will be defined with a new model and notation. New terms and concepts are introduced to replace Xenakis's sometimes-inconsistent usage. Alternative theoretical treatments of the sieve have been proposed by others (Riotte 1979; Squibbs 1996; Gibson 2001; Jones 2001; Andreatta 2003), though none have integrated a complete software model.

A sieve is a formula consisting of one or more residual classes combined by logic operators. A residual class consists of two integer values, a modulus (M) and a shift (I). The modulus can be any positive integer greater than or equal to 0; the shift, for a modulus M greater than 0, can be any integer from 0 to M–1. A modulus and shift will be notated M@I, read "modulus M at shift I." A shift I greater than or equal to M is replaced by the common residue, or I % M. (All computational examples in this article are given in the Python programming language, where the "%" is the modulus operator. For example: 13 % 12 == 1.)

The residual class defines an infinite number sequence. Given a sequence generated by M@I, each value in the sequence modulus M is equal to I. For example, the residual class 3@0 defines an infinite sequence consisting of all integers x where x % 3 == 0. The resulting sieve sequence is [ . . . , –6, –3, 0, 3, 6, . . . ]. A residual class with the same modulus and a shift of 1, notated 3@1, produces a sequence where, for each value x, x % 3 == 1, or [ . . . , –5, –2, 1, 4, 7, . . . ]. For any modulus M, there exist M unique shifts (the values 0 to M–1). For each shift of M, a sequence of equally spaced integers is produced, where the difference between any adjacent integers is always M. A residual class produces a periodic sequence with a period equal to M.

Although modulus by zero, and thus zero-division, is typically undefined for real numbers (and an error for computers), the residual class 0@0 is permitted, defining the empty sieve sequence: []. The residual class 1@0, the complement of 0@0, defines the infinite integer sequence Z.

Logic operators are used to combine residual classes. Four operators are permitted: union ("or"), intersection ("and"), symmetric difference ("xor"), and complementation ("not"). Union, intersection, and symmetric difference are binary operators; complementation is a unary operator. The logic operators will be notated "|" for union, "&" for intersection, [End Page 40] "^" for symmetric difference, and "-" for complementation.

For example, the sieve 3@0 | 4@0 produces the union of two residual classes, or the sieve sequence [ . . . , 0, 3, 4, 6, 8, 9, 12, . . . ]. The intersection of the same residual classes, notated 3@0 & 4@0, produces the sieve sequence [ . . . , 0, 12, 24, . . . ]. The symmetric difference, or the...

pdf

Share