Форум → Программирование → PHP для идиотов → php class для работы со свойством файла
php class для работы со свойством файла
Страницы: ← Следующая страница →
-
26 марта 2009 г. 18:40, спустя 3 минуты 16 секунд
Function BinToDec($BinValue)
{
$I = 0;
$BinToDec = 0;
For ($I = 1; $I <= strlen($BinValue); $I++)
{
If (substr($BinValue, $I - 1, 1) == "1")
{
$BinToDec = $BinToDec + pow(2 ,(strLen($BinValue) - $I));
}
}
return $BinToDec;
}
function ByteToBit($ByteArray)
{
$Z =0;
$I =0;
$cnt =0;
$ByteToBit = "";
//convert 4*1 byte array to 4*8 bits'''''
For ($Z = 1; $Z<=4; $Z++)
{
$subs = ord(substr($ByteArray, $Z-1, 1));
For ($I = 7; $I >= 0; $I–)
{
If(intval($subs / pow(2, $I)) == 1)
{
$ByteToBit = $ByteToBit."1";
$subs = $subs - pow(2 , $I);
}
ElseIf ($ByteToBit !== "")
{
$ByteToBit = $ByteToBit."0";
}
}
}
return BinToDec($ByteToBit);
}
function isVBR($sign)
{
if($sign == "Xing")
{
return "yes";
}
else
{
return "no";
}
}
function GetGenre($genre)
{
$_genres = array(
0 => 'Blues',
1 => 'Classic Rock',
2 => 'Country',
3 => 'Dance',
4 => 'Disco',
5 => 'Funk',
6 => 'Grunge',
7 => 'Hip-Hop',
8 => 'Jazz',
9 => 'Metal',
10 => 'New Age',
11 => 'Oldies',
12 => 'Other',
13 => 'Pop',
14 => 'R&B',
15 => 'Rap',
16 => 'Reggae',
17 => 'Rock',
18 => 'Techno',
19 => 'Industrial',
20 => 'Alternative',
21 => 'Ska',
22 => 'Death Metal',
23 => 'Pranks',
24 => 'Soundtrack',
25 => 'Euro-Techno',
26 => 'Ambient',
27 => 'Trip-Hop',
28 => 'Vocal',
29 => 'Jazz+Funk',
30 => 'Fusion',
31 => 'Trance',
32 => 'Classical',
33 => 'Instrumental',
34 => 'Acid',
35 => 'House',
36 => 'Game',
37 => 'Sound Clip',
38 => 'Gospel',
39 => 'Noise',
40 => 'Alternative Rock',
41 => 'Bass',
42 => 'Soul',
43 => 'Punk',
44 => 'Space',
45 => 'Meditative',
46 => 'Instrumental Pop',
47 => 'Instrumental Rock',
48 => 'Ethnic',
49 => 'Gothic',
50 => 'Darkwave',
51 => 'Techno-Industrial',
52 => 'Electronic',
53 => 'Pop-Folk',
54 => 'Eurodance',
55 => 'Dream',
56 => 'Southern Rock',
57 => 'Comedy',
58 => 'Cult',
59 => 'Gangsta',
60 => 'Top 40',
61 => 'Christian Rap',
62 => 'Pop/Funk',
63 => 'Jungle',
64 => 'Native US',
65 => 'Cabaret',
66 => 'New Wave',
67 => 'Psychadelic',
68 => 'Rave',
69 => 'Showtunes',
70 => 'Trailer',
71 => 'Lo-Fi',
72 => 'Tribal',
73 => 'Acid Punk',
74 => 'Acid Jazz',
75 => 'Polka',
76 => 'Retro',
77 => 'Musical',
78 => 'Rock & Roll',
79 => 'Hard Rock',
80 => 'Folk',
81 => 'Folk-Rock',
82 => 'National Folk',
83 => 'Swing',
84 => 'Fast Fusion',
85 => 'Bebob',
86 => 'Latin',
87 => 'Revival',
88 => 'Celtic',
89 => 'Bluegrass',
90 => 'Avantgarde',
91 => 'Gothic Rock',
92 => 'Progressive Rock',
93 => 'Psychedelic Rock',
94 => 'Symphonic Rock',
95 => 'Slow Rock',
96 => 'Big Band',
97 => 'Chorus',
98 => 'Easy Listening',
99 => 'Acoustic',
100 => 'Humour',
101 => 'Speech',
102 => 'Chanson',
103 => 'Opera',
104 => 'Chamber Music',
105 => 'Sonata',
106 => 'Symphony',
107 => 'Booty Bass',
108 => 'Primus',
109 => 'Porn Groove',
110 => 'Satire',
111 => 'Slow Jam',
112 => 'Club',
113 => 'Tango',
114 => 'Samba',
115 => 'Folklore',
116 => 'Ballad',
117 => 'Power Ballad',
118 => 'Rhytmic Soul',
119 => 'Freestyle',
120 => 'Duet',
121 => 'Punk Rock',
122 => 'Drum Solo',
123 => 'Acapella',
124 => 'Euro-House',
125 => 'Dance Hall',
126 => 'Goa',
127 => 'Drum & Bass',
128 => 'Club-House',
129 => 'Hardcore',
130 => 'Terror',
131 => 'Indie',
132 => 'BritPop',
133 => 'Negerpunk',
134 => 'Polsk Punk',
135 => 'Beat',
136 => 'Christian Gangsta Rap',
137 => 'Heavy Metal',
138 => 'Black Metal',
139 => 'Crossover',
140 => 'Contemporary Christian',
141 => 'Christian Rock',
142 => 'Merengue',
143 => 'Salsa',
144 => 'Trash Metal',
145 => 'Anime',
146 => 'Jpop',
147 => 'Synthpop');
if(($genre<148) && ($genre>-1))
{
return $_genres[$genre];
}
else
{
return '';
}
}
function GetLayer($byte)
{ $ret = 0;
$layers = Array(0, 3, 2, 1);
if ((ord($byte) & 2) == 2) $ret += 1;
if ((ord($byte) & 4) == 4) $ret += 2;
return $layers[$ret];
}
function isOriginal($byte)
{ $ret = 0;
$originals = Array('No' ,'Yes');
if ((ord($byte) & 4) == 4) $ret += 1;
return $originals[$ret];
}
function getEmphasis($byte)
{ $ret = 0;
$emphasis = Array('None', '50/15 microseconds', 'Dunno', 'CITT j.17');
if ((ord($byte) & 1) == 1) $ret += 1;
if ((ord($byte) & 2) == 2) $ret += 2;
return $emphasis[$ret];
}
function getChanels($byte)
{ $ret = 0;
$chanels = Array('Stereo', 'Joint stereo', 'Dual channel', 'Mono');
if ((ord($byte) & 64) == 64) $ret += 1;
if ((ord($byte) & 128) == 128) $ret += 2;
return $chanels[$ret];
}
function GetMPEG($byte)
{ $ret = 0;
$mpegs = Array('2.5','?','2.0','1.0');
if ((ord($byte) & 8) == 8) $ret |= 1;
if ((ord($byte) & 16) == 16) $ret |= 2;
return $mpegs[$ret];
}
function GetSampleRate($byte, $mpeg)
{ $ret = 0;
$samplerate1 = Array(44100,48000,32000,'?');
$samplerate2 = Array(22050,24000,16000, '?');
if ((ord($byte) & 4) == 4) $ret += 1;
if ((ord($byte) & 8) == 8) $ret += 2;
if($mpeg=='1.0')
{
return $samplerate1[$ret];
}
elseif($mpeg=='2.0')
{
return $samplerate2[$ret];
}else{return '?';}
}
function GetBitRate($byte, $mpeg, $layer)
{
$ret = 0;
if ((ord($byte) & 16) == 16) {$ret |= 1;}
if ((ord($byte) & 32) == 32) {$ret |= 2;}
if ((ord($byte) & 64) == 64) {$ret |= 4;}
if ((ord($byte) & 128) == 128) {$ret |= 8;}
$bitrates = Array(
'1.0'=>Array(
'1'=>Array(0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,'?'),
'2'=>Array(0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,'?'),
'3'=>Array(0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,'?')
),
'2.0'=>Array(
'1'=>Array(0,32,48,56,64,80,96,112,128,144,160,176,192,224,256,'?'),
'2'=>Array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,'?'),
'3'=>Array(0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,'?')
)
);
return $bitrates[$mpeg][$layer][$ret];
}
function getTags($mp3file)
{
$bpp = 0;
$tags = Array();
$tags['FILE'] = (realpath($mp3file));
if(file_exists($mp3file))
{
if(is_readable($mp3file))
{
$f = fopen($mp3file,'r');
fseek($f,filesize($mp3file)-128);
$ret = fread($f,128);
$start = -1;
//search mp3-header
for ($i = 0; $i <= filesize($mp3file); $i++)
{
fseek($f, $i);
$byte = fread($f, 1);
if(ord($byte)==255)
{
fseek($f, $i+1);
$bits = 0;
$byte = fread($f, 1);
if ((ord($byte) & 32) == 32) {$bits |= 2;}
if ((ord($byte) & 64) == 64) {$bits |= 4;}
if ((ord($byte) & 128) == 128) {$bits |= 8;}
if ($bits==14)
{
$start = $i;
break;
}
}
}
$tags['FILESIZE'] = filesize($mp3file);
if($start>=0)
{
fseek($f, $start + 0); $byte0 = fread($f, 1);
fseek($f, $start + 1); $byte1 = fread($f, 1);
fseek($f, $start + 2); $byte2 = fread($f, 1);
fseek($f, $start + 3); $byte3 = fread($f, 1);
fseek($f, $start + 36); $xing = fread($f, 4);
$tags['VBR'] = isVBR($xing);
$tags['FRAMES'] = 1;
if($tags['VBR']=="yes")
{
//calculate # of frames
$Frames = 0;
fseek($f, $start + 44);
$frame = fread($f, 4); //get framelength
$Frames = ByteToBit($frame);
$tags['FRAMES'] = $Frames;
}
fclose($f);
$tags['MPEG'] = GetMPEG($byte1);
$tags['LAYER'] = GetLayer($byte1);
$tags['SAMPLERATE'] = GetSampleRate($byte2, $tags['MPEG']);
if($tags['VBR']=="yes")
{
$Temp = Array(0, 12, 144, 144);
$tags['BPP'] = (filesize($mp3file) * $tags['SAMPLERATE']) / (intval($tags['FRAMES'])) / 1000 / $Temp[round($tags['LAYER'])];
}
else
{
$tags['BPP'] = GetBitRate($byte2, $tags['MPEG'], $tags['LAYER']);
}
$tags['LENGTH'] = intval(($tags['FILESIZE'] * 8) / $tags['BPP'] / 1000);
//$Duration = intval($Duration / 60) . "m " . ($Duration - intval($Duration / 60) * 60) . "s";
// floor( ((8 * filesize($mp3file))/1000) / $tags['BPP']);
$tags['CHANELS'] = getChanels($byte3);
$tags['EMPHASIS'] = getEmphasis($byte3);
$tags['ORIGINAL'] = isOriginal($byte3);
$tags['BPP'] = intval($tags['BPP']);
}
else
{
return false;
}
//$tags[] = $ret;
if(substr($ret,0,3)=="TAG")
{
$tags['TITLE'] = (chop(substr($ret,3,32-3+1)));
$tags['ARTIST'] = (chop(substr($ret,33,62-33+1)));
$tags['ALBUM'] = (chop(substr($ret,63,92-63+1)));
$tags['YEAR'] = (chop(substr($ret,93,96-93+1)));
$tags['GENRECODE'] = (ord(substr($ret,127,1)));
$tags['GENRE'] = (GetGenre(ord(substr($ret,127,1))));
if((ord(substr($ret,125,1))==0) && (ord(substr($ret,126,1))!==0))
{
$tags['TRACK'] = (ord(substr($ret,126,1)));
$tags['COMMENT'] = (chop(substr($ret,97,28)));
}
else
{
$tags['COMMENT'] = (chop(substr($ret,97,30)));
}
}
}
}
return $tags;
}
всю эту хуйню неплохо бы в класс оформить, и в спойлер -
-
-
-
26 марта 2009 г. 18:43, спустя 12 секунд
phpdude, я спиздил
Call to undefined function id3_get_tag() пекл нужен какойто :D -
-
-
26 марта 2009 г. 18:45, спустя 4 секунды
https://smappi.org/ - платформа по созданию API на все случаи жизни -
26 марта 2009 г. 18:46, спустя 25 секунд
хуета!
хуйня какая то как всегда. иви :)
http://ru.php.net/manual/ru/function.id3-get-tag.phphttps://smappi.org/ - платформа по созданию API на все случаи жизни -
26 марта 2009 г. 18:48, спустя 2 минуты 47 секунд
adw0rd, ты прав
вот эта лучшая имхо GetID3
просто я уже не помню названий, так как про них только читал изредка, а на практике ни разу не занималсяСапожник без сапог -
-
26 марта 2009 г. 18:52, спустя 2 минуты 27 секунд
а погуглить? :)
а из jpg как вытащить???Сапожник без сапог -
26 марта 2009 г. 18:56, спустя 4 минуты 19 секунд
хз, imagick и gd в помощь
а из jpg как вытащить???https://smappi.org/ - платформа по созданию API на все случаи жизни -
26 марта 2009 г. 19:00, спустя 3 минуты 52 секунды
aivee, а чо там собственно извлекать то? какая информация интересует ?Сапожник без сапог
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!