rusthesia 0.1.3

Reads midi files and create piano notes waterfall.
rusthesia-0.1.3 is not a library.

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: Screenshot

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
  • Bug: Long pressed keys (start before and end after visible region) are not drawn
  • Create video
  • Speed up by using e.g. one large sdl2 surface
  • Nicer looking output
  • Different color for the channels (left/right)
  • 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
  • and more...

Final Words

The application works, but still this is a quick hack. In future refactoring will be necessary.