Data Compression
Jump to navigation
Jump to search
Compressing your assets will let you fit more data on a cartridge. But which data should you compress, and how? What are the tradeoffs?
TODO: Link to decoding libraries / compression tools.
Data Compression
Any data can be compressed with a general-purpose data compression algorithm, such as Deflate. However, this is generally not as effective for media, like images, audio, or video.
Images
- Raw
- JPEG
- HVQ
Audio
TODO: Calculate bit rates at different sample rates. Find samples for comparison or create a test ROM.
The microcode and audio libraries that come with LibUltra support PCM and VADPCM. TODO: What about LibDragon?
- PCM: Baseline for comparison: 16 bits per sample. This is raw, uncompressed audio.
- VADPCM: Used in many retail Nintendo 64 games. Always 4.5 bits per sample, encoded in blocks of 16 samples.
- MP3: "Known to be possible." Used in some retail Nintendo 64 games, such as Conker's Bad Fur Day.
- Music can also be stored in MOD or MIDI format, but this is not a type of compression.
Encoding | Sample Rate | Bit rate (kbit/s) | Length per megabyte (s/MiB) | Capacity of 64 MiB cartridge (h:mm:ss) |
---|---|---|---|---|
16-bit PCM | 44.1 kHz | 706 kbit/s | 11.9 s/MiB | 12:41 |
32 kHz | 512 kbit/s | 16.4 s/MiB | 17:29 | |
22.05 kHz | 353 kbit/s | 23.8 s/MiB | 25:22 | |
16 kHz | 256 kbit/s | 32.7 s/MiB | 34:57 | |
VADPCM | 44.1 kHz | 198 kbit/s | 42.3 s/MiB | 45:05 |
32 kHz | 144 kbit/s | 58.3 s/MiB | 1:02:08 | |
22.05 kHz | 99.2 kbit/s | 84.5 s/MiB | 1:30:11 | |
16 kHz | 72.0 kbit/s | 117 s/MiB | 2:04:17 |
Note that 1 MiB is 1024*1024 bytes, and 1 kbit is 1,000 bits.
Video
TODO: How easy is it to use these codecs? Are there code samples?
- HVQM: "Known to be possible." Used by some retail Nintendo 64 games.
- H.264: "Known to be possible." Giovanni Bajo is working on a port of Dragon's Lair, using H.264 for the video.