...

View Full Version : Read ID3 information in different directory



Hug_It
06-07-2005, 07:47 PM
I'm having trouble figuring out how to get this class to read the information it needs from a directory other than the one it's located. The class pulls the ID3 information from MP3 files and works great as long as the files are in the same directory. How would I force it to look at files in a different one. Say in "podcasts/"?

class CMP3File {
//properties
var $title;
var $artist;
var $album;
var $year;
var $comment;
var $genre;

function getid3($file)
{ // read the ID3 or ID3v2 tag from an MP3 file
if (file_exists($file))
{ //after verifying the file exists,
$id_start = filesize($file) - 128;

$fp = fopen($file, "r");
fseek($fp, $id_start);
$tag = fread($fp,3);
if ($tag == "TAG")
{
$this->title = stripJunk(trim(fread($fp, 30)));
$this->artist = stripJunk(trim(fread($fp, 30)));
$this->album = stripJunk(trim(fread($fp, 30)));
$this->year = stripJunk(trim(fread($fp, 4)));
$this->comment = stripJunk(trim(fread($fp, 30)));
$this->genre = stripJunk(trim(fread($fp, 1)));
fclose($fp);
return true;
}
else
{ // No ID3 tag
fclose($fp);
return false;
}
} else //the file doesn't exist
return false;
}


Thanks in advance for any ideas or code!

marek_mar
06-07-2005, 08:20 PM
Tryed:


$my_file = new CMP3File;
$my_file->getid3('podcasts/my_file.mp3');

??

Hug_It
06-07-2005, 08:36 PM
Well I go through that class in a loop until all the files in the directory are read so I don't want to specify the exact file. Just the directory. Does that make sense? I'm fairly new at this so if I'm not providing you with enough info, I appologize :)

Hug_It
06-07-2005, 08:50 PM
Maybe I should provide a little more code. Basically it goes through and lists all the files and echoes back the tag info in an rss format.



$dirArray = getDir("podcasts/");
while (list($filename, $filedate) = each($dirArray)AND $maxFeed > 0) {
$mp3file = new CMP3File;
$mp3file->getid3 ($filename);
print "<item>\n";
echo ("<title>$mp3file->title</title>\n");
echo ("<link>" . $rootMP3URL . "/". htmlentities(str_replace(" ", "%20", $filename)) ."</link>\n");
echo ("<description>$mp3file->title - $mp3file->album - $mp3file->artist</description>\n");
echo ("<pubDate>".date("r",$filedate)."</pubDate>\n");
echo ("<enclosure url=\"".htmlentities($rootMP3URL)."/". htmlentities(str_replace(" ", "%20", $filename)) ."\" length=\"");
echo filesize($filename);
echo ("\" type=\"audio/mpeg\"/>\n"); // Training slash for XML
print "</item>\n\n";
$maxFeed--;
}

print "</channel>\n</rss>\n";

// Functions and Classes
function stripJunk ($text) {
// Strip non-text characters
for ($c=0; $c<strlen($text); $c++) {
if (ord($text[$c]) >= 32 AND ord($text[$c]) <= 122)
$outText.=$text[$c];
}
return $outText;
}

class CMP3File {
//properties
var $title;
var $artist;
var $album;
var $year;
var $comment;
var $genre;

function getid3($file)
{ // read the ID3 or ID3v2 tag from an MP3 file
if (file_exists($file))
{ //after verifying the file exists,
$id_start = filesize($file) - 128;

$fp = fopen($file, "r");
fseek($fp, $id_start);
$tag = fread($fp,3);
if ($tag == "TAG")
{
$this->title = stripJunk(trim(fread($fp, 30)));
$this->artist = stripJunk(trim(fread($fp, 30)));
$this->album = stripJunk(trim(fread($fp, 30)));
$this->year = stripJunk(trim(fread($fp, 4)));
$this->comment = stripJunk(trim(fread($fp, 30)));
$this->genre = stripJunk(trim(fread($fp, 1)));
fclose($fp);
return true;
}
else
{ // No ID3 tag
fclose($fp);
return false;
}
} else //the file doesn't exist
return false;
}
}

function getDir($mp3Dir) {
// Returns directory as array[file]=date in newest to oldest order
$dirArray = array();
$diskdir = "./$mp3Dir/";
if (is_dir($diskdir)) {
$dh = opendir($diskdir);
while (($file = readdir($dh)) != false ) {
if (filetype($diskdir . $file) == "file" && $file[0] != ".") {
if (strrchr(strtolower($file), ".") == ".mp3") {
$ftime = filemtime($mp3Dir."/".$file);
$dirArray[$file] = $ftime;
}
}
}
closedir($dh);
}
asort($dirArray);
$dirArray = array_reverse($dirArray);
return $dirArray;
}

?>

marek_mar
06-07-2005, 11:30 PM
The simplest anwser would be to change
$mp3file->getid3 ($filename);
into
$mp3file->getid3 ('podcasts/' . $filename);
You have to add the path to the file.
BTW there was an error in my last post.

Hug_It
06-07-2005, 11:39 PM
Brilliant!!!

You know you look at something for soooo long and the most obvious things get overlooked.

Thanks sooo much!!!



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum