Overview of the Guido library
The Guido Engine operates on a memory representation of the Guido Music Notation format [GMN] the Guido Abstract Representation [AR]. This representation is transformed step by step to produce graphical score pages. Two kinds of processing are applied to the AR:
- AR to AR transformations which represents a logical layout transformation: part of the layout (such as beaming for example) may be computed from the AR as well as expressed in AR,
- the AR is finally converted into a Guido Graphic Representation (GR) that contains the necessary layout information and is directly used to draw the music score. This final step includes notably spacing and page breaking algorithms.
See the Guido Project overview pages for a quick introduction to the library services. It gives also an overview of the score operations provided by the GuidAR library.
See also the system architecture.
Main services
The main services provided by the library are:
- Parsing GMN files, strings or streams to build an AR memory representation. GMN streams are unfinished GMN representations, intended to be written on the fly, that can be handled like regular GMN files,
- Building AR memory representations from scratch using the Guido Factory API,
- Building GR representations from AR representations and controlling the graphic representation,
- Score drawing and page formatting,
- Browsing and querying music pages,
- Time to graphic mappings that are relations between graphic segments (rectangles) and time segments (intervals),
- MIDI conversion (provided that the engine has been compiled with MIDI support),
- Miscellaneous functions such as version number, management or timing measurements,
- Alternate representations:
Interfaces
The Guido library API was originally designed as a C API but it's available also for the following languages:
- C++: a C++ interface has been designed over the C API.
- Java: the Guido engine is available as a native library for Java. Thus the implementation is object oriented but the C API is globally respected: only the Guido prefix of the function names is not present in the methods names. See the java documentation.
- Javascript: the Guido engine is available as a Web Assembly [WASM] library for Javascript and published on NPM. The implementation is based on the C++ interface. See the javascript documentation.
- Python: a Python interface has been designed but has not been maintained for years.
In addition, the Guido engine services are also available as Web API.