An OMR-based platform for lightweight score structuring, error detection, and music-education evaluation
Features • Architecture • Installation • Roadmap • Contact
NoteLite is a smart score-processing platform aimed at music-education scenarios. Built on Optical Music Recognition (OMR), combined with lightweight encoding, score matching, and error detection, it forms a complete loop from "scan recognition" to "database management" to "teaching feedback".
Existing OMR tools (Audiveris, oemer, homr, etc.) can already convert score images into machine-readable formats such as MusicXML, but several gaps remain for real music-education platforms:
- No lightweight structured representation suitable for database storage
- No automatic matching and diffing against canonical scores
- No suspected-error detection on scanned scores
- No audio-based assessment of performance correctness
NoteLite is designed to fill these gaps. It is not another OMR engine — it builds an education-oriented application layer on top of mature open-source OMR.
NoteLite is currently a fork of the Audiveris OMR engine. The released desktop build includes:
- Full OMR pipeline: PDF / image → transcription → MusicXML export
- MIDI export (new in this release): file-type dropdown supports
.mxl/.xml/.mid, with no need for MuseScore or other external tools - Chinese UI: full zh_CN localization of menus / dialogs / toolbars
- JDK 21 build: extract and run, no compilation needed
Download: NoteLite-5.11.0.zip
MIDI export is intended for proof-listening only. The first version uses a fixed velocity of 80; advanced features such as drum kits, repeat marks, and transposing instruments are not yet supported. See the release notes for details.
| Module | Description | Status |
|---|---|---|
| Score Recognition | Recognize scanned, photographed, and PDF scores | In progress |
| Lightweight Encoding | Convert scores into compact structured data optimized for storage and retrieval | In progress |
| Score Matching | Auto-match against canonical scores with sequence-level diffing | Planned |
| Smart Correction | Detect missing/wrong notes, rhythm anomalies, accidental errors, etc. | Planned |
| Performance Assessment | Coarse-grained performance evaluation based on audio recognition | Planned |
-
Lightweight score encoding A compressed representation designed for databases — far smaller than full MusicXML.
-
Canonical-score-driven diffing New scans are not just recognized; they are also automatically validated against the canonical version in the database.
-
Education-oriented closed loop An end-to-end flow from paper score to online teaching feedback.
┌─────────────────────────────────────────────────┐
│ Application Layer │
│ Upload | Matching | Correction | Assessment │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Database & Retrieval Layer │
│ Canonical | User Uploads | Versions | Index │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Lightweight Encoding │
│ Relative pitch | Tokenize | Hash | Compress │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Score Structuring Layer │
│ Clef | Key | Time | Notes | Duration | Marks │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ OMR Recognition Layer │
│ Preprocess | Staff detection | Symbols | Pitch │
└─────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ Input Layer │
│ Scanned image | Photo | PDF | Audio recording │
└─────────────────────────────────────────────────┘
- OMR engine: Audiveris / oemer / homr (alternative options)
- Data formats: MusicXML, JSON, custom compressed format
- Matching algorithms: edit distance, dynamic programming, hash fingerprints
- Audio recognition: TBD (for performance assessment)
For end users — no compilation required:
- Download
NoteLite-5.11.0.zipfrom Releases - Extract anywhere
- Run
bin/NoteLite.bat(Windows) orbin/NoteLite(Linux/macOS) - Requires Java 21 runtime on the machine
For development or contribution:
# Clone the repo
git clone https://github.com/Lucas0623z/NoteLite.git
cd NoteLite
# Use JDK 21 (verify with `java -version` showing 21.x)
export JAVA_HOME=/path/to/jdk-21
# Run
./gradlew :app:run --no-daemon
# Build a distribution
./gradlew :app:distZip --no-daemon
# Artifact at app/build/distributions/app-<version>.zipOn Windows, use .\gradlew instead of ./gradlew.
The education layer (lightweight encoding / canonical matching / performance assessment) is still in design. It will eventually introduce:
- Python 3.8+ (matching algorithms / data processing)
- Node.js 16+ (frontend)
- PostgreSQL / MySQL (database)
| Column | Type | Description |
|---|---|---|
| score_id | INT | Primary key |
| title | VARCHAR | Title |
| composer | VARCHAR | Composer |
| key_signature | VARCHAR | Key signature |
| time_signature | VARCHAR | Time signature |
| measure_count | INT | Number of measures |
| canonical_version_id | INT | Canonical version ID |
| Column | Type | Description |
|---|---|---|
| score_id | INT | Foreign key |
| raw_musicxml | TEXT | Original MusicXML |
| structured_json | JSON | Structured data |
| compressed_code | VARCHAR | Lightweight encoding |
| midi_url | VARCHAR | MIDI file path |
| Column | Type | Description |
|---|---|---|
| compare_id | INT | Primary key |
| uploaded_score_id | INT | Uploaded score ID |
| matched_standard_id | INT | Matched canonical score ID |
| similarity_score | FLOAT | Similarity score |
| error_positions | JSON | Error positions |
- Project architecture design
- OMR engine integration (Audiveris fork, v5.10.x)
- Structured-data output (MusicXML / MIDI)
- Chinese UI localization (v5.10.0+)
- Bundled MIDI export (v5.11.0)
- Lightweight-encoding implementation
- Initial database setup
- Build canonical-score database
- Score-fingerprint index
- Diff-analysis algorithms
- Error-highlight UI
- Phone-photo scenario tuning
- Fine-tuning on teaching-score samples
- Misrecognition-rule fixes
- Audio upload
- Pitch / rhythm extraction
- Comparison against canonical scores
- Learning-report generation
MusicXML is verbose and ill-suited for large-scale database storage. NoteLite uses a custom lightweight format:
# MusicXML (hundreds of lines)
<score-partwise>
<part id="P1">
<measure number="1">
<note>
<pitch><step>G</step><octave>4</octave></pitch>
<duration>1</duration>
<type>quarter</type>
</note>
...
</measure>
</part>
</score-partwise>
# NoteLite encoding (single line)
TS:4/4;KS:G;M1:G4/q,A4/q,B4/h|M2:C5/q,B4/q,A4/h
# Token form (relative pitch)
4/4|G|+0:q,+2:q,+4:h|+5:q,+4:q,+2:h
Benefits:
- 90%+ reduction in storage size
- Simple database indexing
- Efficient similar-score matching
- Friendly to version management
A multi-stage retrieval strategy:
- Coarse filter: key signature + time signature + measure count
- Mid filter: melody fingerprint hash
- Fine filter: sequence-level edit distance
| Error Type | Method | Example |
|---|---|---|
| Missing/extra notes | Sequence-length comparison | Canonical 8 notes, scan 7 notes |
| Wrong pitch | Per-symbol comparison | Canonical C5, scan D5 |
| Wrong duration | Rhythm-pattern matching | Canonical quarter note, scan eighth |
| Missing accidentals | Tonality analysis | Canonical F#, scan F |
| Measure-beat anomaly | Beat accumulation | Sum of durations in 4/4 measure ≠ 4 beats |
This project is currently maintained solely by the author and does not accept external pull requests. For issues or suggestions, please use the contact info below.
- Code style: existing Audiveris Java conventions (see
dev/jalopy/java-convention.xml) - Build: JDK 21 + Gradle
- Commit messages: Conventional Commits
- Docs: Javadoc required for public APIs
This project is released under the MIT License — see the LICENSE file for details.
Yuexuan Zhang
Undergraduate, University of Illinois Urbana-Champaign (UIUC) Research interests: computer science, intelligent systems, education technology, music information processing
- Email: Lucas.z0623@outlook.com
- GitHub: @Lucas0623z
- Personal site: https://personal-website-tau-lake.vercel.app/
Thanks to the following open-source projects and communities:
- Audiveris — classic OMR framework
- oemer — modern deep-learning OMR
- homr — end-to-end OMR model
- The broader GitHub open-source community for years of work in music information retrieval
- Current version: v5.11.0 (desktop OMR + MIDI export)
- Status: actively developed
- Last updated: 2026-04-29
If this project helps you, please consider giving it a Star
Made by Yuexuan Zhang