Вход Регистрация
Файл: sys/inc/libs/MP3/IDv2/Frame/TCON.php
Строк: 325
<?php
/**
 * This file contains the implementation for the TCON frame
 *
 * PHP version 5
 *
 * Copyright (C) 2006-2007 Alexander Merz
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 * @category  File_Formats
 * @package   MP3_IDv2
 * @author    Alexander Merz <alexander.merz@web.de>
 * @copyright 2006-2007 Alexander Merz
 * @license   http://www.gnu.org/licenses/lgpl.html LGPL 2.1
 * @version   CVS: $Id: TCON.php 248624 2007-12-20 19:07:33Z alexmerz $
 * @link      http://pear.php.net/package/MP3_IDv2
 * @since     File available since Release 0.1
 */

/**
 * load parent class
 */
require_once 'MP3/IDv2/Frame/CommonText.php';

/**
 * Data stucture for TCON frames in a tag
 * (Content type)
 *
 * @category File_Formats
 * @package  MP3_IDv2
 * @author   Alexander Merz <alexander.merz@web.de>
 * @license  http://www.gnu.org/licenses/lgpl.html LGPL 2.1
 * @version  Release: @package_version@
 * @link     http://pear.php.net/package/MP3_IDv2
 * @since    Class available since Release 0.1.0
 */
class MP3_IDv2_Frame_TCON extends MP3_IDv2_Frame_CommonText
{

    
/**
     * the list of genres found in the text
     * @var array list of genres in the frame
     */
    
private $_genrelist = array();

    
/**
     * list of genres defintions given by the text
     * @var array list of custom genre definitions
     */
    
private $_customgenres = array();

    
/**
     * list of genre definitions given by IDv1
     * @var array list of predefined genres
     */
    
private $_genresV1 = 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',
             
'RX' => 'Remix',
             
'CR' => 'Cover',
        );

    
/**
     * Sets the id and purpose of the frame only
     *
     * @return void
     * @access public
     */
    
public function __construct()
    {
        
$this->setId("TCON");
        
$this->setPurpose("Content type");
    }

    
/**
     * Returns the used numbers/identifers.
     *
     * @return array list of genres found in the frame
     * @access public
     */
    
public function getGenres()
    {
        return 
$this->_genrelist;
    }

    
/**
     * Returns the Genre descriptions index by numbers/identifers.
     *
     * @return array list of founded genres and there description
     * @access public
     */
    
public function getGenresDescr()
    {
        
$ret = array();
        foreach (
$this->_genrelist as $g) {
            
// first look if there is custom descr
            
if (!empty($this->_customgenres[$g])) {
                
$ret[$g] = $this->_customgenres[$g];
            } else if (!empty(
$this->_genresV1[$g])) { // the offical list
                
$ret[$g] = $this->_genresV1[$g];
            } else {
                
$ret[$g] = '';
            }
        }
        return 
$ret;
    }

    
/**
     * Returns a genre description for a given number
     *
     * @param int $number the number of the genre to look up
     *
     * @return string the genre description or null if not found
     * @access public
     */
    
public function getGenreDescr($number)
    {
        if (isset(
$this->_customgenres[$number])) {
                return 
$this->_customgenres[$number];
        } else if (isset(
$this->_genresV1[$number])) {

                return 
$this->_genresV1[$number];
        }
        return 
null;
    }



    
/**
     * Sets the data of the frame and processes it.
     *
     * @param string $content the unproccess content for the frame
     *
     * @return void
     * @access public
     */
    
public function setRawContent($content)
    {
        
$this->_changed true;
        
$this->_content $content;

        
$c unpack('C1enc'$content[0]);

        
$this->setEncoding($c['enc']);

        
$data substr($content1);

        while (
0!=strlen($data)) {
            if (
'(' != $data[0]) {              // check if the first is a bracket
                
$this->_genrelist[] = $data;    // no number given, store the data directly as is

                
$data '';

            } else {
                
$a  1;                        // there is a number or alpha ->read until closing bracket
                
$no '';
                while (
')'!=$data[$a]) {
                    
$no $no.$data[$a];
                    
$a++;
                }
                
$this->_genrelist[] = $no;

                
$data substr($data$a);      // remove the readen stuff from the string

                
if (0!=strlen($data) && '('!=$data[0]) {  // now check if there is an explanation (
                    
$a    1;                            // @TODO: handle the '((' stuff
                    
$desc '';
                    while (!empty(
$data[$a]) && '('!=$data[$a] && 0!=strlen($data)) {
                        
$desc $desc.$data[$a];
                        
$a++;
                    }
                    
$data substr($data$a);
                    
$desc trim($desc);                  // the standard isn't really clear about spaces or not, ie: (13)_(65)
                                                          // so first make sure, that there is really text, else ignore it
                    
if (0!=strlen($desc)) {
                        
$this->_customgenres[$no] = $desc;
                    }
                }
            }
        }
    }

    
/**
     * Returns the text
     *
     * @return string the text
     * @access public
     */
    
public function getText()
    {
        if (
$this->_changed == true) {
            
$text '';
            foreach (
$this->_genrelist as $k => $v) {
                
$text $text."(".$k.")".trim($v);
            }
            
$this->_text $text;
        }
        return 
$this->_text;
    }

    
/**
     * Add a new genre.
     *
     * @param int    $genreno    number of the genre to add
     * @param string $genredescr description of the genre to add
     *
     * @return void
     * @access public
     */
    
public function addGenre($genreno$genredescr '')
    {
        
$this->_changed             true;
        
$this->_genrelist[$genreno] = $genredescr;

        if (
'' != $genredescr) {
            
$this->_customgenres[$genreno] = $genredescr;
        }
    }

    
/**
     * Returns the frame content as something printable
     *
     * @return string the frame content
     * @access public
     */
    
public function toString()
    {
        
$ret $this->getID()." (".$this->getPurpose().") ";
        
$ge  $this->getGenres();

        foreach (
$ge as $g => $k) {
            
$ret $ret.$g."->".$this->getGenreDescr($g)." ";
        }
        return 
$ret;
    }

}
?>
Онлайн: 2
Реклама