Deprecation Notice

This site no longer works due to Google blacklisting the music player plugin that enabled it.

Good News!

There is a better version of this site available at:

Cirrus Retro

The site works on multiple modern desktop browsers as well as mobile browsers. Try it out!

About This Game Music Website

Contact

If you have feedback, comments, questions, metadata corrections, copyright concerns, or suggestions about how this site should develop, please email me: Mike Melanson (mike -at- multimedia.cx)

Song Sources

The music hosted on this site has all been harvested from other sources. If you would like to download the music for offline use, try these links:

Technically

Source code for the Salty Game Music Player is available at Github.

Here is a list of resources used to create this site:

New Formats

This game music site inspired the creation of a few new file formats.

.gamemusic

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.

.psfarchive

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.

PSF vs. psf

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.