Learn Piano using MIDI files and a MIDI Keyboard

Git Project Pypi

Table of Contents


It may look like a game, but Rory is a tool made to help in learning to play piano. The idea isn't to replace notation, but to free a new player from having to learn 2 skills at once (physically playing and sight reading). With Rory, you can focus on just getting the muscle memory.

At every new note, the roll will stop and wait for the correct input from the midi device.

Highlighted notes are sharps, otherwise they are naturals.

Each track will display as a different color. This allows for delineation between left and right hands.

The active line will be a double line when it lands on a beat and a single line otherwise.

Rory will attempt to to label any chords played. This feature is still a work in progress.

Installation & Usage


Currently, Rory is only distributed through pypi.

pip install rory


Make sure the terminal is at least at a width of 106 characters.
From the terminal:

rory /path/to/file.mid


The Help Window

h will bring up the help window, showing all possible controls

The Register

There is a number register that gets passed to user functions.
Type the number to set the register.
Then hit the desired key or esc to clear the register.

Position Control

  • p to jump to the position specified by the register.
  • j to move to the next position, or the next nth position if there is a number in the register.
  • k to move to the previous position, or the next nth position if there is a number in the register.

Loop Control

Boundaries can be set to practice a single section of a piece. As the player position passes the end boundary, it will jump back to the start boundary.

  • [ to set the start boundary specified by the registry
  • ] to set the end boundary specified by the registry
  • \ to reset the boundaries

Ignoring channels

You can ignore a channel in order to focus on one hand

  • i will set ignore the channel set in the register
  • u will stop ignoring all ignored channels


  • q to quit

Planned Features

  • cropping out the unused sections of the keyboard

Possible Features

  • Fingering calculator