<Website>

getID3

PHK Home

File: /lib/module.misc.cue.php

Size:4798
Storage flags:strip

<?php
































class getid3_cue extends getid3_handler
{
public 
$cuesheet = array();

public function 
Analyze() {
$info = &$this->getid3->info;

$info['fileformat'] = 'cue';
$this->readCueSheetFilename($info['filenamepath']);
$info['cue'] = $this->cuesheet;
return 
true;
}



public function 
readCueSheetFilename($filename)
{
$filedata file_get_contents($filename);
return 
$this->readCueSheet($filedata);
}





public function 
readCueSheet(&$filedata)
{
$cue_lines = array();
foreach (
explode("\n"str_replace("\r"null$filedata)) as $line)
{
if ( (
strlen($line) > 0) && ($line[0] != '#'))
{
$cue_lines[] = trim($line);
}
}
$this->parseCueSheet($cue_lines);

return 
$this->cuesheet;
}






public function 
parseCueSheet($file)
{

 
$track_on = -1;

for (
$i=0$i count($file); $i++)
{
list(
$key) = explode(' 'strtolower($file[$i]), 2);
switch (
$key)
{
case 
'catalog':
case 
'cdtextfile':
case 
'isrc':
case 
'performer':
case 
'songwriter':
case 
'title':
$this->parseString($file[$i], $track_on);
break;
case 
'file':
$currentFile $this->parseFile($file[$i]);
break;
case 
'flags':
$this->parseFlags($file[$i], $track_on);
break;
case 
'index':
case 
'postgap':
case 
'pregap':
$this->parseIndex($file[$i], $track_on);
break;
case 
'rem':
$this->parseComment($file[$i], $track_on);
break;
case 
'track':
$track_on++;
$this->parseTrack($file[$i], $track_on);
if (isset(
$currentFile)) 
 {
$this->cuesheet['tracks'][$track_on]['datafile'] = $currentFile;
}
break;
default:

 
$this->parseGarbage($file[$i], $track_on);
break;
}
}
}







public function 
parseComment($line$track_on)
{
$explodedline explode(' '$line3);
$comment_REM = (isset($explodedline[0]) ? $explodedline[0] : '');
$comment_type = (isset($explodedline[1]) ? $explodedline[1] : '');
$comment_data = (isset($explodedline[2]) ? $explodedline[2] : '');
if ((
$comment_REM == 'REM') && $comment_type) {
$comment_type strtolower($comment_type);
$commment_data trim($comment_data' "');
if (
$track_on != -1) {
$this->cuesheet['tracks'][$track_on]['comments'][$comment_type][] = $comment_data;
} else {
$this->cuesheet['comments'][$comment_type][] = $comment_data;
}
}
}







public function 
parseFile($line)
{
$line substr($linestrpos($line' ') + 1);
$type strtolower(substr($linestrrpos($line' ')));


 
$line substr($line0strrpos($line' ') - 1);


 
$line trim($line'"');

return array(
'filename'=>$line'type'=>$type);
}







public function 
parseFlags($line$track_on)
{
if (
$track_on != -1)
{
foreach (
explode(' 'strtolower($line)) as $type)
{
switch (
$type)
{
case 
'flags':

 
$this->cuesheet['tracks'][$track_on]['flags'] = array(
'4ch' => false,
'data' => false,
'dcp' => false,
'pre' => false,
'scms' => false,
);
break;
case 
'data':
case 
'dcp':
case 
'4ch':
case 
'pre':
case 
'scms':
$this->cuesheet['tracks'][$track_on]['flags'][$type] = true;
break;
default:
break;
}
}
}
}







public function 
parseGarbage($line$track_on)
{
if ( 
strlen($line) > )
{
if (
$track_on == -1)
{
$this->cuesheet['garbage'][] = $line;
}
else
{
$this->cuesheet['tracks'][$track_on]['garbage'][] = $line;
}
}
}







public function 
parseIndex($line$track_on)
{
$type strtolower(substr($line0strpos($line' ')));
$line substr($linestrpos($line' ') + 1);

if (
$type == 'index')
{

 
$number intval(substr($line0strpos($line' ')));
$line substr($linestrpos($line' ') + 1);
}


 
$explodedline explode(':'$line);
$minutes = (isset($explodedline[0]) ? $explodedline[0] : '');
$seconds = (isset($explodedline[1]) ? $explodedline[1] : '');
$frames = (isset($explodedline[2]) ? $explodedline[2] : '');

switch (
$type) {
case 
'index':
$this->cuesheet['tracks'][$track_on][$type][$number] = array('minutes'=>intval($minutes), 'seconds'=>intval($seconds), 'frames'=>intval($frames));
break;
case 
'pregap':
case 
'postgap':
$this->cuesheet['tracks'][$track_on][$type] = array('minutes'=>intval($minutes), 'seconds'=>intval($seconds), 'frames'=>intval($frames));
break;
}
}

public function 
parseString($line$track_on)
{
$category strtolower(substr($line0strpos($line' ')));
$line substr($linestrpos($line' ') + 1);


 
$line trim($line'"');

switch (
$category)
{
case 
'catalog':
case 
'cdtextfile':
case 
'isrc':
case 
'performer':
case 
'songwriter':
case 
'title':
if (
$track_on == -1)
{
$this->cuesheet[$category] = $line;
}
else
{
$this->cuesheet['tracks'][$track_on][$category] = $line;
}
break;
default:
break;
}
}







public function 
parseTrack($line$track_on)
{
$line substr($linestrpos($line' ') + 1);
$track ltrim(substr($line0strpos($line' ')), '0');


 
$datatype strtolower(substr($linestrpos($line' ') + 1));

$this->cuesheet['tracks'][$track_on] = array('track_number'=>$track'datatype'=>$datatype);
}

}


For more information about the PHK package format: http://phk.tekwire.net