Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.100.210] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
RSTPL - Быстрая библиотека для работы с шаблонами
Автор: Axis Язык: PHP4 и выше Данная библиотека работает с шаблонами со скоростью обработки строк заключенных в "". Шаблоны могут содержать только те данные, что может содержать текст заключенный в "", но, с другой стороны, используя средства PHP, нельзя создать что-то быстрее. Возможности: Это сообщение было перенесено сюда или объединено из темы "Обсуждение FAQ-ов" Прикреплённый файлtemplate.rar (3.63 Кбайт, скачиваний: 962) |
Сообщ.
#17
,
|
|
|
чтение информации из mp3 файла.
Автор: SCINER Язык: PHP Использование: require_once("id.php"); print_r(getTags("10_-_Ber_Upkennen_Ni_Bula.mp3")); Возвращаемое значение - массив: Array ( [FILE] => /home/u51935/market.bars-media.ru/www/mp3/Elephunk - Track 16.mp3 [FILESIZE] => 2911975 [VBR] => yes [FRAMES] => 6256 [MPEG] => 1.0 [LAYER] => 3 [SAMPLERATE] => 44100 [BPP] => 142 [LENGTH] => 163 [CHANELS] => Joint stereo [EMPHASIS] => None [ORIGINAL] => Yes [TITLE] => Track 16 [ARTIST] => Black eyed peas [ALBUM] => Elephunk [YEAR] => 2004 [GENRECODE] => 32 [GENRE] => Classical [TRACK] => 16 [COMMENT] => lenar2003@mail.ru ) , если файл некорректный, то соответствующие поля не будут присутствовать в массиве! <? //Written by SCINER: MP3-file parser //30-05-2007 - 14:41 //Read mp3-header, id3v1.0, id3v1.1 /* A 3 (0-2) Tag индитификатор. Должны использоваться символы 'TAG' как char символы. +B 30 (3-32) Title +C 30 (33-62) Artist +D 30 (63-92) Album +E 4 (93-96) Year +F 30 (97-126) Comment +G 1 (127) Genre */ 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; } ?> Обсуждение и доработки здесь: mp3, tags, id3v1 |