Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Song files and their formats

The machine plays five kinds of song. Each one is a file, or a pair of files, that holds both the music and the timed words. An MP3 on its own is not a song, because it has no words in it.

The five kinds of song

KindThe filesWhat the machine does with it
MIDI and KAROne .mid or .karReads all three karaoke conventions: Soft Karaoke @-headers, Lyric meta-events, and a named text track.
VideoOne MP4, with H.264 video and AAC audioPlays it as it is.
MP3+GAn MP3 with a .cdg of the same stemDraws the CD+G graphics itself, in Rust.
UltraStarA .txt beside the MP3 it namesReads its timed words and discards its pitches.
LRCAn .lrc beside the MP3 of the same nameFills each word, or lights each line.

An LRC file decides its own highlight. A file that times each word gets the word wipe. A file that times only its lines lights a whole line at a time, and counts you back in after a break.

A song’s language is an ISO 639-1 code, such as pt or en.

A two-file song may be inside a .zip. The packaging tools read an MP3+G, UltraStar or LRC song from a zip that holds that one song. A zip holding two songs is refused, and any other zip is passed over.

These files reach the machine inside a package. See Getting songs in.

Text encodings and writing systems

Many karaoke files are old, and their words are not in Unicode.

  • The machine detects a legacy encoding: Shift-JIS and the Windows code pages.
  • CJK works: a Japanese or Chinese song uses a font from the system.
  • No shaped scripts, and no right-to-left. Thai, Arabic and Indic need a text shaper, and this build does not include one.