Rusthesia
Rusthesia is till now just a hack to play a midi file, created from Logic Pro/X, and display a window with falling notes down onto a piano. Thus hardcoded for example is to use track 1 and 2 as piano input.
The midi file can be transposed in half notes in realtime by using shift left/right key. Playing can be paused by space.
Audio
Synthesizer is not included. Instead midi messages will be sent via core audio. Logic Pro/X can be used for playing the midi, but has to be set up accordingly.
No idea for other operation systems, if it works or how to do.
Video
Screen output uses sdl2.
Screenshot
Here screenshot for current version:

Preparation
The sdl2 libraries need to be installed. On macos this can be done by:
brew install sdl2 sdl2_gfx
Installation
cargo install rusthesia
Usage
For help just execute
rusthesia -h
For usage example the midi-file Marche_aux_Flambeaux.mid is included. As per that website, this file is in the public domain.
First list the available tracks:
> rusthesia Marche_aux_Flambeaux.mid -l
Track 0:
Text: Creator: GNU LilyPond 2.8.7
Text: Generated automatically by: GNU LilyPond 2.8.7
Text: at Mon Oct 16 20:41:39 2006
Text: at Mon Oct 16 20:41:39 2006
Track name: Track 0
Track 1:
Track name: upper
Instrument name: accordion
Track 2:
Track name: lower
Instrument name: accordion
For playing and displaying all tracks use:
> rusthesia Marche_aux_Flambeaux.mid -p 0 1 2 -s 0 1 2
In order to play the lower and show only the upper, use the following command:
> rusthesia Marche_aux_Flambeaux.mid -p 1 -s 2
Todo
- Refactoring and code quality
- Create video
- Derive the waterfall directly from the midi tracks
- Nicer looking output
- Waterfall background with lines for orientation
- black keys should have different darker color
- visual effect for pressed key on waterfall side
- Native macos app with fruitbasket
- Add pause before playing the midi
- Handle all meta messages during playing
- Change most of the prints into log-commands and enable logging per command line option
- Do not exit on end
- Allow shift by double finger gesture
- and more...
Final Words
The application works, but still this is a quick hack. In future refactoring will be necessary.