Import real sheet music, connect a MIDI piano, and get immediate feedback as you play.
Tempo is a native macOS app designed to make piano practice more useful without making it more complicated.
Open a MusicXML score, connect a digital piano or MIDI keyboard, and start playing. Tempo follows your position in the music, highlights the notes ahead, and gives clear feedback on correct, missed, and extra notes—all inside a calm, score-first workspace.
Built for:
- Learning a new piece at your own pace
- Repeating difficult passages
- Practicing each hand independently
- Tracking accuracy and practice time
- Playing through a score without interruptions
Unlike static sheet music, Tempo responds to every note while keeping the music—not the metrics—at the center of the experience.
| Learn | Practice | Improve |
|---|---|---|
|
|
|
Requirements: macOS 15.0 or later, Xcode 16 or later, and a MIDI keyboard for live instrument input. Tempo also includes an on-screen keyboard for testing without hardware.
Clone the repository, open the project, and press ⌘R.
git clone https://github.com/Auax/Tempo.git
cd Tempo
open Tempo.xcodeprojXcode resolves the Swift package dependencies automatically.
git clone https://github.com/Auax/Tempo.git
cd Tempo
./script/build_and_run.shThe script builds an app bundle in dist/Tempo.app and launches it.
- Import a
.musicxml,.xml, or.mxlscore with ⌘O. - Review the detected title, composer, difficulty, and genre.
- Connect a MIDI piano from the sidebar or use the visual keyboard.
- Choose a practice mode, hand selection, tempo, and section.
- Play and watch the score respond in real time.
- End the session to review your accuracy, timing, and note breakdown.
| Action | Shortcut |
|---|---|
| Import score | ⌘O |
| Play or pause | Space |
| Toggle Focus Mode | ⇧⌘F |
| Show or hide feedback | ⌥⌘I |
| Show or hide sidebar | ⌥⌘S |
| Mode | Best for |
|---|---|
| Guided | Learning notes and chords at your own pace. Tempo waits for the expected input before moving forward. |
| Section | Isolating a difficult passage and repeating it with focused controls. |
| Performance | Playing continuously with restrained feedback and reviewing the result afterward. |
Tempo is built entirely in Swift with native macOS frameworks.
Sources/Tempo
├── App Application entry point
├── Models Scores, pieces, navigation, and session metrics
├── Services MusicXML parsing, MIDI input, playback, and previews
├── Stores Practice state and application data
├── Support Theme, commands, formatting, and preview fixtures
└── Views SwiftUI screens and reusable components
Core technologies:
- SwiftUI for the native macOS interface
- CoreMIDI for low-latency piano input
- Verovio for MusicXML engraving
- WebKit for interactive score rendering
- ZIPFoundation for compressed MXL scores
- Swift Charts for progress visualization
Run the test suite with Swift Package Manager:
swift testIf you change project.yml, regenerate the Xcode project with XcodeGen:
xcodegen generateThe Verovio revision and ZIPFoundation version are pinned in both Package.swift and project.yml for reproducible builds.
Tempo is under active development. The core macOS practice loop—score import, engraving, MIDI input, playback, live feedback, library management, and session metrics—is implemented.
Companion displays, real device pairing, richer long-term insights, audio recording, and performance comparison are planned. The current pairing screen is a visual prototype.
See overview.md for the complete product direction and design.md for the interface principles.
Built for quieter, more deliberate practice.