OSCAR's Hands

Performance System

Manager  
|hands|

The part of OSCAR that generates notes during performance is called it's "Hands," which is contained in a patch called |manager|. OSCAR's Hands consists of three main parts: a tempo tracker called |tempo_duple|, a second-order Markov chain generator that creates harmonic material, called |harmgen|, and a first-order Markov chain generator that creates melodic material, called |melplayer|. |harmgen| and |melplayer| work together to generate new output, the timing of which is controlled by |tempo_duple|. The |manager| patch consists of these three elements, patches to facilitate communication between them, and feedback loops to allow these elements to analyze both human input and the system's own output. Each of these elements and their intercommunication shall be discussed in turn.

|harmgen| and |melplayer| work on very similar principles. They both look at previous input and output to determine what the next output should be.  Specifically, |melplayer| follows OSCAR's output and calculates the melodic interval between the note that is currently being played and the note that was played immediately before the current note.  |melplayer| then consults a probability table to determine what the next note should be.

Probability Tables for Melodic Genesis  
Probability Tables for Melodic Genesis

Four of the twenty-five probability tables used in the generation of new melodic material are pictured here. The specific table that will be used at any given point is determined by context: if the last melodic interval was a falling half-step, the table named "n1perf" will be used; if it was a unison (the same note played repeatedly) then the table named "u0perf" will be used; if it was a rising minor-third (three half-steps), then the table named "p3perf" will be used.

These tables each contain one hundred addresses; each address can hold one number, which will be between -12 and 12. |melplayer| determines which table to use and then picks an address at random. The table outputs the value stored at that address; this value represents what the next melodic interval should be (-12 is a descending octave, 0 is a unison, and 12 is an ascending octave). The proposed interval is output to |manager|.

|harmgen| tracks both the human player's input and OSCAR's output, and calculates the harmonic interval between these two voices. Possible intervals are between 0 (unison) and 12 (octave); all intervals are reduced to their equivalent interval classes within these bounds. |harmgen| is more complex than |melplayer|, because, while |melplayer| looks at the previous interval to determine the next, |harmgen| looks at the previous two intervals to determine the next.

Probability Tables for Harmonic Genesis  
Probability Tables for Harmonic Genesis

Four of the one hundred and sixty-nine probability tables used in the generation of new harmonic material are pictured here. Again, the specific table that will be used at any given time is determined by context: if the last two harmonic intervals were a half-step followed by a major third (four half-steps), the table called "onefourperf" will be used; if they were an octave followed by a unison, then the table called "twelvezeroperf" will be used. Again, each table contains one hundred addressees.

Each address holds a number between 0 and 12, which represents what then next harmonic interval should be.  |harmgen| determines which table should be used and then picks an address from that table at random. The proposed interval that is output by the table is sent to |manager|.

The harmonic and melodic probability tables are stored in the "Brains" of OSCAR. The values in the tables were calculated from Bach fugues using OSCAR's "Ears" (this process is described shortly). The probability tables all contain the suffix "perf" in their names, to distinguish them from other tables that are used by the Ears.

The basis of OSCAR's note generation, then, is a pair of Markov chain generators that work in parallel. The design of each of these generators will be described in detail, starting with |melplayer|.


Email Greg OSCAR Main PageMelplayer