PHP ile MP3 dosyalarının ID3v2 taglarını okumak

PHP Script
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.

PHP ID3v2 class (Id3v2.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
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'].' ';
?>

Facebook Yorumları

5 Yorum

  1. Enes

    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 

Uyarı: Yorumlarda link kullanmayınız. Link içeren yorumlar otomatik olarak spam kabul edilmektedir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir