#### C.1.2 Internal music representation

When a music expression is parsed, it is converted into a set of Scheme music objects. The defining property of a music object is that it takes up time. Time is a rational number that measures the length of a piece of music, in whole notes.

A music object has three kinds of types:

- music name: Each music expression has a name, for example, a note leads to a NoteEvent, and `\simultaneous` leads to a SimultaneousMusic. A list of all expressions available is in the internals manual, under Music expressionsexpressions.
- `type' or interface: Each music name has several `types' or interface, for example, a note is an `event`, but it is also a `note-event`, a `rhythmic-event` and a `melodic-event`.

  All classes of music are listed in the internals manual, under Music classes.

- C++ object: Each music object is represented by a C++ object. For technical reasons, different music objects may be represented by different C++ object types. For example, a note is `Event` object, while `\grace` creates a `Grace_music` object.

  We expect that distinctions between different C++ types will disappear in the future.

The actual information of a music expression is stored in properties. For example, a NoteEvent has `pitch` and `duration` properties that store the pitch and duration of that note. A list of all properties available is in the internals manual, under Music properties.

A compound music expression is a music object that contains other music objects in its properties. A list of objects can be stored in the `elements` property of a music object, or a single `child' music object in the `element` object. For example, SequentialMusic has its children in `elements`, and GraceMusic has its single argument in `element`. The body of a repeat is in `element` property of RepeatedMusic, and the alternatives in `elements`.

Read comments on this page, or add one. This page is for LilyPond-2.2.5 (stable-branch).