ABC+ Converter is a professional-grade, cross-platform engine designed to translate advanced ABC notation into high-fidelity MusicXML 4.0.
Designed for composers, engravers, and researchers, ABC+ goes beyond standard converters by supporting a rich set of modern musical directives, including swing playback, complex orchestral layout, figured bass, and custom articulations.
- π― Precision MusicXML 4.0: Fully compatible with MuseScore 4, Sibelius, and Finale β instruments are auto-recognised on import (every part is tagged with a MusicXML
<instrument-sound>), and grace-note phrasing imports cleanly (no MuseScore import crashes). - πΉ Advanced Playback & Tab: Native interpretation of
%%swing,%%mute, and automatic Tin Whistle Tablature generation. - π Pro Layout Controls: Fine-grained vertical orchestration with
%%vskip,%%lyrics-above, and custom%%sepseparators. - π» Orchestral Power: Support for complex
@above/@belowplacements (including technical notations and fingerings). - πΈ Continuo & Chords: High-fidelity Figured Bass and Guitar Frame support.
- π₯οΈ Cross-Platform: Native binaries for macOS, Windows, and Linux.
- π Interactive Workflow: Includes a sleek, local web interface for real-time conversion and session management.
- π Multi-Format Support: Convert ABC+ to MusicXML, MIDI, LilyPond, and other formats with a single click.
- π Batch Processing: Generate all supported formats simultaneously for efficient workflow.
- πΌ High-Quality MIDI: Uses abcmidi for professional-grade MIDI conversion.
- π LilyPond Integration: Direct conversion to LilyPond format for advanced typesetting.
Get the latest production-ready version (v1.3.1):
| Platform | Format | Link |
|---|---|---|
| macOS | .app |
Download Universal |
| Windows | .exe |
Download x64 |
| Linux | Binary | Download x64 |
ABC+ is defined by a rigorous extension of the ABC 2.1 standard.
- ABC+ Specification: The definitive syntax guide (v1.4.0).
- Feature Matrix: Every supported MusicXML 4.0 element.
- Showcase: Real-world examples (Bossa Nova, Orchestral, etc.).
- Issues: Something not working? Let us know.
# Clone with submodules
git clone --recurse-submodules https://github.com/leedale30/abc-to-xml-converter.git
cd abc-to-xml-converter
# Install dependencies
pip install -r requirements.txt
# Launch the interactive app
python app.pySupported formats: MusicXML, MIDI, LilyPond β each via its own dedicated converter (
abc2xml,abc2midi,abc2ly). Support for MEI, Humdrum, Capella, NoteWorthy, RomanText, Scala, MuseData and Braille was removed on 2026-09-02 along with music21, which was the only thing providing them.POST /upload-and-convertis removed for the same reason and returns 410 Gone with a pointer to the working endpoints.
The ABC+ Converter provides a RESTful API for programmatic access to conversion functionality:
- Description: Convert ABC+ to MusicXML
- Request:
{"abc_content": "..."} - Response:
{"xml_content": "...", "logs": "..."}
- Description: Convert ABC+ to various formats
- Request:
{"abc_content": "...", "format": "midi|musicxml|lilypond|mei|abc"} - Response: Binary file download
- Description: Convert ABC+ to MIDI using abcmidi
- Request:
{"abc_content": "..."} - Response: MIDI file download
- Description: Convert ABC+ to LilyPond using abc2ly
- Request:
{"abc_content": "..."} - Response:
{"ly_content": "...", "logs": "..."}
- Description: Convert ABC+ to all supported formats and return as a zip file
- Request:
{"abc_content": "..."} - Response: Zip file download containing all formats
- Description: Save conversion session
- Request:
{"abc_content": "...", "xml_content": "...", "logs": "..."} - Response:
{"message": "...", "path": "..."}
- Description: Check for software updates
- Response:
{"update_available": true/false, "current_version": "...", "latest_version": "...", "download_url": "..."}
import requests
# Convert ABC to MusicXML
response = requests.post('http://127.0.0.1:5001/convert', json={
'abc_content': 'X:1\nT:Test\nM:4/4\nL:1/8\nK:C\nC D E F G A B c'
})
if response.status_code == 200:
result = response.json()
print(result['xml_content'])
# Convert ABC to MIDI
response = requests.post('http://127.0.0.1:5001/convert-to-midi', json={
'abc_content': 'X:1\nT:Test\nM:4/4\nL:1/8\nK:C\nC D E F G A B c'
})
if response.status_code == 200:
with open('output.mid', 'wb') as f:
f.write(response.content)# Convert ABC to MusicXML
curl -X POST http://127.0.0.1:5001/convert \
-H "Content-Type: application/json" \
-d '{"abc_content": "X:1\nT:Test\nM:4/4\nL:1/8\nK:C\nC D E F G A B c"}'
# Convert ABC to MIDI and save to file
curl -X POST http://127.0.0.1:5001/convert-to-midi \
-H "Content-Type: application/json" \
-d '{"abc_content": "X:1\nT:Test\nM:4/4\nL:1/8\nK:C\nC D E F G A B c"}' \
-o output.mid
# Convert to all formats and save as zip
curl -X POST http://127.0.0.1:5001/convert-to-all \
-H "Content-Type: application/json" \
-d '{"abc_content": "X:1\nT:Test\nM:4/4\nL:1/8\nK:C\nC D E F G A B c"}' \
-o all_formats.zipWe welcome contributions! Please see our Contributing Guidelines and Security Policy.
The conversion engine is not ours. ABC+ Converter is built around
abc2xml by Willem G. Vree β the
ABC-to-MusicXML translator that does the actual notation conversion. It is vendored in
abc2xml/ and carries this project's own modifications on top.
abc2xml β Copyright Β© 2012β2018 Willem G. Vree, with contributions from Nils Liberg, Nicolas Froment, Norman Schmidt, Reinier Maliepaard, Martin Tarenskeen, Paul Villiger, Alexander Scheutzow, Herbert Schneider, David Randolph and Michael Strasser. Licensed under the LGPL. Canonical source: https://wim.vree.org/svgParse/abc2xml.html
Everything this project adds β the swing playback, orchestral layout, figured bass and custom-articulation handling advertised above β is a layer around Vree's converter, not a replacement for it.
The packaging scaffolding in abc2xml/ (its README) came from a small GitHub mirror by
Federico Del Gaudio, MIT-licensed. See abc2xml/LICENSE, which sets out
which licence governs which file.
The ABC+ Converter's own code β the Flask app, web UI, packaging, docs and tests β is licensed under the MIT License. See LICENSE.
The MIT licence does not extend to abc2xml/abc2xml.py, which is LGPL and remains
Willem Vree's work. Modifications made to it here are derivative and likewise LGPL. If you
redistribute this project, you are redistributing an LGPL component: keep its notice intact
and make its source available. Full detail in abc2xml/LICENSE.
Created and maintained by Antony Leedale.
