Godfried-Willem Raes
'Mirrored X'

for the <Player Piano> robot


This piece goes back on an idea we worked out in 1983, the time the MIDI specification was released and we were working on software for algorithmic composition on the at that time pretty new Atari and PC platforms. The idea was to mirror music files such that all intervals are inverted and (for tonal music) the normal major scale ( 2 2 1 2 2 2 1) and minor scale ( 2 1 2 2 1 3 1) become modes (1 2 2 2 1 2 2) and (1 3 1 2 2 1 2). The entire system of tonality becomes mirrored, yet in essence remaining a tonal system, in two distinct modes. Obviously melody lines are now found in the bass and bass-lines in the treble. In august 2016 we decided to realize this in a piece of hardware / firmware. So we programmed a 16-bit PIC microcontroller (a 24EP128MC202) to do exactly this for piano music. The mirroring is performed against central C (midi note 60).

Musically speaking, the inverter works best on truly polyphonic music files were we meet equally important musical voices and melody lines. J.S.Bach's Goldberg variations or the Kunst der Fugue work pretty well. Oddly enough, some compositions remain in essence the same after inversion: we tried it with Hans Roels 'Sailing the waves of down below' and fundamentally it remains easily recognizable. This likely will happen to most non-tonal music, in particular with serial music.

The PCB for this recycling composition has a MIDI input connector, three MIDI thru connectors and one MIDI output connector. The output of the data source (a computer midi-port or a midi keyboard) should be connected to the MIDI input connector and the MIDI output from the board goes to player piano (or, of you want, to a midi synth). The midi channel used for receiving and transmitting can be selected prior to cold boot with the jumpers on the board.

Jumper 1 sets bit 0 of the channel, jumper 2 sets bit 2, jumper 3 sets bit 3 and jumper 4 sets bit4. After power on, the channel cannot be changed anymore. With slight changes in the firmware, the board can be made to work with just about any pitched instrument in our robot orchestra. For bass instruments such as our sousaphone <So>, the mirror note will have to be some where in the midst of the ambitus. However, if this is implemented, the notes will remain in the bass register.

Controller 50 can be used to transpose the output up to an octave upwards. So acceptable values are 0 to 12. Note that a change of this controller during the performance of a piece, will cause an all-notes off to be performed. This in avoidance of stuck notes.

The handmade finished and programmed PCB can be ordered from the Logos Foundation. The price is 470 Euro. Delivery time: 1 week.

This is the circuit diagram:

This is the single sided PCB (at 200% of real size):

The source code for this microcontroller, written to be compiled with the Proton24 compiler can be found here.

The hex dump of the firmware is here. MPLAB can be used for flashing the code. The Microchip PICkit3 programmer should be used for programming the chip.


Premiere: 17.08.2016 - Logos Tetrahedron, with x = Beethoven's Waldstein sonata. MP3-recording of this performance.

Further performances:

Back to Godfried-Willem Raes homepage
Godfried-Willem RAES
Public Domain, march 2016

Back to Godfried-Willem Raes homepage Back to catalogue of compositions by Godfried-Willem Raes Back to the logos website
P.S.: Voor uitvoeringen van dit stuk moeten noch mogen auteursrechten worden betaald. Elke poging tot inning van auteursrechten, door welke instantie ook, naar aanleiding van publieke uitvoeringen van dit stuk kan gerechterlijk als poging tot afpersing worden vervolgd.