There are multiple ways to indicate time in a Ratioscore. The left-most timing spine (column) will be used to control time in the score, with possibilities being:

Spine heading     Meaning
**time Absolute time in seconds (excluding tempo changes).
**dtime Delta time in seconds.
**ms Absolute time in milliseconds.
**dms Delta time in milliseconds.
**recip Musical time in divisions of a whole note.
none No timeline: treat each data line as 1 second long.


A **time spine gives the time in seconds to start notes on each line. Time values need to be sorted from low to high in the score. Here is an example of playing a new note once every quarter second, and then once every half second, then once every second:

If a note is still sounding by the end of the score, it will be extended for one second before being turned off.


The **dtime spine gives the time in seconds to wait until playing the next line of the score. Here is an example that produces the same rhythms as the previous example using **time:


The **ms spine is similar to **time, but the units are milliseconds (1000 milliseconds equals one second).


The **dms spine is similar to **dtime, but the units are delta milliseconds.


The **recip timeline describes time in terms of musical rhythms. Numbers represent divisions of a whole note, such that 4 means a quarter note, 8 a half note, 12 a triplet eight note and so on. One or more augmentation dots can be added after the number, such as 2. for a dotted half note, or 20.. four a doubly-dotted quintuplet sixteenth note.

Implicit time

If there is no timeline in the score, then an implicit **dtime is used, with each data line in the score played for one second (plus any tempo changes). Tempo changes can be given in any **ratio or **drum spine.


All time spines can be altered by tempo changes. This will cause time descriptions such as **time, **dtime, **ms and **dms to no longer represent physical time.

Tempo changes are indicated by *MM#, where # is a floating-point number of beats to perform in one minute (MM = “Maelzel’s Metronome”). *MM60 is the default tempo for a time spines, and is equal to one beat per second.


The **time, **dtime, **ms, and **dms timelines can use rational numbers in addition to floating point numbers.

[Note: needs to be implemented]

For fractions that are larger than one, the integer part can be split from the fractional part:

[Note: needs to be implemented]

For **recip timelines, fractional values are reversed and a % character is used instead of a slash. For example, 4 and 4%1 both represent a quarter note, with the denominator of the reciprocal fraction being 1 by default. Triplet whole notes are 3%2 (i.e., 3/2 = 1.5 triplet whole notes create a regular whole note).


[Move this to another documentation page about Humdrum file structure]

Barlines are indicated by placing an equals sign (=) in each column of the score. An optional measure number can follow the equals sign. The divisions of the score into measures does not have to be equal or metrical.

Multiple timelines

Multiple timelines can be present in the Ratioscore, but only the leftmost one will be used to perform the **ratio spines.

In this case only the first **dtime spine will be used (constant 16th note rhythm). To use the second timeline, add a filter line to the score:

The filter line can be placed anywhere in the score (top, bottom, middle). The extract filter pulls out the specified spines, which are from the second spine to the end of the line in this case, removing the first **recip spine. This will perform the score using a repeated 8-16-16 rhythm instead of the constant 16th notes.

Independent timelines

Here is an example of storing parts one after the other in the score rather than in a single timeline.

Note that the timeline data type does not have to match between the different parts, and one or more parts can be present in each segment. Only one segment should have tempo changes. Here is the equivalent with all parts in a single timeline:

Metadata and filters can be placed inside of **/*- for each segment, or the start of each segment can be started with !!!!SEGMENT: name, where name is optional.


If a timeline entry has zero duration, it will be interpreted as a grace note. The previous note will be shortened by 100ms and the grace note start time moved back 100ms. If the previous note is less than 200ms, the grace note start time will be 1/2 of the duration between the onset times of its neighboring pitches. Only one grace note in a melodic sequence can currently be handled.

With **time data, a repeated time value means that the first entry is a grace note:

In **recip data, use q to represent a grace note:

The duration of the grace note is fixed at 100ms, regardless of the tempo:

If the duration of the grace note would bring it closer to the previous note than to the note after it, the grace note is shortened to fit half-way between the two notes.

To change the duration of grace notes the interpretation *grace:500 means to set the grace note duration to 500 ms:

Here is an example Turkish music score using grace notes.