На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Дополнения к правилам (только для данного раздела)
- Используйте подсветку синтаксиса при выделении исходного кода;
- В описании темы обязательно укажите язык программирования;
- Прежде чем задать вопрос, обязательно воспользуйтесь поиском и загляните в FAQ раздела.
- Если вопрос касается серверного ПО, указывайте ОС.
- Если вопрос касается ASP.NET то лучше будет задать его в соответствующем разделе. Там вы сможете получить ответ намного быстрее.

Модераторы: Serafim, fatalist
Закрыто Рысь 29-05-2007:

Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Наша Лаборатория
    RSTPL - Быстрая библиотека для работы с шаблонами

    Автор: Axis
    Язык: PHP4 и выше


    Данная библиотека работает с шаблонами со скоростью обработки строк заключенных в "". Шаблоны могут содержать только те данные, что может содержать текст заключенный в "", но, с другой стороны, используя средства PHP, нельзя создать что-то быстрее.
    Возможности:
    • Несколько шаблонов в одном файле
    • Поддержка глобальных и локальных подставляемых переменных
    • Работа с динамическими блоками
    • Высокая скорость

    Это сообщение было перенесено сюда или объединено из темы "Обсуждение FAQ-ов"
    Сообщение отредактировано: Mastilior -

    Прикреплённый файлПрикреплённый файлtemplate.rar (3.63 Кбайт, скачиваний: 931)
      чтение информации из mp3 файла.

      Автор: SCINER
      Язык: PHP


      Использование:
      ExpandedWrap disabled
        require_once("id.php");
        print_r(getTags("10_-_Ber_Upkennen_Ni_Bula.mp3"));

      Возвращаемое значение - массив:
      ExpandedWrap disabled
        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
        )

      , если файл некорректный, то соответствующие поля не будут присутствовать в массиве!
      ExpandedWrap disabled
        <?
         
        //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
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:
      Закрыто Рысь 29-05-2007:



      Рейтинг@Mail.ru
      [ Script execution time: 0,0363 ]   [ 15 queries used ]   [ Generated: 28.03.24, 08:05 GMT ]