A cross-platform desktop piano learning app powered by real-time MIDI analysis.
Connect your keyboard, practice pieces, and get instant feedback — all in one native app.
Note waterfall — notes fall in real time as you practice
Home — browse exercises by category & difficulty |
Library — classical pieces organised by composer |
Exercise detail — BPM, difficulty, tags and description |
Warmup — touch each highlighted key to start |
Settings — student profile, language, import by link |
Recordings — saved performances ready to replay |
Pre-built binaries are available on the Releases page. No Go or Node.js required — just download and run.
⚠️ Important — unsigned binary: Pianalyze is not signed with an Apple Developer certificate (the program costs ~$99/year). Because of this, macOS Gatekeeper will block the app the first time you try to open it, showing a warning like "cannot be opened because the developer cannot be verified".
This is expected — the app is safe. Follow the steps below to run it anyway.
| Your Mac | Chip | File to download |
|---|---|---|
| MacBook / iMac / Mac Mini M1, M2, M3, M4 | Apple Silicon | pianalyze_*_darwin-arm64.tar.gz |
| MacBook / iMac 2020 or older (Intel) | Intel x86_64 | ⚠️ No pre-built binary — see below |
Not sure which chip you have? Click the Apple menu → About This Mac and look for "Apple M…" (Silicon) or "Intel" in the chip/processor line.
# 1. Extract the archive
tar -xzf pianalyze_*_darwin-arm64.tar.gz
# 2. Remove the quarantine flag macOS adds to downloaded files
xattr -rd com.apple.quarantine ./pianalyze
# 3. Run
./pianalyze
Alternative (no terminal): Right-click the app → Open → click Open again in the dialog. macOS will remember the exception going forward.
If you see "Apple could not verify…" in System Settings: go to System Settings → Privacy & Security, scroll down, and click "Open Anyway" next to pianalyze.
There is no pre-built binary for Intel Macs. You need to compile the app locally — the process is straightforward:
1. Install the dependencies:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
2. Clone and build:
git clone https://github.com/leandrodaf/pianalyze.git
cd pianalyze
wails build
3. The binary will be at build/bin/pianalyze — run it:
open build/bin/pianalyze.app
The first build may take a few minutes while dependencies are downloaded.
Download pianalyze_*_windows-amd64.zip, extract it, and run pianalyze.exe.
Windows SmartScreen may show a warning on first run. Click "More info" → "Run anyway".
Debian / Ubuntu (recommended):
sudo dpkg -i pianalyze_*_amd64.deb
pianalyze
Other distributions (tar.gz):
tar -xzf pianalyze_*_linux-amd64.tar.gz
./pianalyze
Linux requires
libgtk-3,libwebkit2gtk-4.1, andlibasound2at runtime:sudo apt install libgtk-3-0 libwebkit2gtk-4.1-0 libasound2
Pianalyze is a native desktop application that bridges your MIDI keyboard and your computer to make piano practice smarter. It captures every note you play, analyses it in real time, and guides you through a growing library of exercises and pieces.
Built with Go (backend + MIDI pipeline) and Svelte/TypeScript (frontend), packaged as a single native binary via Wails.
.xml / .mxl) or .pia file to practice your own scores.pia formatMIDI Device
│
▼
MIDI Client (github.com/leandrodaf/midi/v2)
│
▼
Event Pipeline ──────────────────────────────────────────────────┐
NoteStateUpdaterStage → pressed notes snapshot, velocity, dynamic
IntervalCalculatorStage → µs since previous event
NoteIdentifierStage → note name (e.g. "C3")
ChordIdentifierStage → chord name, inversion, triad flag
FinalStage → emit MIDIState to Wails frontend
│
▼
Wails Runtime ──► Svelte Frontend
Piano.svelte keyboard visualisation
NoteWaterfall.svelte falling notes + grading overlay
Timeline.svelte playback & speed controls
ChordPanel.svelte real-time chord readout
HomeScreen.svelte device picker + library/recordings nav
| Package | Responsibility |
|---|---|
internal/pipeline/ |
Generic Stage[TContext, TState] interface + Processor |
internal/pipeline/stages/ |
Five concrete pipeline stages |
internal/midi/ |
128-note map, 80+ chord types (bitmask lookup ~20 ns), velocity→dynamic |
internal/grading/ |
Concurrent grader — binary-search timing, hold-fraction, chord completion |
musicxml.go |
MusicXML → .pia v2 converter |
frontend/src/ |
Svelte/TypeScript UI, canvas-based waterfall and piano |
| Requirement | Version |
|---|---|
| Go | 1.26+ |
| Node.js | 18+ |
| Wails CLI | v2 |
Linux (Ubuntu/Debian) — additional system libs:
sudo apt install libgtk-3-dev libwebkit2gtk-4.1-dev libasound2-dev
git clone https://github.com/leandrodaf/pianalyze.git
cd pianalyze
# Hot-reload dev mode (frontend + backend)
wails dev -tags webkit2_41
wails build -tags webkit2_41
# Output: build/bin/pianalyze
| Variable | Values | Effect |
|---|---|---|
BUILD_MODE |
production |
Structured JSON logging via Zap |
| (unset) | Human-readable development logging |
# Run all tests (with race detector)
go test -race -tags webkit2_41 ./...
# Run a specific package
go test -race ./internal/midi/
# Benchmarks
go test -bench=. -benchmem ./internal/midi/
# Lint
golangci-lint run --build-tags webkit2_41 ./...
# TypeScript type-check
cd frontend && npx tsc --noEmit
# Frontend unit tests
cd frontend && npm test
CONVERT_INPUT=~/my-scores CONVERT_OUTPUT=~/pia-files \
go test -tags "tools webkit2_41" -run TestBatchConvert -v . -timeout 300s
cmd/ Wails app entry + MIDI device setup
internal/
constants/ Shared string constants & sentinel errors
grading/ Concurrent timing grader
midi/ Note names, chord table, velocity→dynamic
pipeline/ Generic stage pipeline
pipelinectx/ PipelineContext (event + accumulated analysis)
stages/ Five concrete stage implementations
store/ Mutex-protected pressed-notes state
frontend/src/
components/ Svelte UI components
lib/ Canvas renderers, music theory utils, i18n
stores/ Svelte stores (midi, playback, settings…)
docs/ Architecture design documents
data/ Built-in exercise definitions
Contributions are welcome!
git checkout -b feature/my-featurePlease make sure go test -race -tags webkit2_41 ./... and golangci-lint run --build-tags webkit2_41 ./... pass before submitting.
Pianalyze é um aplicativo de desktop gratuito e open-source para quem quer aprender piano ou melhorar a prática.
git clone https://github.com/leandrodaf/pianalyze.git
cd pianalyze
wails dev -tags webkit2_41
Funciona em macOS, Windows e Linux. Compatível com qualquer teclado MIDI USB.
This project is licensed under the MIT License.