A few months ago, I got myself a 2009 Civic EX, which I totally love. One of the cool features on it is a USB audio interface. You can plug in a USB stick full of music and have it play back. It works very well, but with a problem- it's pretty impossible to navigate 16GB of music with a one line display.
I put together a little PHP script to print out the contents of my stick in the same order as is read by the Civic. It's a dead-simple script but might save someone a few minutes. I've tested it on Linux only, but it should work across platforms (but I believe it will require PHP5)
I also came across a useful shell script that forces the directory ordering to be alphanumeric, which you can find at the bottom of this thread.
Below is the code to print a directory listing. By default, it only prints folders. Two flags are supported: "-t" will print tracks, and "-n" will hide directory names.
One last thing that might save you some hunting- according to the Civic manual, the system is capable of handling up to 700 folders and about 65,000+ tracks. I've only pushed it to 100 folders and about 1100 tracks so far.
#!/usr/bin/php
<?php
$media_types="mp3|m4a|wma";
// check options
$list_tracks=false;
$list_directories=true;
for ($i=1;$i<sizeof($argv)-1;$i++){
if ($argv[$i][0]=='-') {
if (false !== stripos($argv[$i],'t')) {
$list_tracks=true;
}
if (false !== stripos($argv[$i],'n')) {
$list_directories=false;
}
} else {
die("Invalid option " + $argv[$i]);
}
}
$path = realpath($argv[sizeof($argv)-1]);
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$di=0;
$ti=1;
$media_dir=false;
$working=false;
$media_pattern='/\.'.$media_types.'$/i';
$tr_pad = ($list_tracks && $list_directories) ? ' ' : '';
foreach ($objects as $name => $object) {
if ($object->isFile()) {
if ($working != $object->getPath()) {
// start new dir
if ($media_dir && $list_tracks) {
echo "\n";
}
$media_dir=false;
$working = $object->getPath();
$ti=1;
}
if (!$media_dir) {
if (preg_match($media_pattern,$name)) {
$media_dir=true;
$di++;
if ($list_directories) {
$el = str_replace($path.DIRECTORY_SEPARATOR,'',$object->getPath());
echo substr(str_pad($di,2,'0',STR_PAD_LEFT),-2) . ' ' . str_replace(DIRECTORY_SEPARATOR,' :: ', $el) . "\n";
}
}
}
if ($list_tracks) {
if (preg_match($media_pattern,$name)) {
echo $tr_pad . substr(str_pad($di,2,'0',STR_PAD_LEFT),-3) . '-' . str_pad(($ti++),3,'0',STR_PAD_LEFT) . ' ' . $object->getBaseName() . "\n";
}
}
}
}
Search Terms: civic directory order, civic music, USB Audio directory order
No comments:
Post a Comment