Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


XSDCXX based MusicXML bindings for C++

xsdcxx-musicxml is a MusicXML binding for C++11 based on xsdcxx. The bulk of the source code is automatically generated from the MusicXML W3C XML Schema Definition (XSD). Parsing, manipulation, and serialization of MusicXML documents is supported.

This library handles both, partwise and timewise MusicXML documents in a uniform way. Client code is free to work with either of the two object models, and MusicXML documents are automatically converted to the requested format during parsing.

auto timewise = musicxml::parse<musicxml::score_timewise>(std::cin, "-");
for (auto &measure: timewise.measure()) {
  for (auto &part: measure.part()) {
    std::clog << measure.number() << ": " <<>part_name()
              << std::endl;
musicxml::serialize(std::cout, timewise);


auto partwise = musicxml::parse<musicxml::score_partwise>(std::cin, "-");
for (auto &part: partwise.part()) {
  for (auto &measure: part.measure()) {
    std::clog <<>part_name() << ": " << measure.number()
              << std::endl;
musicxml::serialize(std::cout, partwise);

Alternatively, if you want to save to a different format as you have worked with, you can use the musicxml::convert function to flip formats:

// Serialize a score-partwise document.
musicxml::serialize(std::cout, musicxml::convert(timewise));

Both, musicxml::score_partwise::part_type::measure_type and musicxml::score_timewise::measure_type::part_type use boost::variant to store the different allowed element types in a heterogeneous container. This container can be accessed and set with the music_data() accessors, and its type is available as member type music_data_sequence.

IDREF attributes are configured to point directly to the referenced element type(s). Some IDREF's are optional though, so be sure to not dereference those unconditionally.


CMake and XSDCXX are required to build this library.

See generate.cpp, partiwse.cpp and timewise.cpp for very simple usage examples.

To use this library in your project,

#include "xsdcxx-musicxml/musicxml.hpp"

and link with the xsdcxx-musicxml library. If you prefer static linking, use xsdcxx-musicxml-static.

You can also use the CMake ADD_SUBDIRECTORY command to directly include this library as a subproject in your CMake based project.

Parent project

This library is being developed as a sub-project of BMC, the Braille Music Compiler.


No description, website, or topics provided.



No releases published


No packages published
You can’t perform that action at this time.