Cypher is a real-time interactive music system with two major components: a listener and a player. The listener analyzes streams of MIDI data. The player uses various algorithmic techniques to produce new musical output. Both components are made up of many small, interconnected agents, operating on several hierarchical levels. The listener classifies features in the input and their behavior over time, sending messages that communicate this analysis to the player. Features classified include speed, density, dynamic, harmony, and rhythm. A user of Cypher can configure the player component to react to such messages, such that a reaction is the execution of compositional methods producing new music in response. A graphical interface allows the interactive specification of relations between feature classifications and types of response. Collections of relations can be saved, then recalled during performance by a score orientation component that tracks human performance and executes state changes at predetermined points in the score. Furthermore, an internal critic analyzes and alters Cypher's own output, representing a set of programmed aesthetic preferences, and ensuring a consistency of style in the program's responses. Cypher plays composed music in a manner that is sensitive to live human performance cues. It is able to analyze and respond creatively to unknown music. Finally, it can compose without input, using algorithms to either transform remembered material or generate new musical output. The work described here is an applied music theory; ideas about the description and generation of music are formalized to the point that they can be implemented in a computer program and tested in real time. Though textual traces of program activity can provide a detailed written account of the processing performed, the application of theoretical ideas in a real-time context brings the intellectual enterprise to a point of contact with complete musical examples, where the ear can judge the success of the theory.
Read full abstract