Salom do`stlar demak yana 1 ta foydali ko`d sizlar uchun.
Bu kod mp3 fayl ma`lumotlarini aniqlab beradi.
mp3 nomi, artis, vaqti, hajmi, album, year, comment, track, genreno, version va hokozo.
<?php
# getMP3info.php
// ===== Получение информации о mp3-файле ======================================
function getMP3data($filename) {
$ret['filename'] = $filename;
if (!@$f = fopen($filename, 'rb')) { $ret['error'] = 'Error opening file.';
return $ret;
}
// Определение ID3 тегов
if ($s = getID3v1($filename)) { $ret['id3v1'] = $s; }
if ($s = getID3v2($filename)) { $ret['id3v2'] = $s; }
// Если есть id3v2 тег, то перед поиском mp3 фрейма сдвигаем указатель файла за id3v2 тег
if ($ret['id3v2']['size']) { fseek($f, $ret['id3v2']['size'] + 10); }
// Ищем mp3 фрейм. - 11111111-11111111-1111111? (0xFFF(E))
do {
$ret['error'] = 'MP3 frame not found.';
return $ret;
}
}
} while ($header[0] != 1 && $header[1] != 1 && $header[2] != 1) ;
// Нашли первый mp3 фрейм. Читаем информацию
if ($header[11] == 0) {
$ret['id'] == 'MPEG-2.5';
} else {
if ($header[12] == 1) { $ret['id'] = 'MPEG-1'; } else { $ret['id'] = 'MPEG-2'; }
}
);
$ret['layer'] = $layers[$header[13]][$header[14]];
if ($header[15] == 0) {$ret['protect_CRC'] = true; }
$bitrates['MPEG-1'] = array( 1 => array(0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448),// MPEG-1 Layer I 2 => array(0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384),// MPEG-1 Layer II 3 => array(0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320) // MPEG-1 Layer III );
$bitrates['MPEG-2'] = array( 1 => array(0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448),// MPEG-2 Layer I 2 => array(0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384),// MPEG-2 Layer II 3 => array(0, 8, 16, 24, 32, 64, 80, 56, 64, 128, 160, 112, 128, 256, 320) // MPEG-2 Layer III );
$bitrates['MPEG-2.5'] = array( 1 => array(0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0),// MPEG-2.5 Layer I 2 => array(0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0),// MPEG-2.5 Layer II 3 => array(0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 0) // MPEG-2.5 Layer III );
$ret['bitrate'] = $bitrates[$ret['id']][$ret['layer']][bindec($header[16].$header[17].$header[18].$header[19])];
'0' => array(44100, 48000), ),
'0' => array(22050, 24000), ),
'0' => array(11025, 12000), ),
);
$ret['frequency'] = $frequency[$ret['id']][$header[20]][$header[21]];
$ret['padding'] = $header[22];
$samplesPerFrame = array( 'MPEG-1' => array(1 => 384, 2 => 1152, 3 => 1152), 'MPEG-2' => array(1 => 384, 2 => 1152, 3 => 576), 'MPEG-2.5' => array(1 => 384, 2 => 1152, 3 => 576) );
0 => array('Stereo', 'Joint stereo'), 1 => array('Dual channel', 'Mono') );
$ret['mode'] = $modes[$header[24]][$header[25]];
// Если режим = Joint Stereo
if ($header[24] == 0 && $header[25] == 1) {
$ret['Intensity stereo'] = $header[26];
$ret['MS stereo'] = $header[27];
}
$ret['Copyrighted'] = $header[28];
$ret['Original'] = $header[29];
0 => array('None', '50/15ms'), 1 => array('', 'CCITT j.17') );
$ret['Emphasis'] = $emphasises[$header[30]][$header[31]];
// =============================================================================
if ($ret['Mode'] != 'Mono' && $ret['id'] == 'MPEG-1') { $offset = 32; }
else if ($ret['Mode'] == 'Mono' && $ret['id'] == 'MPEG-1') { $offset = 17; }
else if ($ret['Mode'] == 'Mono' && ($ret['id'] == 'MPEG-2' || $ret['id'] == 'MPEG-2.5')) { $offset = 9; }
else { $offset = 17; }
fseek($f, $offset, SEEK_CUR
);
if (substr($s, 0, 4) == 'VBRI') { $ret['bitrate_mode'] = 'VBR';
$ret['VBR_header'] = 'VBRI';
$ret['nof'] = $numberOfFrames;
$duration = floor($numberOfFrames * $samplesPerFrame[$ret['id']][$ret['layer']] / $ret['frequency']); } else
if (substr($s, 0, 4) == 'Xing') { $ret['bitrate_mode'] = 'VBR';
$ret['VBR_header'] = 'Xing';
$duration = floor($numberOfFrames * $samplesPerFrame[$ret['id']][$ret['layer']] / $ret['frequency']); } else {
$ret['bitrate_mode'] = 'CBR';
if ($ret['id3v1']) { $datasize -= 128; }
if ($ret['id3v2']) { $datasize -= $ret['id3v2']['size'] - 10; }
$duration = floor($datasize / ($ret['bitrate'] * 1000) * 8); }
$ret['duration_str_hour'] = sprintf('%02d:%02d:%02d',floor($duration/3600),floor($duration/60),floor($duration -(floor($duration/60)*60))); $ret['diration']= (int)$duration;
return $ret;
}
// ===== Получение информации о ID3v2 тегах ====================================
function getID3v2($filename) {
if (!@$f = fopen($filename, 'rb')) { $ret['error'] = 'Error opening file.';
return $ret;
}
$header = @unpack("a3signature/c1version_major/c1version_minor/c1flags/Nsize", $header); if ($header['signature'] != 'ID3') {
return false;
}
$ret['version'] = $header['version_major']. '.' .$header['version_minor'];
$bsize = sprintf('%032b', $header['size']);
return $ret;
}
// ===== Получение информации о ID3v1 тегах ====================================
function getID3v1($filename) {
$f = fopen($filename, 'rb'); if (!@$f = fopen($filename, 'rb')) { $ret['error'] = 'Error opening file.';
return $ret;
}
fseek($f, -128, SEEK_END
); if ($s[125] == chr(0) && $s[126] != chr(0)) { // ID3v1.1
$format = 'a3tag/a30name/a30artists/a30album/a4year/a28comment/x1/c1track/c1genreno';
} else {
// ID3v1.0
$format = 'a3tag/a30name/a30artists/a30album/a4year/a30comment/c1genreno';
}
if ($ret['tag'] == 'TAG') { return $ret; }
return false;
}
?>