UPiano
A Piano in your terminal.
Screenshot
How to run
First, you'll need to install FluidSynth, if you haven't already. See here how to install FluidSynth on your system.
Then, install upiano
via pip:
pip install upiano
And then run:
upiano
Make sure your terminal window is big enough. The wider you can make it, the more keys you'll have! πΉ π
How to play
To play with the mouse, click on the notes you want to play.
To play with the computer keyboard, there is a limited and currently hardcoded keymap that corresponds to the following, which will play the notes on the left side:
βββ¬βββ¬β¬βββ¬ββ¬ββ¬βββ¬β¬βββ¬β¬βββ¬ββ¬ββ¬βββ¬β¬βββ¬ββ¬ββ¬βββ¬β
β ββββββββ β ββββββββββββ β ββββββββ β βββββ
β βWβββEββ β βTβββYβββUββ β βOβββPββ β βββββ
β ββ¬ββββ¬ββ β ββ¬ββββ¬ββββ¬ββ β ββ¬ββββ¬ββ β ββ¬βββ
βA β S β D βF β G β Hβ J βK β L β ; β' β β
ββββ΄ββββ΄ββββ΄βββ΄ββββ΄ββββ΄ββββ΄βββ΄ββββ΄ββββ΄βββ΄βββ
Note that since the terminal doesn't really support key press and release events (it receives a stream of characters instead), there is no way to support two key playing at the same time with the computer keyboard only.
But you can play with the computer keyboard and with the mouse simultaneously, as you can see in this video: https://www.youtube.com/watch?v=0VXit110PcA
Powered by
Made with β€οΈ by Elias Dorneles
History
This started as a fun pairing project by friends Elias and Nandaja around 2017, after they had finished their Recurse Center retreat and were missing hacking together.
They had fun building a small terminal piano app using
urwid for the user interface and playing notes by spawning
sox subprocesses. This version is available in
the project source code, if you have urwid and sox installed, you can try it by
running: python upiano/legacy.py
.
Fast-forward to 2023, Elias attended EuroPython and learned the Textual library there, got excited about terminal apps again and decided to reboot this project using the newly acquired knowledge, package and distribute it, and add to the fun by plugging a true synthesizer to it, and playing with its controls.
Changelog:
- v0.1.2
- added volume, reverb and chorus sliders
- fix packaging config, to work on any Python 3.10+
- v0.1.1
- added sustain
- fix mouse handling, and allow playing by "swiping" over keys
- v0.1.0
- first version released to PyPI, already using Textual