An open API service indexing awesome lists of open source software.

https://github.com/quentin-piot/piano-pro

Professional piano learning and MIDI visualization tool
https://github.com/quentin-piot/piano-pro

ai audio audio-processing linux macos midi music music-tool piano python rust sheet-music wgpu windows

Last synced: 11 days ago
JSON representation

Professional piano learning and MIDI visualization tool

Awesome Lists containing this project

README

          


PianoPro

# PianoPro

**Open the web app:** [quentin-piot.github.io/piano-pro/app](https://quentin-piot.github.io/piano-pro/app/)

**Documentation:** [quentin-piot.github.io/piano-pro](https://quentin-piot.github.io/piano-pro/)

PianoPro is a professional piano learning and MIDI visualization tool, inspired by Guitar Pro but designed specifically for piano.

It extends [Neothesia](https://github.com/PolyMeilex/Neothesia), a great open-source MIDI visualizer written in Rust, with the features that serious learners actually need: sheet music display, auto-transcription, structured practice tools, and more.

The goal is a focused, no-nonsense workspace for piano practice and analysis — something closer to what Guitar Pro is for guitarists.


PianoPro playback screen

## What this version adds

Neothesia is GPU-accelerated, fast, and clean. This fork keeps all of that and builds the learning layer on top:

| | Neothesia | PianoPro |
|---|---|---|
| MIDI playback & visualization | ✅ | ✅ |
| Track mute / visibility in playback | Partial | ✅ |
| MIDI library with persistence | ❌ | ✅ |
| Audio → MIDI transcription | Partial | ✅ |
| Sheet music display | ❌ | 🚧 Planned |
| Hands-separate practice mode | ❌ | 🚧 Planned |
| Loop section (A/B repeat) | Partial | 🚧 Improving |
| Performance scoring | ❌ | 🚧 Planned |
| Fingering suggestions | ❌ | 🚧 Planned |

## Current Features

- MIDI file import and playback with synchronized piano visualization
- Audio file import with automatic transcription to MIDI (Basic Pitch model)
- MIDI library with persistent storage and piece renaming
- Continue button to instantly resume last played piece
- Per-track controls during playback (mute, auto, human-play modes)
- Track visibility toggle — hides notes from both waterfall and keyboard
- Transport bar always visible: speed control, progress scrubbing, loop markers
- Countdown before playback starts
- Play-along mode with required key detection
- Light-mode UI designed for extended practice sessions

## Web Version

PianoPro also runs directly in the browser:

- **Web app:** [quentin-piot.github.io/piano-pro/app](https://quentin-piot.github.io/piano-pro/app/)
- Uses the same core scenes and playback flow as the desktop app
- Includes MIDI import, playback, browser-persisted library, and built-in audio output

Current web limitations:

- Audio-to-MIDI import is desktop-only
- Custom SoundFont selection is desktop-only
- The browser build is currently best suited to recent desktop browsers

## Roadmap

Features planned or in progress, roughly by priority:

**Sheet music**
- Standard notation display synchronized with MIDI playback
- Scrolling score that follows the current position
- Chord symbol overlay
- Fingering number annotations

**Auto-transcription (in progress)**
- ✅ Audio file → MIDI conversion (WAV, MP3 via Basic Pitch)
- 🚧 Microphone input for real-time note detection and feedback
- 🚧 Chord recognition from audio

**Practice tools**
- Hands-separate mode (left hand / right hand isolation)
- Fine-grained loop control with visual A/B markers
- Practice tempo ramp (auto-increase speed as you hit targets)
- Configurable lead-in and countdown

**Analysis & feedback**
- Performance scoring: timing accuracy, missed notes, early/late statistics
- Session history and progress tracking over time
- Difficulty estimation per section

**Other**
- Fingering suggestion engine
- Metronome with subdivisions
- Export performance replay as video
- Custom color themes per track

## Screenshots


PianoPro main menu

## Building

```bash
# Run the app
cargo run --release --bin neothesia

# Build
cargo build --release --bin neothesia
```

Requires a `default.sf2` soundfont in the project root or a system-installed one for audio playback.

## Credits

Based on [Neothesia](https://github.com/PolyMeilex/Neothesia) by PolyMeilex — a GPU-accelerated MIDI visualizer written in Rust.

## License

GNU GPL v3 — same as the original Neothesia project.