Wiimote with Max/MSP
How does this work?
At any given time the whole program is in one chord state, for example Cm. Underlying the whole piece is a weighted directed graph describing the probability of changing from one chord to another.
The program pumps out a consistent beat of eighth notes, and there is a graph describing the probabilities of each note of the given chord that will be played that beat.
The piano notes are determined from the note chart below.
The bottom table defines the notes in the chord. The Y axis is midi note values from 0 to 127, the x axis is a "selector" row which is used by the table above. The top table is a probability table which is used to select which notes in the bottom table to play. When a "bang" comes in the table on top, a number is chosen according to the weights of each, which causes the corresponding note to be played from the bottom table.
The +/- buttons shift the probability graph for the chord to favor lower and higher notes. I can go into a "lighter" feel by pressing "+" and then it sounds more delicate because it's only choosing higher notes.
This example is a "Cm" chord.
There is also a bass line which plays the root note of the current chord every time the chord changes.
The long axis of the wiimote controls the loudness of each eighth note. So to accent particular beats, I can whip the wiimote forward, and to make a note softer I pull back. The trigger finger tells the chord system to change to the next chord.
The rhythm track follows the loudness of the piano notes as well.
When I'm looking at the screen I can see the next 5 chords the graph has picked out in advance, which allows me to plan out phrasing and timing. That lets me do things like if I notice a V-I sequence coming up I can phrase it appropriately.
When the system detects a V-I sequence, it will cause a cymbal crash to play in certain circumstances on the "I" chord.
I also gave myself a "string section" which I can bring in by pressing one of the smaller buttons. The string section's notes are again based on the current chord. They were chosen ahead of time to have a two-part voice that follows the chord progression nicely. The volume of the string section is controlled by the left and right tilt of the wiimote.
To end the piece, I press the "home" button to play the final note. The "home" button is hard to reach so it's difficult to press it accidentally. This ensures I won't end the song early until I really intended to. The final note is programmed to play a full-sounding chord and hit the crash cymbal.