Вход Регистрация
Файл: sys/inc/libs/MP3/Id3/Idv2.php
Строк: 157
<?php
/**
 * MP3_Id3_Idv2
 *
 * PHP versions 5
 *
 * LICENSE: This source file is subject to version 3.01 of the PHP license
 * that is available through the world-wide-web at the following URI:
 * http://www.php.net/license/3_01.txt.  If you did not receive a copy of
 * the PHP License and are unable to obtain it through the web, please
 * send a note to license@php.net so we can mail you a copy immediately.
 *
 * @category MP3
 * @package  MP3_Id3
 * @author   Gemorroj <wapinet@mail.ru>
 * @license  http://www.php.net/license/3_01.txt  PHP License 3.01
 * @link     https://github.com/Gemorroj/MP3_Id3
 */

require_once ROOTPATH.'/sys/inc/libs/PEAR.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Reader.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Writer.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/Id3/Id.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/Id3/Genre.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/Id3/Picture.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/Id3/Exception.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Tag.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/APIC.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TCON.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TRCK.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TIT2.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TOPE.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TALB.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TPE2.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TYER.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TCOP.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/WOAF.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TCOM.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TENC.php';
require_once 
ROOTPATH.'/sys/inc/libs/MP3/IDv2/Frame/TXXX.php';

/**
 * MP3_Id3_Idv2
 *
 * This package provides handling of MP3 tags
 *
 * @category MP3
 * @package  MP3_Id3
 * @author   Gemorroj <wapinet@mail.ru>
 * @license  http://www.php.net/license/3_01.txt  PHP License 3.01
 * @link     https://github.com/Gemorroj/MP3_Id3
 * @see      http://wiki.hydrogenaudio.org/index.php?title=Foobar2000:ID3_Tag_Mapping
 */
class MP3_Id3_Idv2 extends MP3_Id3_Id
{
    
/**
     * @var MP3_IDv2_Reader
     */
    
private $reader;
    
/**
     * @var MP3_IDv2_Writer
     */
    
private $writer;


    
/**
     * Constructor
     */
    
public function __construct()
    {
        
$this->reader = new MP3_IDv2_Reader();
        
$this->writer = new MP3_IDv2_Writer();
    }


    
/**
     * Get id object
     *
     * @return MP3_IDv2_Reader
     */
    
public function getId()
    {
        return 
$this->reader;
    }


    
/**
     * Read MP3 file
     *
     * @param string $file MP3 file
     *
     * @throws MP3_Id3_Exception
     * @return MP3_Id3_Idv2
     */
    
public function read($file)
    {
        
$read $this->reader->read($file);
        if (
PEAR::isError($read)) {
            throw new 
MP3_Id3_Exception($read->getMessage(), $read->getCode());
        }
        
$this->readTags();

        return 
$this;
    }


    
/**
     * Write tags to MP3 file
     *
     * @param string $file MP3 file
     *
     * @throws MP3_Id3_Exception
     * @return MP3_Id3_Idv2
     */
    
public function write($file)
    {
        if (
file_exists($file) !== true) {
            throw new 
MP3_Id3_Exception('File "' $file '" not found');
        }
        if (
is_writable($file) !== true) {
            throw new 
MP3_Id3_Exception('File "' $file '" is not writable');
        }

        
$this->writeTags();

        
$write $this->writer->write($file);
        if (
PEAR::isError($write)) {
            throw new 
MP3_Id3_Exception($write->getMessage(), $write->getCode());
        }

        return 
$this;
    }


    
/**
     * Write MP3 tags
     *
     * @return MP3_Id3_Idv2
     */
    
protected function writeTags()
    {
        
//$tag = $this->reader->getTag();
        
$tag = new MP3_IDv2_Tag();

        foreach (
$this as $key => $value) {
            switch (
$key) {
            case 
'trackNumber':
                
$frame = new MP3_IDv2_Frame_TRCK();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'trackTitle':
                
$frame = new MP3_IDv2_Frame_TIT2();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'artistName':
                
$frame = new MP3_IDv2_Frame_TOPE();
                
$frame->addArtist($value);
                
$tag->addFrame($frame);
                break;

            case 
'albumTitle':
                
$frame = new MP3_IDv2_Frame_TALB();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'albumArtist':
                
$frame = new MP3_IDv2_Frame_TPE2();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'year':
                
$frame = new MP3_IDv2_Frame_TYER();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'copyright':
                
$frame = new MP3_IDv2_Frame_TCOP();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'url':
                
$frame = new MP3_IDv2_Frame_WOAF();
                
$frame->setUrl($value);
                
$tag->addFrame($frame);
                break;

            case 
'composer':
                
$frame = new MP3_IDv2_Frame_TCOM();
                
$frame->addComposer($value);
                
$tag->addFrame($frame);
                break;

            case 
'encodedBy':
                
$frame = new MP3_IDv2_Frame_TENC();
                
$frame->setText($value);
                
$tag->addFrame($frame);
                break;

            case 
'comment':
                
$frame = new MP3_IDv2_Frame_TXXX();
                
$frame->setValue($value);
                
$tag->addFrame($frame);
                break;

            case 
'genre':
                
$frame = new MP3_IDv2_Frame_TCON();
                
$frame->addGenre($this->getGenre()->getId(), $this->getGenre()->getName());
                
$tag->addFrame($frame);
                break;

            case 
'picture':
                
$frame = new MP3_IDv2_Frame_APIC();

                
$frame->setMimeType($this->getPicture()->getMime());
                
$frame->setPicture($this->getPicture()->getData());

                
$tag->addFrame($frame);
                break;
            }
        }

        
$this->writer->addTag($tag);

        return 
$this;
    }


    
/**
     * Read MP3 tags
     *
     * @return MP3_Id3_Idv2
     */
    
protected function readTags()
    {
        
$level error_reporting(E_ALL E_NOTICE); // fix empty tags

        
$tag $this->reader->getTag();

        
error_reporting($level);

        if (
$tag instanceof MP3_IDv2_Tag) {
            foreach (
$tag->getFrames() as $v) {
                switch (
$v->getId()) {
                case 
'TRCK':
                    
$this->setTrackNumber($v->getText());
                    break;

                case 
'TIT2':
                    
$this->setTrackTitle($v->getText());
                    break;

                case 
'TOPE':
                    
$this->setArtistName($v->getText());
                    break;

                case 
'TALB':
                    
$this->setAlbumTitle($v->getText());
                    break;

                case 
'TPE2':
                    
$this->setAlbumArtist($v->getText());
                    break;

                case 
'TYER':
                    
$this->setYear($v->getText());
                    break;

                case 
'TCOP':
                    
$this->setCopyright($v->getText());
                    break;

                case 
'WOAF':
                    
$this->setUrl($v->getUrl());
                    break;

                case 
'TCOM':
                    
$this->setComposer($v->getText());
                    break;

                case 
'TENC':
                    
$this->setEncodedBy($v->getText());
                    break;

                case 
'TXXX':
                    
$this->setComment($v->getValue());
                    break;

                case 
'TCON':
                    
$genre = new MP3_Id3_Genre();
                    
$genres $v->getGenres();
                    
$genre->setGenre($genres[0]);
                    
$this->setGenre($genre);
                    break;

                case 
'APIC':
                    
$picture = new MP3_Id3_Picture();
                    
$picture->setMime($v->getMimeType());
                    
$picture->setData($v->getPicture());
                    
$this->setPicture($picture);
                    break;
                }
            }
        }

        return 
$this;
    }
}
Онлайн: 3
Реклама