Skip to content

Latest commit

Β 

History

59 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ABC+ Converter 🎼 βž” πŸ“„

ABC+ Social Preview

The Bridge Between ABC Simplicity and MusicXML Power

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.

Release Build Status License: MIT Engine: abc2xml LGPL MusicXML 4.0


✨ Key Features

  • 🎯 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 %%sep separators.
  • 🎻 Orchestral Power: Support for complex @above/@below placements (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.

πŸ“₯ Downloads

Get the latest production-ready version (v1.3.1):

Platform Format Link
macOS .app Download Universal
Windows .exe Download x64
Linux Binary Download x64

πŸ“– Documentation & Spec

ABC+ is defined by a rigorous extension of the ABC 2.1 standard.


πŸ›  Installation (Developers)

# 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.py

🌐 API Endpoints

Supported 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-convert is 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:

POST /convert

  • Description: Convert ABC+ to MusicXML
  • Request: {"abc_content": "..."}
  • Response: {"xml_content": "...", "logs": "..."}

POST /convert-to

  • Description: Convert ABC+ to various formats
  • Request: {"abc_content": "...", "format": "midi|musicxml|lilypond|mei|abc"}
  • Response: Binary file download

POST /convert-to-midi

  • Description: Convert ABC+ to MIDI using abcmidi
  • Request: {"abc_content": "..."}
  • Response: MIDI file download

POST /convert-to-lilypond

  • Description: Convert ABC+ to LilyPond using abc2ly
  • Request: {"abc_content": "..."}
  • Response: {"ly_content": "...", "logs": "..."}

POST /convert-to-all

  • Description: Convert ABC+ to all supported formats and return as a zip file
  • Request: {"abc_content": "..."}
  • Response: Zip file download containing all formats

POST /save

  • Description: Save conversion session
  • Request: {"abc_content": "...", "xml_content": "...", "logs": "..."}
  • Response: {"message": "...", "path": "..."}

GET /check-update

  • Description: Check for software updates
  • Response: {"update_available": true/false, "current_version": "...", "latest_version": "...", "download_url": "..."}

πŸ“– Usage Examples

Python Example

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)

cURL Example

# 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.zip

🀝 Contributing

We welcome contributions! Please see our Contributing Guidelines and Security Policy.


πŸ™ Credits & Third-Party Software

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.


πŸ“„ License

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.

About

ABC+ Converter: A professional, cross-platform MusicXML 4.0 converter for advanced ABC notation. Supports swing, layout, figured bass, and more.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages