> ## 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.

# [Events]

> Practice sections, lyrics and other song-wide text events in a .chart file.

`[Events]` holds the text events that apply to the whole song: practice sections, lyrics, the coda and the song's end. Each is an `E` event with its text in quotation marks:

```text theme={null}
[Events]
{
  0 = E "section Intro"
  768 = E "phrase_start"
  768 = E "lyric Hel-"
  864 = E "lyric lo"
  1152 = E "phrase_end"
  3072 = E "section Verse 1"
  15360 = E "end"
}
```

A scanner matches every event below in the letter case shown. It reads the text as [Syntax](/chart/syntax#text) describes, so `E "[section Intro]"` means the same as `E "section Intro"`.

## Practice sections

A practice section marks where a part of the song starts, such as the intro or a verse. It runs until the next practice section:

```text theme={null}
<tick> = E "section <name>"
```

* **Required:** a space or `_` between `section` and a name, and no spaces at the name's ends. **Recommended:** a space.
* **Recommended:** at least one practice section in a chart.
* **Required:** one practice section at most at a tick.

**Edge case: the names Clone Hero shows.** Clone Hero has a table of Rock Band section names, and shows a name from it when it finds one there, such as `Verse 1` for `verse_1`. It shows any other name with each `_` replaced by a space. It does the same in a `.mid` file.

**Edge case: a chart with no practice sections.** When a song with no practice sections is played, Clone Hero makes ten, named `0% - 10%` to `90% - 100%`. They start at tenths of the chart's length, which ends a beat after the last note. It does the same in a `.mid` file. YARG makes none. scan-chart reports `noSections`.

## Lyrics

A lyric is one syllable or word of the vocals. Vocal phrases group lyrics into the lines a scanner shows:

```text theme={null}
<tick> = E "lyric <text>"
<tick> = E "phrase_start"
<tick> = E "phrase_end"
```

* **A lyric** is `lyric`, a space, and the text.
* **A phrase** runs from a `phrase_start` to the next `phrase_start` or `phrase_end`. It holds the lyrics from its start tick through its end tick.
* **Required:** every lyric inside a phrase.
* **Required:** a `phrase_end` at the end of the last phrase.
* **On a tick where one phrase ends and the next starts,** a `phrase_end` is optional. **Required:** if there is one, it comes before the `phrase_start`.
* **Required:** a `phrase_end` only where a phrase is open.
* **Required:** no other text that starts with `phrase_start` or `phrase_end`.

A `.chart` file holds one set of lyrics, without pitches.

Lyrics use the symbols and formatting tags of `.mid` lyrics, which change how a lyric is shown. See [Lyric symbols](/mid/vocals#lyric-symbols) and [Formatting tags](/mid/vocals#formatting-tags). **Required:** angle brackets only around those tags.

**Edge case: a lyric on a phrase's last tick.** A lyric on the tick where its phrase ends belongs to that phrase, unless the next phrase starts on that tick: then it belongs to the next phrase.

**Edge case: the same lyric twice at one tick.** Clone Hero shows it twice. YARG and scan-chart keep one.

## The coda

```text theme={null}
<tick> = E "coda"
```

`coda` marks where the song's big ending starts. A drum fill at or after it is a Big Rock Ending: see [Drum fills](/chart/phrases#drum-fills). **Required:** one `coda` at most.

## The end of the song

```text theme={null}
<tick> = E "end"
```

`end` ends the song before its audio does. When the audio runs on long past the last note, such as a long fade-out or a recording that keeps going, a scanner ends the song at `end` and shows the results sooner.

* **Required:** `end` at least one beat after the end of the last note, sustain included.
* **Required:** one `end` at most.

## Deprecated

* **`prc`,** an older word for `section`: `prc_verse_1` is a practice section named `verse_1`. Write `section` instead.

## Ignored

* **Any other text,** except text that starts with `phrase_start` or `phrase_end`. YARG acts on a few more events, such as `crowd_clap`; other scanners ignore them.
* **A lyric with no text,** such as `E "lyric "`.

## Invalid forms

<Accordion title="Two practice sections at one tick">
  Clone Hero, YARG and scan-chart use the later one.
</Accordion>

<Accordion title="No separator after section or prc">
  Clone Hero skips the character after `section` or `prc`, so `E "sectionIntro"` is a section named `ntro` there. YARG reads a section named `Intro`. scan-chart doesn't read it as a section, and keeps it as text.
</Accordion>

<Accordion title="A practice section name with spaces at its ends">
  YARG and scan-chart remove them. Clone Hero removes the spaces at the end of the text, but keeps those after the separator, so `E "section  Intro "` is a section named ` Intro` there.
</Accordion>

<Accordion title="A practice section with no name">
  YARG and scan-chart ignore `E "section"` and `E "section "`. Clone Hero reads them as a section named "", and fails to load a chart that has `E "prc"` alone. A scanner that reads such a chart reads no section there, as YARG and scan-chart do.
</Accordion>

<Accordion title="A lyric outside every phrase">
  A scanner ignores it.
</Accordion>

<Accordion title="A phrase that never ends">
  A scanner ignores a last `phrase_start` that no `phrase_end` closes, and the lyrics after it. YARG keeps it only when nothing in `[Events]` comes after it.
</Accordion>

<Accordion title="phrase_start before phrase_end on one tick">
  Clone Hero and scan-chart read them in the order written, so the new phrase ends at once and holds nothing. YARG reads them as the end of one phrase and the start of the next.
</Accordion>

<Accordion title="A phrase_end with no open phrase">
  It has no effect in Clone Hero and scan-chart. YARG starts a phrase there, which the next `phrase_start` or `phrase_end` ends.
</Accordion>

<Accordion title="Text that starts with phrase_start or phrase_end">
  Clone Hero reads any text that starts with `phrase_start`, such as `phrase_start_2`, as a phrase start, and any text that starts with `phrase_end` as a phrase end. YARG and scan-chart read only the exact words. scan-chart keeps such text, and writes it back.
</Accordion>

<Accordion title="More than one coda or end">
  A scanner uses the first `coda`, as Clone Hero and scan-chart do. Clone Hero and scan-chart also use the first `end`. YARG looks for `end` among the song's last 10 song-wide events, and uses the last one it finds there. scan-chart reports `badEndEvent` for each `end` after the first, and saves them as written.
</Accordion>

<Accordion title="An end less than a beat after the last note ends">
  Clone Hero ignores it, and plays until the later of the end of the audio and the end of the last note. YARG uses it when it comes after the end of every note, phrase and lyric, with no one-beat margin. scan-chart reports `badEndEvent` when it comes before the last note starts, and saves it as written.
</Accordion>


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