A MIDI keyboard is connected to an Arduino which parses the MIDI data and passes Note On / Note Off / Sustain messages via Bluetooth to an Android app.
The Android app allows the user to select a Scene and other options plus passes the MIDI messages via wifi to a C# WPF app.
The C# WPF app keeps track of which notes are being played (or sustained) and updates the current Scene appropriately.
The video above shows an 8 octave piano - note colours are assigned at random (notes played together are given the same colour) and gradually fade to black or white. In the Snow Scene - the pitch of the note played sets its position across the screen - low notes on the left and higher notes moving towards the right; the size and speed of the snow flakes are random. As it snows more - the snowman is gradually built. When the snowman is fully built - it begins to sing - only responding to notes above C6.