For the synthesizer engine of the piece, we used Max MSP. From Dan’s computer, he sent over OSC data to Steven’s machine to synthesize the gameplay. A video of this process can be found above. We used the UDP receive object to grab the data.
The OpenCV information was sent in the form of two arrays. The arrays were 9 binary representations of the columns. For example, the white array would send: “/white/100011101”. A ‘1’ would represent a piece on the go board section, and a ‘0’ would represent no piece on the go board section. The Max code would route the white and black array to different sections, and parse/unpack the arrays into individual messages. The combination of the unpack object, and a simple if statement, would send a “bang” message if a ‘1’ was received. There was 9 different indexes for both arrays, so there needed to be a total of 18 bang message systems. Each of the bangs were sent out to an individual synthesizer. In the code we named them “little_synth”, they were little synthesizers with an oscillator, and an ADSR. The inputs to the abstraction were for a bang message(note on), the pitch number, the attack of the filter, and the decay of the filter.
Each “little synthesizer” has an output that is set at the loading of the patch. The difference between the white group of little synths and the black little synths is the oscillator waveshape that is produced. The white little synths use a square wave to generate their sounds, using the “rect~” object in Max. The black little synths use a saw wave to generate their sounds, using the “phasor~” object in Max. We thought this would be a fun fight between the different waveshapes throughout the Go battle.
The little synths also played in different, yet harmonic keys. Each synth was a chord voicing over many octaves. The white synthesizers played an A minor 7 chord (A C E G) using MIDI pitch numbers, 45, 48, 52, 55, 57, 60, 64, 67, and 69. The black synthesizers played a C 7 chord (C E G Bb) using MIDI pitch numbers, 48, 52, 55, 58, 60, 64, 67, 70, 72. Ideally, the piece would sound more major, or minor, depending on who is winning the game, by having the most amount of pieces on the board. The sound is then all sent to an effects section. In the effects section there is a reverb object (using cverb~), and a delay object (using delay~). These object help liven up the dry synthesizers. The delay object particular helps create space in between each OSC message being received. After the effect section, it is sent to the dac~ object for output.
In the future, one improvement that could be made would be a method of actually calculating the current winner of the game, as it does not necessarily correlate to the number of pieces that player has on the board. It also might be effective to add samples from videogames to add to the theme created by the chiptune-like synths.