> ## Documentation Index
> Fetch the complete documentation index at: https://chart-spec.enchor.us/llms.txt
> Use this file to discover all available pages before exploring further.

# Vocals and harmonies

> Vocal notes, lyrics, phrases and harmonies in a .mid file.

A `.mid` file holds its vocals in vocal tracks: `PART VOCALS` for the lead vocals, and `HARM1` to `HARM3` for up to three harmonies. Each holds the notes to sing, the lyric sung on each, and phrases that group them into lines:

```text theme={null}
PART VOCALS
  0      Track name  PART VOCALS
  1920   Note on     105  Phrase
  1920   Note on     60   Pitch C4
  1920   Lyric       Hel-
  2160   Note off    60
  2160   Note on     62   Pitch D4
  2160   Lyric       lo
  2640   Note off    62
  2880   Note off    105
```

Here one phrase holds two notes: `Hel-` sung on C4, joined to `lo` on D4.

Clone Hero reads only `PART VOCALS`, and only its lyrics and phrases: it shows the lyrics, and has no vocals to sing. YARG reads every vocal track, as vocals and harmonies to sing. A `.chart` file holds one set of lyrics, without notes. See [Lyrics](/chart/events#lyrics).

## Vocal tracks

| Track | Part |
| - | - |
| `PART VOCALS` | Lead vocals, and the lyrics Clone Hero shows |
| `HARM1` | Harmony 1 |
| `HARM2` | Harmony 2 |
| `HARM3` | Harmony 3 |

* **Required:** one track at most for each part.
* **Required:** the harmony tracks in order in the file: `HARM1`, then `HARM2`, then `HARM3`.
* **Recommended:** `PART VOCALS` in a chart with harmonies, because Clone Hero shows lyrics only from `PART VOCALS`.

## Notes

| Note | Meaning |
| - | - |
| 36 to 84 | A note to sing, from C2 to C6. Its number is its pitch |
| 96 | A percussion note, read with no length |
| 105 | A phrase. See [Phrases](#phrases) |
| 116 | Star power. See [Star power](#star-power) |
| 0 | A range shift: YARG fits the pitch range it shows to the notes from this note to the next range shift. The note's length is how long the move takes |
| 1 | A lyric shift: YARG starts a new line of the lyrics it shows, on `PART VOCALS` and `HARM1` |

* A note's length is how long it's sung. Vocal notes have no sustain cutoff.
* **Required:** each note of a part ends at or before the tick where the next note of the part starts.
* Clone Hero reads only the phrases. YARG reads every note in the table.

A part has vocals to sing only if it has a note from 36 to 84, or a 96, inside a phrase. YARG and scan-chart list a vocals part only then.

## Lyrics

A lyric is a text event on a vocal track: the syllable sung on the note at its tick.

* **Required:** a lyric event, `FF 05`, or a text event, `FF 01`. **Recommended:** `FF 05`.
* **Required:** one lyric at most at a tick, and in a part with notes, each lyric on a note's tick.
* **Recommended:** one lyric on each note. A note that slides from the note before it has the lyric `+`.
* **Required:** no spaces at a lyric's ends, and no `[` or `]` in it.

Unlike in a `.chart` file, a lyric has no `lyric` prefix, and it's in a vocal track, not in `EVENTS`.

**Edge case: songs Clone Hero lists as having lyrics.** From its code, Clone Hero's song scan counts the track name as a lyric. So its song list marks a song as having lyrics when its `PART VOCALS` has a phrase, even with no lyrics in it.

### Lyric symbols

A symbol at the end of a lyric changes how it's sung or shown. YARG reads each one as a property of the lyric's note. Clone Hero only changes how it shows the lyric:

| Symbol | Meaning | Clone Hero shows |
| - | - | - |
| `-` | Joined to the next syllable | Nothing, and no space before the next syllable |
| `=` | A hyphen, joined to the next syllable | `-` |
| `+` | A slide from the previous note | Nothing. A lyric of only `+` isn't shown |
| `#` | Not pitched | Nothing |
| `^` | Not pitched, and scored leniently | Nothing |
| `*` | Not pitched | Nothing |
| `%` | A range shift, in YARG | Nothing |
| `/` | A static lyric shift, in YARG | Nothing |
| `$` | Hidden on harmonies 2 and 3 | Nothing |

* `$` may also come at the start of a lyric.
* `=` shows as `-` anywhere in a lyric, and joins the next syllable only at the end.
* Two symbols stand for a character anywhere in a lyric: `§` joins two syllables sung as one, and `_` is a space. Clone Hero shows each as a space. YARG's vocals show `§` as `‿`.
* Any other symbol elsewhere in a lyric has no meaning, and isn't shown.
* **Required:** `-` and `+` only at the end of a lyric. For a hyphen shown inside a lyric, write `=`.
* Clone Hero and YARG show the symbols the same way in a `.chart` file's lyrics.

### Formatting tags

A lyric may hold a formatting tag, such as `<i>` and `</i>` around italic text. Clone Hero allows the tags `i`, `b`, `s`, `u`, `sup`, `sub`, `br`, `voffset`, `lowercase`, `uppercase`, `smallcaps`, `cspace`, `color` and `mspace`, and colors written as `<#rrggbb>`. **Required:** angle brackets only around these tags.

## Phrases

A phrase is a note 105. It holds the notes and lyrics from its start tick through its end tick, as a `.chart` phrase holds its lyrics:

* **Required:** every note and lyric inside a phrase.
* **Required:** each phrase has a length, and ends at or before the tick where the next phrase of its part starts.
* **Recommended:** each phrase ends after its last note starts, or where the next phrase starts.

**Edge case: a note or lyric on a phrase's end tick.** It belongs to that phrase, unless the next phrase starts on that tick: then it belongs to the next phrase. Clone Hero and YARG read notes and lyrics this way.

Unlike a `.chart` phrase, a `.mid` phrase is one note, so it always has an end.

**Edge case: lyrics without notes.** A part may hold phrases and lyrics with no notes, for lyrics without pitches. Clone Hero and YARG show its lyrics, and YARG and scan-chart list no vocals part for it.

## Star power

Note 116 on `PART VOCALS` or `HARM1` gives star power to each phrase that starts inside it. Clone Hero ignores it. `HARM2` and `HARM3` take `HARM1`'s star power.

## Harmonies

The three harmony parts share their phrases:

* `HARM1`'s phrases are the phrases of all three harmonies: they set where each is scored, and its star power. A `HARM2` or `HARM3` note outside them isn't scored.
* `HARM2`'s phrases mark where YARG moves the lyrics of harmonies 2 and 3 to a new line. **Required:** they cover every `HARM3` note.
* `HARM3` has no phrases of its own.

## Deprecated

* **`PART HARM1` to `PART HARM3`,** names from The Beatles: Rock Band. YARG reads them as `HARM1` to `HARM3` when the file has no `HARM1` to `HARM3`, and scan-chart reads them as the same parts. Write `HARM1` to `HARM3` instead.
* **Note 106,** the second player's phrase in older Rock Band charts. Every scanner reads it as a phrase, but they disagree where it differs from a 105. Write 105 instead. **Required:** each 106 starts and ends where a 105 does.
* **`[range_shift]` and `[range_shift <seconds>]`.** YARG reads them as a range shift, and Clone Hero and scan-chart ignore them. Write note 0 instead.

## Ignored

* **Note 97,** hidden percussion. No scanner reads it.
* **Any other note number,** such as 104, which YARG reads as a censorship marker after a `[CENSORSHIP_MARKERS]` event.
* **A text event that starts with `[`,** such as `[play]`. No scanner reads it as a lyric, and scan-chart writes it back as a text event.
* **An empty lyric.**
* **Star power on `HARM2` and `HARM3`, and phrases on `HARM3`.** YARG and scan-chart use `HARM1`'s and `HARM2`'s instead.

## Invalid forms

<Accordion title="A second track for one part">
  A scanner reads the first track of each part, as scan-chart does, and Clone Hero does for `PART VOCALS`. YARG sings the first `PART VOCALS`, and shows the lyrics of every `PART VOCALS` track. It sings the last of each harmony track. scan-chart's export leaves out the others.
</Accordion>

<Accordion title="Both HARMn and PART HARMn for one part">
  A scanner uses `HARMn`, wherever it is, as YARG and scan-chart do, and scan-chart's export writes only that track. Clone Hero reads neither.
</Accordion>

<Accordion title="Harmony tracks out of order, or without HARM1">
  From its code, YARG copies `HARM1`'s phrases into `HARM2` and `HARM3` as it reads each track, so a harmony track before `HARM1` gets no phrases there. Without `HARM1`, YARG doesn't list harmonies 2 and 3. scan-chart reads the tracks in any order, and uses `HARM2`'s and `HARM3`'s own phrases when there's no `HARM1`. Its export writes the tracks in order.
</Accordion>

<Accordion title="A lyric or note outside every phrase">
  Clone Hero doesn't show such a lyric, and YARG doesn't sing such a note. YARG's vocals and scan-chart join a lyric before a phrase to that phrase, and scan-chart drops a lyric after the last phrase. A part with no phrases at all shows nothing in any scanner, and scan-chart's export writes it empty.
</Accordion>

<Accordion title="A phrase note-on with no note-off, or a note-off with no note-on">
  Clone Hero, YARG's vocals and scan-chart ignore it, as for any note: see [Note pairing](/mid/note-pairing#invalid-forms). So Clone Hero doesn't show the lyrics of a phrase with no note-off. YARG's lyrics read each 105 or 106 note-on as a phrase start, and each note-off as a phrase end, as in a `.chart` file. There, a phrase with no note-off runs to the next phrase's start, and the last one is dropped, unless nothing in the song-wide events comes after it. A note-off with no note-on starts a phrase, which the next phrase start or end closes.
</Accordion>

<Accordion title="A - or + that isn't at the end of a lyric">
  Clone Hero joins the next syllable to a lyric with a `-` anywhere in it, and joins a lyric that starts with `+` to the one before it. YARG and scan-chart give such a symbol no meaning. Clone Hero and YARG's lyrics don't show it, and YARG's vocals and scan-chart keep a `-`.
</Accordion>

<Accordion title="Overlapping phrases, or a 106 that doesn't match a 105">
  Clone Hero shows a lyric inside two phrases in both. scan-chart gives each note and lyric to the first phrase that holds it. Of a 105 and a 106 that start at one tick, Clone Hero keeps the later in the file, YARG the shorter, and scan-chart the longer, and scan-chart's export writes only that one.
</Accordion>

<Accordion title="A phrase of length 0">
  A scanner reads the note and lyric on its tick as in it, since a phrase holds its end tick. Clone Hero reads the lyric so, and scan-chart both. YARG's vocals put nothing in it, and give the lyric on its tick to the next phrase. scan-chart's export writes it at length 0.
</Accordion>

<Accordion title="A lyric in another type of text event">
  Every scanner reads every type of text event as a lyric, except a track name and a copyright notice: `FF 04` and `FF 06` to `FF 09` too. scan-chart's export writes every lyric it reads as `FF 05`.
</Accordion>

<Accordion title="A bracket inside a lyric">
  Clone Hero and scan-chart read `brk[x]` as the lyric `brk[x]`. YARG's vocals read it as the text `x`, not a lyric.
</Accordion>

<Accordion title="Other text in angle brackets">
  Clone Hero removes it from the lyric it shows. From its code, YARG shows it as text. scan-chart keeps it, and writes it back.
</Accordion>

<Accordion title="Spaces at a lyric's ends">
  Clone Hero shows the spaces, and shows a lyric of only spaces as spaces. YARG's vocals and scan-chart remove them, and scan-chart's export writes the lyric without them.
</Accordion>

<Accordion title="Two lyrics at one tick">
  Clone Hero shows both, in the order of the file. YARG and scan-chart keep one when the two are the same, and otherwise sort them. scan-chart's export writes them sorted.
</Accordion>

<Accordion title="A lyric that isn't on its note's tick">
  It has no effect in Clone Hero. YARG and scan-chart give its symbols to the next note, and YARG can leave a lyric that matches no note out of the lines of lyrics it shows.
</Accordion>

<Accordion title="Overlapping notes of one part">
  For two notes of one pitch, a scanner pairs them as [Note pairing](/mid/note-pairing#invalid-forms) says: a note-off ends the latest open note of its number and channel. It then trims them as overlapping sustains are trimmed: the earlier note ends where the later starts, and the later runs to whichever end is later. YARG ignores a note-on while the pitch is on, and ends the first note at the first note-off. YARG and scan-chart keep both of two overlapping notes of different pitches.
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.