Piano chord progression editor with a dark-mode GUI.
Compose, play, analyse and save chord progressions using a clickable piano keyboard. Supports PC audio (sine wave) and MIDI output. Multilingual: English, Dutch, French, German.
- Clickable piano keyboard (1–5 octaves)
- Recognises and names chords automatically (Major, Minor, 7th, 9th, Sus, dim, aug, …)
- Chord progression editor: add, copy, reorder, remove chords (drag & drop)
- Key detection with Roman numeral analysis (I – IV – V – I) — multilingual
- Scale highlighter — marks notes of the detected key on the keyboard
- Chord inversions — Root position, Inv 1, Inv 2, Inv 3 buttons
- Best Voicing — picks the inversion with the least voice movement vs. the previous chord
- Chord suggestions based on current key and last chord
- Play back progressions (PC audio or MIDI)
- Save/load progressions as JSON
- Export to PDF (and import chord names from PDF)
- MIDI import and export
- 5 themes: Dark Gold, Midnight Blue, Forest, Classic, Crimson
- Window position and settings stored in
settings.ini
| Area | Change |
|---|---|
| Performance | _darken() and _font() results cached at module level |
| Performance | scale_notes.index() replaced with O(1) dict lookups |
| Performance | self._all_keys cached in draw_piano(); no more inline list concatenation |
| Performance | canvas.coords() pre-fetched before draw loop in draw_saved_canvas() |
| Performance | Change-detection in _apply_keyboard_visual() and _refresh_scale_highlight() |
| Performance | Widget .get() calls batched in play_chord() and _play_song_thread() |
| Platform | sounddevice import restricted to Windows; simpleaudio used on other platforms |
| Feature | Description |
|---|---|
| Multilingual analysis bar | Key name and mode now translated (EN/NL/FR/DE) |
| Scale highlighter | Toggle button marks in-scale keys blue, dims out-of-scale keys |
| Chord inversions | Root / Inv 1 / Inv 2 / Inv 3 buttons below the piano |
| Best Voicing | Finds the inversion closest to the previous chord (voice leading) |
| UI refactor | Piano zone with header/footer; two-column action area; status bar |
- Python 3.10+
- sounddevice — Windows (or
simpleaudioon other platforms) - mido + python-rtmidi
- numpy
- reportlab
pip install sounddevice mido python-rtmidi numpy reportlab
python Pianoman.py
A pre-built Windows executable is available on the Releases page. No Python installation required.
| Version | Date | Notes |
|---|---|---|
| 3.6.1 | 2026-06-11 | Performance optimisations; sounddevice Windows-only |
| 3.6 | 2026-06-06 | Scale highlighter, chord inversions, best voicing, multilingual analysis, UI refactor |
| 3.5 | 2026-04-05 | Add Chord; octave pulldown; volume slider per output; window state saved; PDF import; drag & drop |
| Earlier | — | See source file header |
Frank van Dijke