Here is a list of resources used to create this site:
While some chiptune formats encapsulate all songs for a given game into a single file, some formats split each song into a separate file and then bundle the files into a common archive format. An example of the latter is SNES SPC files. The prevailing method for bundling all SPC songs for a game is to compress them into a RAR package with the extension '.rsn'.
Salty Game Music Player introduces an archive format called .gamemusic. This is simple resource format that essentially concatenates a series of files together with a simple header. The format is as follows (multi-byte numbers are big-endian):
16 bytes: file signature: 'Game Music Files' 4 bytes: number of files (n) in the archive n * 4 bytes: table of absolute offsets to file data [file data]
The length of each file can be derived from successive absolute offsets, or (in the case of the last file) the difference between the file length and the last file offset.
After concatenating a series of song files into a .gamemusic file, the files are compressed using 'xz --check=crc32' and renamed with a .gamemusicxz extension. The '--check=crc32' is necessary because Salty Game Music Player uses XZ Embedded for decompression which requires the simplified integrity check.
PSF files allow for loading other PSF files from the same directory in a sort of shared library scheme. To simplify managing a set of PSF files, a .psfarchive file transports a concatenation of PSF files. This scheme is similar to .gamemusic, but also includes filename information since the files use filenames to reference each other.
All multi-byte numbers of big endian:
16 bytes: file signature: 'PSF Song Archive' 4 bytes: number of files (n) in the archive n * 12: file record table, one per file in the archive [filename table] [file data]
The format of each file record is as follows:
4 bytes: absolute offset of the file within the archive 4 bytes: file size in bytes 4 bytes: absolute offset of the filename within the archive
The filename table has NULL-terminated filename strings. The individual filenames are referenced from the file record table. It should be unnecessary to traverse the filename table by itself.
The PSF format is identified with a signature of 'PSF'. Salty Game Music Player can play these. However, it can also play PSF files with a signature of 'psf'. These are the same as 'PSF' files except that the main file payload is compressed using 'xz --check=crc32' instead of zlib, yielding slightly better compression.