Skip to main content
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:
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.

Vocal tracks

  • 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

  • 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:
  • $ 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

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.
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.
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.
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.
Clone Hero, YARG’s vocals and scan-chart ignore it, as for any note: see Note pairing. 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.
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 -.
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.
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.
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.
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.
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.
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.
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.
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.
For two notes of one pitch, a scanner pairs them as Note pairing 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.