Based on the original version of this document by Jeff and Brian, Peter has been adding revisions based on work with a 400 CD changer, the CDP-CX450. The document is now a compilation of our experiments and other web sources.
A lot of the commands and responses are only supported on the later players. However, this is not very important if you want to control everything from a computer and display all the information on your monitor.
We would like to build up a list of which models support which commands - if you can help by testing our work, please get in touch. In particular, we would like to know what the 0x22 query capacity command returns for different models. The returned 0x61 message includes a byte of data which may encode what level of features the deck supports.
Code | Description | Extended Data Format |
0x00 | Playing | No Extended Data |
0x01 | Stopped | No Extended Data |
0x02 | Paused | No Extended Data |
0x05 | No Disc Note: Usually this means you asked for a disc that doesn't exist. On rare occasions it represents a disc loaded backwards. See also response 0x53 which returns a disc number. |
No Extended Data |
0x06 | Changing Discs | No Extended Data |
0x08 | Ready Note: The ready signal is generated when certain commands are completed on certain CD changers. Don't rely on it though. |
No Extended Data |
0x09 | Start of track Note: I have not seen this response on the CDP-CX450, but it has been reported by Kamal Mostafa to Nirvis and Tramm Hudson's Linux JukeBox Control people. See also command 0x24. |
Unknown |
0x0C | Under 30 Seconds Remaining Note: This message is generated by the decks while playing a track when they think there are 29 (maybe 30?) seconds left. The message is also produced when a track less than 30 seconds long is played. Also note that the CD audio spec allows for this length to be reported wrong, so don't trust it as gospel. |
No Extended Data |
0x0E | Duplicate Command / Error - Bad Arguments Note: This response is generated when certain commands are issued twice in close succession. It is also often seen as an error when an argument is called with inappropriate arguments. |
No Extended Data |
0x0F | Error Note: This is the message we relied on to find likely commands which we still don't understand how to use. |
No Extended Data |
0x10 | No Memo Note: Seen in response to command 0x40 (see also command 0x48 and response 0x1C). |
No Extended Data |
0x11 | No Delete File Note: No track delete record defined for disc specified. |
No Extended Data |
0x12 | No Group Note: The group requested does not exist, or has no name. I have only had 0x12 back from my CDP-CX450, not 0x13. |
No Extended Data |
0x13 | No Group Note: The group requested does not exist. See also 0x12. This message has been reported on the CX90ES, it has not been seen on the CDP-CX450. |
No Extended Data |
0x14 | Disc Not Loaded Note: Information was requested from a disc not currently loaded. |
No Extended Data |
0x15 | Track Not Available or Disc Not Loaded Note: Most commonly produced when data is requested for a track that isn't on the disc. |
No Extended Data |
0x18 | Door Open Note: I don't think this is supported on the CDP-CX450. |
No Extended Data |
0x19 | Unknown Note: Believed to be an error message in response to command 0x63. |
No Extended Data |
0x1A | Unknown Note: Believed to be an error message in response to command 0x64. |
No Extended Data |
0x1B | Program Edit Faied / Artist Name Set Failed Note: Generated by CDP-CX450 in response to the 0x8A programming command and the 0x93 Artist Memo Set command. |
No Extended Data |
0x1C | No Memo Note: Seen in response to command 0x48. See also command 0x40 and response 0x10. |
No Extended Data |
0x1D | No Track Title Seen in response to the track title query 0x4A on CDP-CX450. May have different meaning on older decks, possibly a long data (i.e. multi-packet) end marker. |
No Extended Data |
0x1F | Memo Written Note: Acknowledgement of a set memo (command 0x80). Also sent by CDP-CX450 in response to 0x8A command. |
No Extended Data |
0x2E | Power On | No Extended Data |
0x2F | Power Off | No Extended Data |
0x40 | Disc Memo Note: Response to memo query (command 0x40). See also 0x80. |
[disc] [13 bytes ASCII] |
0x41 | Query Available Tracks Note: Response provides bit-packed byte inverted (i.e. LSB first) list of available tracks. Just because I know that isn't clear here's a quick example. You get 13 bytes, and there are 99 possible tracks on a CD. So, the first two bytes could be: 11110111 00000111 and the rest are zeros. A one represents a track which is present and not in the delete file. Some CD changers don't have a delete file. So for those of you without, a delete file allows you to flag tracks to be skipped in normal play and shuffle modes. |
[disc] [13 bytes bit-packed byte inverted] |
0x42 | Group Memo Note: Response to group memo query 0x42. |
[group] [13 bytes ASCII] |
0x43, 0x44, 0x45, 0x78 | Group Contents Part 1,2,3,4 Note: Data seems to be encoded in a similar way to the Deck Contents (0x72, 0x73, 0x74 and 0x75). It appears that 200 changers only return 0x43 and 0x44, while 300 changers would return only 0x42, 0x44 and 0x45. Each packet codes for up to 104 discs, so the last packet has room for some extra data, the meaning of which is unclear. |
[group] [13 bytes bit-packed byte reversed] |
0x46 | Unknown Must have some meaning otherwise Group Contents Part 4 would have been 0x46 and not 0x78. However I have not yet seen this response and have no idea what it may mean. |
Unknown |
0x47 | CDText Disc Detected Note: The disc loaded has CDText information. CDText is another Sony spec which provides track titles to CD players capable of recognizing the information. This is produced when a CDText disc is loaded or in response to command 0x27.
We have seen: |
[eight bytes] |
0x48 | Enhanced Disc Memo Note: Response to command 0x48, see also response 0x49, and the similar 0x40 and 0x80. This version will return CDText if the disc has it AND the disc is loaded (otherwise you only get the 20 bytes that the player stores in its memory). The meaning of the second byte is unknown, we have seen 0x00 and 0x09.
Meaning of the third byte: |
[disc] [byte] [byte] [upto 14 bytes ASCII] |
0x49 | Enhanced Disc Memo Continued Note: Seen following a response 0x48 (part 1), requested by a 0x48 command. |
[part number] [upto 16 bytes ASCII] |
0x4A | CDText Track Name Only available on CDText discs, the bytes second and third bytes match those returned in response 0x48. |
[track] [byte] [byte] [upto 14 bytes ASCII] |
0x4B | CDText Track Name Continued Only available on CDText discs, following a 0x4A (part 1). If the end of the track name happens to fit exactly into a whole number of packets, still get a final extra packet with no ASCII. This means you can tell when all the title has been received. |
[part number] [upto 16 bytes ASCII] |
0x50 | Playing Disc Note: Generated at start of track playback. Minutes and seconds reported are based on total track length. |
[disc] [track] [min] [sec] |
0x51 | Playing Disc at... Note: Generated once a second in verbose mode. Five times at the minute breaks. Reported values are current position in a given track. For those unfamiliar with indexes on CDs, it is part of the spec which provides for the subdivision of tracks. It is rarely used. |
[track] [index] [min] [sec] |
0x52 | Displaying Disc Note: Indicates disc information being displayed on the face of player. Has also been reported a "TOC Read" |
[disc] |
0x53 | Missing Disc Note: Disc requested wasn't present. See also 0x05 which does not return a disc number. |
[disc] |
0x54 | Loading Disc | [disc] |
0x55 | Disc has no memo | [disc] |
0x58 | Loaded Disc Note: Usually issued after 0x06 indicating destination disc has been reached. |
[disc] |
0x5D | BCD to Hex Note: Result of a BCD to hexadecimal conversion request. |
[hex] |
0x60 | Disc Info | [disc] [indexes] [tracks] [min] [sec] [frames] |
0x61 | Deck Size Note: This is a response to the 0x22 query. It returns a deck capacity encoded in the same way as disc number. This means you ought to look at the very first byte of the packet to determine if talking size 1-200 or 201-400. Here are the responses we have seen (please fill in blanks if you can): |
[decksize] [unknown] |
0x62 | Queried Track Note: Response to track length query 0x45. |
[disc] [track] [min] [sec] |
0x63 | XXXX information for disc Note: Response to an 0x63 enquiry, which only works on the current disc. The seven bytes are usually all zeros, but for the South Park Album, "Chef Aid", I got 0x50 0x99 0x74 0x91 0x70 0x02 0x50. This data does not depend on the Delete File or the Artist File. |
[disc] [7 bytes] |
0x64 | YYYY information for track Note: Sometimes seen as response to 0x64 command. I think it is some sort of copyright/publisher marker of a track (which seems usually to be the same for all tracks on one disc), while 0x63 is the equivalent for a disc. For example, "Sailing To Philidelpia" has data 0x5D 0x25 0x80 0x20 0x00 0x00 0x15 0x40 for all tracks. |
[track] [8 bytes] |
0x6A | Deck Model Note: Response to command 0x6A. Generally this response will match the model number printed on the outside of the player, however there have been reports that newer models may only report a series identification (e.g. a CDP-CX355 will report CDP-CX300). |
[ASCII] |
0x70 | Deck Mode Note: This is a general status message.
The first byte indicates the player status: This is clearly bit packed data, but all of the details of which bits represent which conditions haven't been puzzled out. Bit 2 is suspected to be a player empty flag, and bit 3 a power off flag, bits 6 & 7 appear to code playback states. No other values have been observed, but thanks to everyone who has paid attention to how the messages change.
The second byte contains the following information: The meaning of the third byte isn't clear - it may be reserved for later features, it seems to always be 0x00. The fourth byte is the disc currently loaded. The fifth byte is the track number (if paused or playing) or 0x00 (if stopped). |
[bit packed status] [bit packed status] [unknown] [disc] [track] |
0x71 | Disc Memory Information Note: This is a bit-packed general status message, seen in response to command 0x0E. Bit set at position 0x01 means disc has a memo (title) set |
[bit packed status (one byte)] |
0x72, 0x73, 0x74, 0x75 | Deck Contents Part 1,2,3,4 Note: This is the bit-packed byte reversed list of discs the player thinks it has. The response is always three packets for 300 disc decks, four packets on 400 disc decks. Presumably only one or two packets are returned on smaller decks. Note, these packets do not hold 100 discs each (that would be too easy!). Instead they hold up to 104 discs each - the final packet is still 13 bytes and so has some extra bits/bytes at the end. |
[13 bytes bit-packed byte reversed] |
0x78 | Group Contents Part 4 Seen following responses 0x43, 0x44 and 0x45 on a 400 disc changer. See also Deck Contents (0x72, 0x73, 0x74 and 0x75) which are similarly encoded. |
[group] [13 bytes bit-packed byte reversed] |
0x80 | Disc Memo Continued Seen following a response 0x40, requested by a 0x40 command. Newer players store 20 characters for disc names, it seems 0x40 returns only the first 13 for backwards compatibility. The second byte seems to be 02, this could be the part number (i.e. the 0x40 would be part one). |
[disc] [02] [ASCII] |
0x83 | Door Closed | No Extended Data |
0x92 | Artist Name The second byte is the packet number for long artist names. |
[artist number] [packet number] [up to 13 bytes ASCII] |
0x93 | Artist Not Setup | [artist number] |
0x94 | Artist Data Which discs have this artist assigned to them. On my CDP-CX450 I get 25 packets, for 400 discs (up to 200 artists). Each packet contains bytes for 16 discs, the byte being zero for no artist, or the artist number for that disc (plain hex encoded). What do smaller decks return? Clearly if Sony introduce a player with over 200 artists this format will have to be extended. |
[packet number] [16 bytes of artist numbers] |
0x96 | Artist/Group Mode Note: Response to command 0x32, 0x74 or 0x96. If in group mode, [group] is the group number. Likewise if in artist mode, [artist] is the artist being played. If both [group] and [artist] are zero then not in either mode. |
[group] [artist] [max groups] [max artists] |