GUIDOLib  1.6.8
Guido Engine Internal Documentation
The Guido Engine Library Internals

Introduction

The GuidoLib project aims at the development of a generic, portable library and API for the graphical rendering of musical scores. The library is based on the Guido Music Notation format as the underlying data format. It is an open source project covered by the Mozilla Public License.

The Guido Music Notation

The Guido Music Notation format (GMN) is a general purpose formal language for representing score level music in a platform independent plain text and human readable way. It is based on a conceptually simple but powerful formalism: its design concentrates on general musical concepts (as opposed to graphical features). A key feature of the Guido design is adequacy which means that simple musical concepts should be represented in a simple way and only complex notions should require complex representations. The GMN language is fully documented on the guidodoc web site.

The Guido Engine

The Guido Engine operates on a memory representation of the GMN format: the Guido Abstract Representation (GAR). This representation is transformed step by step to produce graphical score pages. Two kinds of processing are first applied to the GAR:

  • GAR to GAR transformations which represents a logical layout transformation: part of the layout (such as beaming for example) may be computed from the GAR as well as expressed in GAR,
  • the GAR is converted into a Guido Semantic Normal Form (GSNF). The GSNF is a canonical form such that different semantically equivalent expressions have the same GSNF.

This GSNF is finally converted into a Guido Graphic Representation (GGR) 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.

The source code organisation

The source code organisation reflects the engine internal operations:

  • the Abstract Representation is implemented with a set of classes stored in the src/engine/abstract folder.
  • the Graphic Representation is implemented with a set of classes stored in the src/engine/graphic folder.

Guido Project Copyright © 2019 Grame-CNCM