Skip to content

Repository files navigation

Tempo

A focused piano practice companion for macOS

Import real sheet music, connect a MIDI piano, and get immediate feedback as you play.

macOS 15+ Swift 6 SwiftUI MusicXML


Overview

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.


Features

Learn Practice Improve
  • MusicXML and compressed MXL import
  • Verovio score engraving
  • Guided, Section, and Performance modes
  • Left hand, right hand, or both hands
  • Visual piano keyboard
  • CoreMIDI device discovery
  • Live note and chord feedback
  • Adjustable tempo and metronome
  • Section loops and score zoom
  • Focus mode for distraction-free playing
  • Session accuracy and practice time
  • Correct, missed, and extra note counts
  • Per-piece progress and best accuracy
  • Searchable library with folders and favorites
  • Light, dark, and system appearances

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.


Quick Start

Run with Xcode

Clone the repository, open the project, and press ⌘R.

git clone https://github.com/Auax/Tempo.git
cd Tempo
open Tempo.xcodeproj

Xcode resolves the Swift package dependencies automatically.

Run with Swift Package Manager

git clone https://github.com/Auax/Tempo.git
cd Tempo
./script/build_and_run.sh

The script builds an app bundle in dist/Tempo.app and launches it.


Using Tempo

  1. Import a .musicxml, .xml, or .mxl score with ⌘O.
  2. Review the detected title, composer, difficulty, and genre.
  3. Connect a MIDI piano from the sidebar or use the visual keyboard.
  4. Choose a practice mode, hand selection, tempo, and section.
  5. Play and watch the score respond in real time.
  6. End the session to review your accuracy, timing, and note breakdown.

Keyboard Shortcuts

Action Shortcut
Import score ⌘O
Play or pause Space
Toggle Focus Mode ⇧⌘F
Show or hide feedback ⌥⌘I
Show or hide sidebar ⌥⌘S

Practice Modes

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.

Architecture

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

Development

Run the test suite with Swift Package Manager:

swift test

If you change project.yml, regenerate the Xcode project with XcodeGen:

xcodegen generate

The Verovio revision and ZIPFoundation version are pinned in both Package.swift and project.yml for reproducible builds.


Project Status

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.

About

Practice piano scores with instant feedback and MIDI connection

Topics

Resources

Stars

Watchers

Forks

Releases

Contributors

Languages