2 /***********************************************************
\r
6 * Author: Tadeu F. Oliveira
\r
7 * Contact: tadeu_fo@yahoo.com.br
\r
8 * Use: Extract ID3 Tag information from mp3 files
\r
9 ************************************************************/
\r
11 var $file_name = '';
\r
13 var $last_error_num = 0;
\r
14 var $tags_count = 0;
\r
16 function hex2bin($data) {
\r
17 $len = strlen ($data);
\r
19 for ($i = 0; $i < $len; $i += 2) {
\r
20 $newdata .= pack ("C", hexdec (substr ($data, $i, 2)));
\r
26 function get_frame_size ($fourBytes) {
\r
27 $tamanho [0] = str_pad (base_convert (substr ($fourBytes, 0, 2), 16, 2), 7, 0, STR_PAD_LEFT);
\r
28 $tamanho [1] = str_pad (base_convert (substr ($fourBytes, 2, 2), 16, 2), 7, 0, STR_PAD_LEFT);
\r
29 $tamanho [2] = str_pad (base_convert (substr ($fourBytes, 4, 2), 16, 2), 7, 0, STR_PAD_LEFT);
\r
30 $tamanho [3] = str_pad (base_convert (substr ($fourBytes, 6, 2), 16, 2), 7, 0, STR_PAD_LEFT);
\r
31 $total = $tamanho [0] . $tamanho [1] . $tamanho [2] . $tamanho [3];
\r
33 $tamanho [0] = substr ($total, 0, 8);
\r
34 $tamanho [1] = substr ($total, 8, 8);
\r
35 $tamanho [2] = substr ($total, 16, 8);
\r
36 $tamanho [3] = substr ($total, 24, 8);
\r
38 $total = $tamanho [0] . $tamanho [1] . $tamanho [2] . $tamanho [3];
\r
39 $total = base_convert ($total, 2, 10);
\r
43 function extractTags ($text, &$tags) {
\r
46 while ((strlen ($text) != 0) and ($size != 0)) {
\r
47 //while there are tags to read and they have a meaning
\r
48 $ID = substr ($text, 0, 4);
\r
49 $aux = substr ($text, 4, 4);
\r
50 $aux = bin2hex ($aux);
\r
51 $size = $this->get_frame_size ($aux);
\r
52 $flags = substr ($text, 8, 2);
\r
53 $info = substr ($text, 11, $size - 1);
\r
56 $tags [$ID] = $info;
\r
57 $this->tags_count++;
\r
60 $text = substr ($text, 10 + $size, strlen ($text));
\r
64 function ID3 ($file_name) {
\r
65 $this->file_name = $file_name;
\r
66 $this->last_error_num = 0;
\r
69 function getInfo () {
\r
70 if ($this->file_name != ''){
\r
71 $mp3 = @fopen ($this->file_name, "r");
\r
72 $header = @fread ($mp3, 10);
\r
75 $this->last_error_num = 2;
\r
79 if (substr ($header, 0, 3) != "ID3") {
\r
80 $this->last_error_num = 3;
\r
84 $header = bin2hex ($header);
\r
85 $version = base_convert (substr ($header, 6, 2), 16, 10) . "." .
\r
86 base_convert (substr ($header, 8, 2), 16, 10);
\r
87 $flags = base_convert (substr ($header, 10, 2), 16, 2);
\r
88 $flags = str_pad ($flags, 8, 0, STR_PAD_LEFT);
\r
90 if ($flags [7] == 1){
\r
91 // echo ('with Unsynchronisation<br>');
\r
94 if ($flags [6] == 1){
\r
95 // echo ('with Extended header<br>');
\r
98 if ($flags [5] == 1){
\r
100 $this->last_error_num = 4;
\r
104 $total = $this->get_frame_size (substr ($header, 12, 8));
\r
105 $text = @fread ($mp3,$total);
\r
109 $this->extractTags ($text, $this->tags);
\r
111 $this->last_error_num = 1; //file not set
\r
118 function getArtist () {
\r
119 if (array_key_exists ('TPE1', $this->tags)) {
\r
120 return $this->tags ['TPE1'];
\r
122 $this->last_error_num = 5;
\r
127 function getTrack () {
\r
128 if (array_key_exists ('TRCK', $this->tags)) {
\r
129 return $this->tags ['TRCK'];
\r
131 $this->last_error_num = 5;
\r
136 function getTitle () {
\r
137 if (array_key_exists ('TIT2', $this->tags)) {
\r
138 return $this->tags ['TIT2'];
\r
140 $this->last_error_num = 5;
\r
145 function getAlbum () {
\r
146 if (array_key_exists ('TALB', $this->tags)) {
\r
147 return $this->tags ['TALB'];
\r
149 $this->last_error_num = 5;
\r
154 function getYear () {
\r
155 if (array_key_exists ('TYER', $this->tags)) {
\r
156 return $this->tags ['TYER'];
\r
158 $this->last_error_num = 5;
\r
163 function getGender(){
\r
164 if (array_key_exists ('TCON', $this->tags)) {
\r
165 return $this->tags ['TCON'];
\r
167 $this->last_error_num = 5;
\r