1)and($fred['version']>1)) { $fred['bitrate']="8000"; } else { $fred['bitrate']="32000"; } break; case "0010": switch ($index) { case "1": $fred['bitrate']="64000"; break; case "2": $fred['bitrate']="48000"; break; case "3": $fred['bitrate']="40000"; break; case "4": $fred['bitrate']="48000"; break; case "5": $fred['bitrate']="16000"; break; } break; case "0011": switch ($index) { case "1": $fred['bitrate']="96000"; break; case "2": $fred['bitrate']="56000"; break; case "3": $fred['bitrate']="48000"; break; case "4": $fred['bitrate']="56000"; break; case "5": $fred['bitrate']="24000"; break; } break; case "0100": switch ($index) { case "1": $fred['bitrate']="128000"; break; case "2": $fred['bitrate']="64000"; break; case "3": $fred['bitrate']="56000"; break; case "4": $fred['bitrate']="64000"; break; case "5": $fred['bitrate']="32000"; break; } break; case "0101": switch ($index) { case "1": $fred['bitrate']="160000"; break; case "2": $fred['bitrate']="80000"; break; case "3": $fred['bitrate']="64000"; break; case "4": $fred['bitrate']="80000"; break; case "5": $fred['bitrate']="40000"; break; } break; case "0110": switch ($index) { case "1": $fred['bitrate']="192000"; break; case "2": $fred['bitrate']="96000"; break; case "3": $fred['bitrate']="80000"; break; case "4": $fred['bitrate']="96000"; break; case "5": $fred['bitrate']="48000"; break; } break; case "0111": switch ($index) { case "1": $fred['bitrate']="224000"; break; case "2": $fred['bitrate']="112000"; break; case "3": $fred['bitrate']="96000"; break; case "4": $fred['bitrate']="112000"; break; case "5": $fred['bitrate']="56000"; break; } break; case "1000": switch ($index) { case "1": $fred['bitrate']="256000"; break; case "2": $fred['bitrate']="128000"; break; case "3": $fred['bitrate']="112000"; break; case "4": $fred['bitrate']="128000"; break; case "5": $fred['bitrate']="64000"; break; } break; case "1001": switch ($index) { case "1": $fred['bitrate']="288000"; break; case "2": $fred['bitrate']="160000"; break; case "3": $fred['bitrate']="128000"; break; case "4": $fred['bitrate']="144000"; break; case "5": $fred['bitrate']="80000"; break; } break; case "1010": switch ($index) { case "1": $fred['bitrate']="320000"; break; case "2": $fred['bitrate']="192000"; break; case "3": $fred['bitrate']="160000"; break; case "4": $fred['bitrate']="160000"; break; case "5": $fred['bitrate']="96000"; break; } break; case "1011": switch ($index) { case "1": $fred['bitrate']="352000"; break; case "2": $fred['bitrate']="224000"; break; case "3": $fred['bitrate']="192000"; break; case "4": $fred['bitrate']="176000"; break; case "5": $fred['bitrate']="112000"; break; } break; case "1100": switch ($index) { case "1": $fred['bitrate']="384000"; break; case "2": $fred['bitrate']="256000"; break; case "3": $fred['bitrate']="224000"; break; case "4": $fred['bitrate']="192000"; break; case "5": $fred['bitrate']="128000"; break; } break; case "1101": switch ($index) { case "1": $fred['bitrate']="416000"; break; case "2": $fred['bitrate']="320000"; break; case "3": $fred['bitrate']="256000"; break; case "4": $fred['bitrate']="224000"; break; case "5": $fred['bitrate']="144000"; break; } break; case "1110": switch ($index) { case "1": $fred['bitrate']="448000"; break; case "2": $fred['bitrate']="384000"; break; case "3": $fred['bitrate']="320000"; break; case "4": $fred['bitrate']="256000"; break; case "5": $fred['bitrate']="160000"; break; } break; case "1111": $fred['bitrate']="bad"; break; } // eo switch // Determine Sample Rate switch ($fred['version']) { case "1": switch (substr($bitstream,12,2)) { case "00": $fred['samplerate']="44100"; break; case "01": $fred['samplerate']="48000"; break; case "10": $fred['samplerate']="32000"; break; case "11": $fred['samplerate']="reserved"; break; } // eo switch break; case "2": switch (substr($bitstream,12,2)) { case "00": $fred['samplerate']="22050"; break; case "01": $fred['samplerate']="24000"; break; case "10": $fred['samplerate']="16000"; break; case "11": $fred['samplerate']="reserved"; break; } // eo switch break; case "2.5": switch (substr($bitstream,12,2)) { case "00": $fred['samplerate']="11025"; break; case "01": $fred['samplerate']="12000"; break; case "10": $fred['samplerate']="8000"; break; case "11": $fred['samplerate']="reserved"; break; } // eo switch break; } // eo switch // Determine whether padding is set on. 0 == no & 1 == yes $padding = substr($bitstream,14,1); // Determine the private bit's value. Dont know what for though? $private = substr($bitstream,15,1); // Determine Channel mode switch (substr($bitstream,16,2)) { case "00": $fred['cmode']="Stereo"; break; case "01": $fred['cmode']="Joint Stereo"; break; case "10": $fred['cmode']="Dual Channel"; break; case "11": $fred['cmode']="Mono"; break; } // eo switch /* // Determine Mode Extension, actually who cares for the moment switch (substr($bitstream,18,2)) { case "00": $mext="0"; break; case "01": $mext="3"; break; case "10": $mext="2"; break; case "11": $mext="1"; break; } // eo switch */ // Determine Copyright 0 == no & 1 == yes $fred['copyright'] = substr($bitstream,20,1); // Determine Original 0 == Copy & 1 == Original $fred['original'] = substr($bitstream,21,1); // Determine Emphasis switch (substr($bitstream,22,2)) { case "00": $fred['emphasis']="none"; break; case "01": $fred['emphasis']="50/15 ms"; break; case "10": $fred['emphasis']="reserved"; break; case "11": $fred['emphasis']="CCIT J.17"; break; } // eo switch // Determine number of frames. if ((isset($fred['samplerate'])) and (isset($fred['bitrate']))) { if ($fred['layer']=="1") { $fred['frames']=floor($fred['filesize']/(floor(((12*$fred['bitrate'])/($fred['samplerate']+$padding))*4))); } else { $fred['frames']=floor($fred['filesize']/(floor((144*$fred['bitrate'])/($fred['samplerate'])))); } // eo if // Determine number of seconds in song. if ($fred['layer']=="1") { $fred['time']=floor((384/$fred['samplerate'])*$fred['frames']); } else { $fred['time']=floor((1152/$fred['samplerate'])*$fred['frames']); } // eo if } // eo if // MH: Get MPEG Audio Tag info fseek($fp,$fred['filesize']-128); $tag=fread($fp,128); if (substr($tag,0,3) == "TAG") { $fred['tagtitle']=substr($tag,3,30); $fred['tagartist']=substr($tag,33,30); $fred['tagalbum']=substr($tag,63,30); $fred['tagyear']=substr($tag,93,4); $fred['tagcomment']=substr($tag,97,30); $fred['taggenreid']=ord(substr($tag,127,1)); $fred['taggenrename']= ( $fred['taggenreid'] >= 0 && $fred['taggenreid'] <= 125) ? $genre[$fred['taggenreid']] : "(unkown)"; } // has audio tag ? fclose($fp); $fred['filename']=$filename; return($fred); } // eo fkt mp3info function thdots($s,$delim=".") { while ($s) { // print "s: $s\n"; $d = substr($s,strlen($s)-3,strlen($s)) .$delim.$d; // print "d: $d\n"; $s=substr($s,0,strlen($s)-3); // print "s: $s\n"; // print "\n"; } // Remove trailing dot return (substr($d,0,strlen($d)-1)); } // eo fkt thdots // ------------------------------------------------------- // Here's a usage sample // ------------------------------------------------------- $myfilename = $REDIRECT_URL ? preg_replace ("/.*\//","",$REDIRECT_URL) : $myfilename; print "
";
print "
"; print "Enter MP3 filename: "; print "
"; print "
"; if ( ($myfilename || $REDIRECT_URL) && !$showdir) { // OK, we have a filename. Try to get info. $info=mp3info($myfilename); switch ($info) { case 1: print("Cannot open $myfilename. Click on [ls] for file list"); exit; case 2: print ("$myfilename does not look like an MP3 file"); exit; default: if (gettype($info)!="array") { print("Strange things happen..."); exit; } break; } // eo switch print "
\n";
	print "Filename     : ". $info['filename'] ."\n";
	print "Filesize     : ". thdots($info['filesize'])  ." bytes\n";
	print "Playing time : ". date("i:s",$info['time']) ." minutes (". $info['time'] ." seconds)\n";
	print "Bitrate      : ". $info['bitrate']/1000 ." kbit\n";
	print "Samplerate   : ". $info['samplerate'] ." hz\n";
	print "Frames       : ". $info['frames'] ."\n";
	print "Emphasis     : ". $info['emphasis'] ."\n";
	print "Channelmode  : ". $info['cmode'] ."\n";
	print "Version      : MPEG ". $info['version'] ." Layer ". $info['layer'] ."\n";
	print "CRC          : ". $info['crc'] ."\n";
	print "Copyright    : ". $info['copyright'] ."\n";
	print "Original     : ". $info['original'] ."\n";
	print "\n";
	if (isset($info['tagtitle'])) {
		print "MPEG Audio Tag ID:\n";
		print "Title        : ". $info['tagtitle'] ."\n";
		print "Artist       : ". $info['tagartist'] ."\n";
		print "Album        : ". $info['tagalbum'] ."\n";
		print "Year         : ". $info['tagyear'] ."\n";
		print "Comment      : ". $info['tagcomment'] ."\n";
		print "Genre        : ". $info['taggenrename'] ." (#". $info['taggenreid'] .")\n";
	print "
\n"; } else { print "No MPEG Audio Tag ID found\n"; } // eo has tag? } else { // No filename or showdir set. Show available files. $dhnd=opendir('.'); echo "
\n";
	echo "MP3-files in current dir:\n";
	while ($file=readdir($dhnd)) {
		if (ereg("mp3$",$file)) print "$file\n";
	}
	closedir($dhnd); 
	echo "
\n"; } // eo if got filename? ?>
Please see Brian Wallace' for a better analysis tool: http://sourceforge.net/projects/mpeg-database/
According to Wallace there's a bug in the framesync detection:
You need to ensure n=(ord)255 and n+1>=(ord)224
An ord >= 224 (128+64+32)=224 ensures that the binary expression has at least 8 bits in it and the
first three high order bits are set (i.e. 1)  for examle n=(ord)255 & n+1=(ord)=225  the binary
would be:
      11111111   11100001 ==  sync detected...  continue
Thanks for the hint, Wallace. Sorry, I don't have the time to fix this right now.

View PHP source anyway: fancy | plain
You cannot download the mp3 files. Although they where taken from IUMA and similar websites, I am not sure they are free. Sorry, but given the way the music industry behaves...