jPSXdec is a cross-platform PlayStation 1 media decoder/converter.
Get the latest version here.

Monday, April 6, 2009


I was pleasantly surprised when I found someone concocted a clever way of using jPSXdec to decode CD-i audio.

As explained in Jonathan Atkins's CDXA documentation, the Sony Playstation 1 and the Phillips CD-i both used the same audio format on their CDs. It never occurred to me that the CD-i likely has a retro community still following it, much like the Playstation 1 does.

This video describes a working solution to extracting CD-i audio with jPSXdec that will work with any game. However, after the extraction, you have to manually break up the audio clips and possibly adjust the speed of some.

Alternatively, you could do the job that jPSXdec can't yet do so the extracted audio clips don't need any extra editing.

If you let jPSXdec do its best to index the CD (or raw music file), it will find all the audio sectors, but fails to concatenate most of the contiguous streams. You're left with several thousand audio clips with a duration of 1 sector. It wouldn't be too difficult to write a script that checks the audio properties (channel, frequency, etc) and finds what sectors should be combined into a single audio clip. It even sounds like someone has already managed to make some headway with this.

Adding better CD-i audio handling to jPSXdec is quite easy, and will be included in the next release (whenever I can get this redesign finished). As for CD-i video, I can't say I have much motivation (or time) to figure it out. But if anyone wants to get their hands dirty and write some decoding code of their own, I'd be happy to support them however I can.


  1. Hi, i'm KiiroBomber/LuigiBlood ^^
    (I'm not the Anonymous you did see before)

    Someone did a decoder for CDi CLUT image files on Java.
    I have the program, but it's not really easy to use, because i have to manually extract the pallette data and image data from a RTF file, in two files.
    But when extracting video data with IsoBuster like in the video, there's some problems.
    I found how to get rid of it :
    Choose "Extract RAW but convert to User Data" instead of "Extract RAW data".

    The program is there :
    (You can extract the source from the jar file)

  2. Ah thank you LuigiBlood. This code and your comments are very helpful in understanding the format. I took a quick look, and it appears to be very simple, so I should be able to include it in the next jPSXdec.

    I don't see any DYUV or Run Length being used, though. If you have anything about those formats, I can look at them well.

  3. This comment has been removed by the author.

  4. About RLE, apparently it's a variation of the CLUT format for CDi.
    I did check something in a hex editor, i had :
    "28 00 27 00 25 00 26 00 23 11" etc...

    I think the first byte is the color from the CLUT pallette table, and the second is the length to add with.
    Can i have your MSN so i can help you more easily ?