#!/usr/bin/php $maxLength) { return substr($string, 0, $maxLength-3).'...'; } return $string; } function analyze($filename, &$total_duration, &$total_parse_time, $id3v2 = false) { if (!is_readable($filename)) return; try { $audio = new Mp3Info($filename, true); } catch (Exception $e) { return null; } echo sprintf('%15s | %4s | %7s | %0.1fkHz | %-11s | %-10s | %.5f', substrIfLonger(basename($filename), 15), formatTime($audio->duration), $audio->isVbr ? 'vbr' : ($audio->bitRate / 1000).'kbps', ($audio->sampleRate / 1000), isset($audio->tags1['song']) ? substrIfLonger($audio->tags1['song'], 11) : null, isset($audio->tags1['artist']) ? substrIfLonger($audio->tags1['artist'], 10) : null, $audio->_parsingTime).PHP_EOL; if ($id3v2 && !empty($audio->tags2)) { foreach ($audio->tags2 as $tag=>$value) { echo ' '.$tag.': '; if ($tag == 'COMM') { foreach ($value as $lang => $comment) { echo '['.$lang.'] '.$comment['short'].'; '.$comment['actual'].PHP_EOL; } } else echo $value.PHP_EOL; } } $total_duration += $audio->duration; $total_parse_time += $audio->_parsingTime; } function analyzeId3($filename, &$total_parse_time) { static $ID3; if ($ID3 === null) $ID3 = new getID3(); $t = microtime(true); $info = $ID3->analyze($filename); $parse_time = microtime(true) - $t; echo sprintf('%15s | %4s | %7s | %0.1fkHz | %-11s | %-10s | %.5f', substrIfLonger(basename($filename), 15), $info['playtime_string'], $info['audio']['bitrate_mode'] == 'vbr' ? 'vbr' : floor($info['audio']['bitrate'] / 1000).'kbps', ($info['audio']['sample_rate'] / 1000), isset($info['tags']['title']) ? substrIfLonger($info['tags']['title'], 11) : null, isset($info['tags']['artist']) ? substrIfLonger($info['tags']['artist'], 10) : null, $parse_time).PHP_EOL; $total_parse_time += $parse_time; } array_shift($argv); echo sprintf('%15s | %4s | %7s | %7s | %11s | %10s | %4s', 'File name', 'dur.', 'bitrate', 'sample', 'song', 'artist', 'time').PHP_EOL; $total_duration = $total_parse_time = $id3_parse_time = 0; foreach ($argv as $arg) { if (is_dir($arg)) { foreach (glob(rtrim($arg, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'*.mp3') as $f) { if (is_file($f)) { analyze($f, $total_duration, $total_parse_time); if ($compare) analyzeId3($f, $id3_parse_time); } } } else if (is_file($arg)) { analyze($arg, $total_duration, $total_parse_time, true); if ($compare) analyzeId3($f, $id3_parse_time); } } echo sprintf('%42s | %34s', 'Total duration: '.formatTime($total_duration), 'Total parsing time: '.round($total_parse_time, 5)).PHP_EOL; if ($compare) echo sprintf('%79s', 'Total getId3 parsing time: '.round($id3_parse_time, 5)).PHP_EOL;