ACDrive

From PhatHack Wiki
Jump to navigation Jump to search

ACDrive

ACDrive (Advanced Codec Drive) is the name used by Kenwood to describe car stereo headunits which can playback enhanced media created by PhatNoise Media Manager with many of the same searching features as PhatBox units.

This wiki page describes the ACDrive system and its hacking potential

Introduction

Kenwood ACDrive headunits can playback media created using PhatNoise Media Manager (PMM). This is often called mCD media. mCD media can include CDROM's, DVD's (for DVD capable units) and USB mass-storage devices (for USB capable devices.

When playing back mCD media you can browse by artist, album, genre and playlist. You can search alphabetically by artist, album and genre (but not playlist). Voice-prompt navigation is also possible. (non-mCD media can only be browsed by folder)

ACDrive headunits can playback mp3, wma and aac files.

Read more about ACDrive/mCD from Kenwood here: [1]

Technical Info

To allow fast navigation, mCD media contains a metadata database in an mcd directory in the root of the device. This is much like the ipod's itunesdb, though considerably simpler.

The MCD media contains (at least) the following files:

/mcd/
/mcd/mcd.db
/mcd/mcd.sig
/mcd/pkeys2.e
/mcd/pkeys2.sig

mcd.db

mcd.db is the song metadata database created by PMM. The structure has been reverse engineered, see mcd.db

pkeys2.e

This appears to be an array of RSA public keys used by the device (see below) for checking signatures of other files (such as mcd.db). pkeys2.e and pkeys2.sig are distributed with PhatNoise and never change. They can also be found on the sample cd distributed with ACDrive head units.

mcd.sig, pkeys2.sig

These are signature files for mcd.db and pkeys2.sig respectively, the signatures are generated in exactly the same way as PhatBox signatures as described in Signature except that the private signing keys are different.

The signing key for mcd.db has been extracted from PMM and can be found in mcdPrivateKey. This allows us to generate valid mcd.db/mcd.sig files for playback by the headunit!

The key used to sign pkeys2.e (and hence bless other signing keys) is not know. It is believed to be held by PhatNoise and not contained within the PMM software.

Other Files

mCD media also contains voice index files for voice navigation under the directories:

/mcd/tts/
/mcd/tts/an
/mcd/tts/pr

The files found here are reported by file to be Microsoft ASF. It should be possible create these files with something like festival.

Software

Phatnoise Media Manager is the software provided by Kenwood to create mCD media. A free software alternative has been developed and is available here: http://phatdb.sourceforge.net

Issues / Enhancements

The following forum thread mentions some current shortcomings of the ACDrive music navigations system:

http://forum.phathack.com/cgi-bin/yabb2/YaBB.pl?num=1147985035

Some of the criticisms include:

1. If you're in album mode and hit next album it takes you to the next album alphabetically, instead of the next album by the artist you're on. 2. Playlists are not alphabetically indexed making navigation difficult.

With an understanding of the file format, the reason for these becomes obvious. Albums are sorted alphabetically so that they can be searched using the letter search function. The letter search works on an index into the album->track mapping. If the mapping was not ordered the index would be useless.

There are two ways to fix this:

1. Sort the albums list by artist (ie. grouped by artist). This way you could letter search an artist, then switch to album mode and use up/down to navigate between albums of that artist. This would break the letter search function completely but it might be acceptable to some users.

2. Another possibility is to duplicate the albums list completely (make it twice as long as the number of tracks). The first half of the list can be grouped by artist as in 1. The 'track_id' field of each track would point to this (first) album entry. The second half of the list would be sorted alphabetically. The alpha index would then point into this second half of the list. This would allow searching just like 1. but maintain direct letter search for album. This has not been tested yet, but I expect it would work since the file format allows the map size (albums_len) to be larger than total number of tracks (n_tracks).

Furthermore, if option 1. was chosen, the album alpha index would become unused. By swapping 'album' and 'playlist' sections in the mcd.db file, you could fix problem number 2 (playlists not indexed), by using it to index your playlist. The disadvantage is that the headunit display would show 'playlist' while in album mode and vice-versa, though this may be acceptable for some users. (The voice index file could be swapped so that the mode announcement is correct).