Daha önce şu yazımızda MP3 dosyalarının ID3v2 taglarını okuyan bir PHP sınıfından bahsetmiştik. Kullandıkça bu sınıfın işi yok yere uzattığını ve zaman zaman çeşitli karakter kodlama hatalarına sebep olduğunu gözlemledim. Ufak bir araştırmadan sonra gördüm ki sağolsun de77 isimli vatandaş bu işi çok daha kısa sürede halleden, daha basit ve kullanışlı bir sınıf hazırlamış, ayrıca direkt id3.org sitesinde öneriliyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | <?php // Author : de77 // Website : www.de77.com // License : MIT (http://en.wikipedia.org/wiki/MIT_License) // Class desc : http://de77.com/php/php-class-how-to-read-id3v2-tags-from-mp3-files //------------------------------------------------------------------------------ // If you like this class- please leave a comment on my site, thanks! //------------------------------------------------------------------------------ class Id3v2 { public $error; private $tags = array( 'TALB' => 'Album', 'TCON' => 'Genre', 'TENC' => 'Encoder', 'TIT2' => 'Title', 'TPE1' => 'Artist', 'TPE2' => 'Ensemble', 'TYER' => 'Year', 'TCOM' => 'Composer', 'TCOP' => 'Copyright', 'TRCK' => 'Track', 'WXXX' => 'URL', 'COMM' => 'Comment' ); private function decTag($tag, $type) { //TODO- handling of comments is quite weird //but I don't know how it is encoded so I will leave the way it is for now if ($type == 'COMM') { $tag = substr($tag, 0, 3) . substr($tag, 10); } //mb_convert_encoding is corrupted in some versions of PHP so I use iconv switch (ord($tag[2])) { case 0: //ISO-8859-1 return iconv('UTF-8', 'ISO-8859-1', substr($tag, 3)); case 1: //UTF-16 BOM return iconv('UTF-16LE', 'UTF-8', substr($tag, 5)); case 2: //UTF-16BE return iconv('UTF-16BE', 'UTF-8', substr($tag, 5)); case 3: //UTF-8 return substr($tag, 3); } return false; } public function read($file) { $f = fopen($file, 'r'); $header = fread($f, 10); $header = @unpack("a3signature/c1version_major/c1version_minor/c1flags/Nsize", $header); if (!$header['signature'] == 'ID3') { $this->error = 'Bu dosyada ID3 v2 tagı bulunmuyor.'; fclose($f); return false; } $result = array(); for ($i=0; $i<22; $i++) { $tag = rtrim(fread($f, 6)); if (!isset($this->tags[$tag])) break; $size = fread($f, 2); $size = @unpack('n', $size); $size = $size[1]+2; $value = fread($f, $size); $value = $this->decTag($value, $tag); $result[$this->tags[$tag]] = $value; } fclose($f); return $result; } } ?> |
Kullanım (ornek.php)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php include("Id3v2.php"); $dosya = "./mp3klasoru/50 Cent - Wanksta.mp3"; $i = new Id3v2; $ID3 = $i->read($dosya); // Array: // print_r($ID3); // Manuel: echo ' <b>Sanatçı</b>: '.$ID3['Artist'].'<br> <b>Şarkı</b>: '.$ID3['Title'].'<br> <b>Albüm</b>: '.$ID3['Album'].'<br> <b>Track No</b>: '.$ID3['Track'].'<br> <b>Yıl</b>: '.$ID3['Year'].'<br> <b>Tarz</b>: '.$ID3['Genre'].'<br> <b>Encoder</b>: '.$ID3['Encoder'].'<br> <b>Ensemble</b>: '.$ID3['Ensemble'].'<br> <b>Composer</b>: '.$ID3['Composer'].'<br> <b>Copyright</b>: '.$ID3['Copyright'].'<br> <b>Url</b>: '.$ID3['URL'].'<br> <b>Yorumlar</b>: '.$ID3['Comment'].' '; ?> |
teşekkürler.
Merhaba caner hocam peki bu uygulamayi izleyerek bunu radyo hosting’de bulunan mp3’lere aynı uygulamayi yapmamiz mumkun mu ?
benim uzun zamandir aradigim bir sey burada denk geldim.
radyo sitemdeki sarkilarin taglarini okutup sitede bastirmak istiyorum
isim sarki adi sanatcinin resmi vs vs gibi ? bununla mumkun olurmu acaba ? ilgin icin tskler