# TXT file format

## Overview

All information about the song - both the metadata (artist, title, bpm, gap etc.) and the actual transcription of the vocal line - are defined in one txt file.

The txt file consists of:

* list of tags,
* one or more encoded vocal tracks consisting of:
  * one or more encoded notes separated by line breaks,
* end of song symbol.

## Metadata

Metadata is written in the form of tags. Tags are written one per line in the following format:

{% code fullWidth="false" %}

```
#KEY:VALUE
```

{% endcode %}

e.g.

```
#ARTIST:David Amber
#TITLE:Second Time Around
```

You can find the list of standard tags with their definitions [here](https://karedi.gitbook.io/karedi/next-level/tags#standard-tags).

## Vocal line transcription

### Note format

Each note is written in a single line - as a list of its properties separated by spaces:

```
<note_type_symbol> <start_beat> <duration> <pitch> <lyrics>
```

e.g.

```
: 0 3 5 Can
```

#### Note types

<table><thead><tr><th width="132.33333333333331">Note type</th><th width="94" align="center">Symbol</th><th>Description</th></tr></thead><tbody><tr><td>Standard</td><td align="center">:</td><td>Standard note, pitch is assessed while singing.</td></tr><tr><td>Golden</td><td align="center">*</td><td>Same as standard but worth more points.</td></tr><tr><td>Freestyle</td><td align="center">F</td><td>Neither timing nor pitches are assessed. Not singable, only lyrics are displayed.</td></tr><tr><td>Rap</td><td align="center">R</td><td>Only timing is assessed, every pitch is treated as valid.</td></tr><tr><td>Golden rap</td><td align="center">G</td><td>Same as rap but worth more points.</td></tr></tbody></table>

#### Start beat

When the note should start defined in beats. Beat length in milliseconds is determined from [BPM ](https://karedi.gitbook.io/karedi/next-level/txt-file-format/tags/bpm)value.

#### Duration

Duration of the note defined in beats.

#### Pitch

Pitch is encoded as a number from -60 to 67 range where 0 represents middle *C* (*C4)*. The numbers are assigned sequentially and increase together with the pitch height so:

```
...
-2 corresponds to A♯3
-1 corresponds to B3 (also called H3)
0 corresponds to C4
1 corresponds to C♯4
2 corresponds to D4
...
```

#### Lyrics

Lyrics assigned to this note (usually single syllable). The spaces dividing the words can be either placed before the first syllable of the new word (as long as it is not the first word in the line) or after the last syllable of the previous word (apart from the final word in the line). Both approaches are equally OK, just do not mix both in one file.

{% hint style="info" %}
Karedi uses spaces before words approach while saving. If you want to use spaces after words, it can be changed in the [preferences](https://karedi.gitbook.io/karedi/user-interface/preferences).
{% endhint %}

### Line breaks format

Line breaks separate groups of notes that should be displayed at the same time - as a single phrase for the player to sing. Each line break defines the moment (in beats) in which the following line of the song should be displayed.&#x20;

Format:

```
- <position_in_beats>
```

e.g.

```
- 60
```

### Track format

Each track consists of a chronological list of notes separated by line breaks. If the song has multiple tracks, the player number header should be used before each track.&#x20;

{% hint style="info" %}
If your song has a single track, skip the player header.
{% endhint %}

Header format:

```
P <player_number_starting_from_1>
```

e.g

```
P 1
```

## Example

### Single-player

<pre><code>#ARTIST:David Amber
#TITLE:Second Time Around
#MP3:David Amber - Second Time Around.mp3
#COVER:David Amber - Second Time Around [CO].jpg
#BACKGROUND:David Amber - Second Time Around [BG].jpg
#VIDEO:David Amber - Second Time Around.mp4
#BPM:392.08
#GAP:5224
#YEAR:2015
#LANGUAGE:English
: 0 3 5 Can
: 8 3 2  we
: 16 6 5  start
: 24 3 5  o
: 28 13 7 ~
: 42 4 5 ~
: 48 9 5 ver
- 60
: 62 5 5 or
: 71 2 2  is
: 79 3 5  this
: 87 6 7  real
: 96 5 9 ly
: 104 3 7  the
: 111 6 5  end
<strong>- 124
</strong>: 127 4 5 And
: 136 5 2  now
: 144 6 5  I
: 152 3 5  won
: 156 10 7 ~
: 168 6 5 ~
: 176 6 5 der
E
</code></pre>

### Duet:

```
#ARTIST:David Amber
#TITLE:Second Time Around
#MP3:David Amber - Second Time Around.mp3
#COVER:David Amber - Second Time Around [CO].jpg
#BACKGROUND:David Amber - Second Time Around [BG].jpg
#VIDEO:David Amber - Second Time Around.mp4
#BPM:392.08
#GAP:5224
#YEAR:2015
#LANGUAGE:English
#P1:Ashley Jana
#P2:Raymond Lee
P 1
: 0 3 5 Can
: 8 3 2  we
: 16 7 5  start
* 24 3 5  o
* 28 12 7 ~
: 41 5 5 ~
: 48 9 5 ver
- 60
: 62 5 5 or
: 71 2 2  is
: 79 3 5  this
: 87 6 7  real
: 96 5 9 ly
: 104 3 7  the
: 111 6 5  end
- 124
: 127 4 5 And
: 136 5 2  now
: 144 6 5  I
: 152 3 5  won
: 156 10 7 ~
: 168 6 5 ~
: 176 6 5 der
P 2
: 544 3 0 I
: 551 13 -5  know
: 566 6 -5  that
: 574 5 -5  I
: 581 12 -7 ~
: 599 5 -2 've made
: 608 4 -3  some
: 616 2 -5  mis
* 624 7 -5 takes
* 632 1 -4 ~
* 635 4 -5 ~
: 640 14 -7 ~
: 655 2 -10 ~
- 667
: 671 7 0 You
: 680 12 -5  were
* 695 1 -7  all
* 697 3 -5 ~
: 703 13 -5  give
: 719 4 -7  and
E
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://karedi.gitbook.io/karedi/next-level/txt-file-format.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
