Files
A song folder should hold only files a game reads. Backups, editor projects and files the operating system adds, such as
desktop.ini, Thumbs.db and __MACOSX, make the folder larger and do nothing. Some games read files this page doesn’t name, such as YARG’s .aiff audio, and its _clean and _explicit versions of some stems, such as vocals_clean and vocals_1_explicit; those are allowed.
File names
Required: each file name in lowercase, as written on this page.The chart
The chart isnotes.chart or notes.mid. Syntax gives the structure of a .chart file.
A song folder should hold only one chart.
Edge case: a scanner that finds both uses notes.mid.
song.ini
Required: asong.ini file. It gives the song’s metadata, such as its name and artist, and settings that change how the chart plays.
- A scanner reads only
song.ini, and ignores any other.inifile. - song.ini syntax gives the file’s syntax and encoding. Recommended: UTF-8.
Audio
A song’s audio is one file, or several files called stems that are combined while playing. Each file’s name says what it holds:- Required: at least one of these files.
- Each file is one of these names with the extension
.opus,.ogg,.mp3or.wav. Recommended:.opus, at about 80 kbps: it’s the smallest at the same quality. An.oggfile should be between 192 and 320 kbps. - YARG also plays these names with the extension
.aiff. Clone Hero doesn’t, so a.aifffile isn’t one of the song’s audio files, though a folder may hold one: see Files. - Required: at most one file for each name.
- A scanner plays every audio file it finds together at the same time. So a folder should not hold
drumswith the numbereddrums_files, orvocalswith the numberedvocals_files.
guitar. A common convention is to name a song’s only audio file guitar. Alone, it plays as song does. Once any other stem is added, a full mix in guitar drops to 50% volume each time the player misses a guitar note, so the full mix belongs in song.
Art and video
- Album art:
album.png,album.jpgoralbum.jpeg, 512x512 pixels. Recommended:.png. Art that started as a JPEG, such as one downloaded from a store, staysalbum.jpg: converting it to PNG makes it larger without making it better. A file’s extension should match its content. - Background images:
.png,.jpgor.jpegimages whose names start withbackground, such asbackground.jpgandbackground2.png, at least 1280x720 pixels. A folder may hold several. A scanner shows one of them, picked at random, each time the chart is played. - Background video:
video.webmis strongly recommended, with the VP8 codec: Clone Hero plays video through Unity, which decodes only VP8 in a.webmfile on desktop platforms. A scanner also plays a video with another extension, such asvideo.mp4, where it can, but.webmis the only format every game plays on every platform. A scanner shows the video instead of the background image when a folder holds both.
album.png, album.jpg and album.jpeg.
Edge case: a video in a subfolder. When a song is played, Clone Hero also looks for the video in the song folder’s subfolders, and plays the first one it finds. YARG, and scan-chart’s video checks, look only in the song folder itself.
Deprecated
crowdaudio: crowd noise and singing. Games supply their own crowd.previewaudio: the excerpt the song list plays, which a scanner plays whole. Setpreview_start_timeandpreview_end_timeinsong.iniinstead.
Invalid forms
Two audio files with one name, such as guitar.ogg and guitar.opus
Two audio files with one name, such as guitar.ogg and guitar.opus
Games choose differently between them: YARG plays the first of
.opus, .ogg, .mp3 and .wav, and Clone Hero the last one in the folder listing. Every scanner then plays a different file. scan-chart reports it as multipleAudio, and the folder should keep one.No audio file
No audio file
A folder whose only audio is
preview, crowd or .aiff files has no audio. Clone Hero loads the song without sound. From its code, it still plays crowd audio if there is one. YARG doesn’t load the song, unless the folder has crowd audio or a stem in .aiff, such as song.aiff, which YARG counts as the song’s audio. scan-chart reports it as noAudio.A chart file with another name, such as song.mid
A chart file with another name, such as song.mid
Clone Hero and YARG don’t read it, so a folder with no
notes.chart or notes.mid isn’t a song there. YARG also reads notes.midi as a .mid chart. A scanner that reads such a file reads it as the chart only when the folder has no notes.chart or notes.mid, and prefers a .mid file, as scan-chart does, which reports invalidChart.No song.ini
No song.ini
A scanner takes a
.chart song’s metadata from its [Song] section, and hashes a .mid song’s metadata as unset, as Clone Hero’s HashScanTool and scan-chart do: see SongHash. Clone Hero loads a .chart folder without song.ini, and writes a song.ini into the folder. It doesn’t load a .mid folder without one. YARG loads neither. scan-chart reports noMetadata.A file name in another letter case, such as Song.ini
A file name in another letter case, such as Song.ini
A scanner reads
song.ini and the chart in any letter case, as scan-chart does. Clone Hero finds the chart only with a lowercase extension: it finds Notes.mid, but not notes.MID. It opens song.ini, album art and audio by their lowercase names. So on Windows, whose file system ignores letter case, it finds them in any letter case, and on other systems only in lowercase. YARG finds a file in any letter case when it scans. From its code, on a file system that doesn’t ignore letter case, YARG then loads the chart only by its lowercase name. scan-chart reports the chart and song.ini as invalidChart and invalidIni. It doesn’t read audio, album art or video in another letter case: it reports audio as invalidAudio, and album art, background images and video as fileNameCase. fixIssues renames a file it reports as fileNameCase in lowercase.Two names that differ only in letter case
Two names that differ only in letter case
On Windows, the two can’t exist in one folder at all. On other systems, a scanner reads the one in lowercase, as scan-chart does, and as Clone Hero does for
song.ini. Which chart Clone Hero reads depends on the order the file system lists them in. YARG skips every file whose name is the same as another’s in lowercase, so song.ini and Song.ini together hide both.A song folder inside a song folder
A song folder inside a song folder
Clone Hero loads both songs. YARG doesn’t look inside a song folder, so it doesn’t list the inner song.