Вход Регистрация
Файл: core/MP3Tool.class.php
Строк: 122
<?
/**

 * @name MP3Tool class
 * @author SkyFire aka XeOn
 * @icq 2666440
 * @readme readme.txt
 * @copyright (c)2012 SkyTech :)

**/
class MP3Tool {
    private static 
$root;
    private static 
$includePath;
        
    
/**
     * Получаем расширение файла
    **/
    
    
private function ext($filepath)
    {
        
$ext pathinfo($filepathPATHINFO_EXTENSION);
        return 
$ext;
    }
    
    
/**
     * Конструктор класса
    **/
    
    
function __construct($file false)
    {
        
self::$includePath dirname(__FILE__);
        
self::$root $_SERVER['DOCUMENT_ROOT'];
    }
    
    
/**
     * Фильтрация строки
    **/
    
    
private function clean($string)
    {
        
$string htmlspecialchars(trim($string));
        return 
$string;
    }
    
    
/**
     * Получаем информацию о мп3 файле
    **/
    
    
public function GetMp3Info($file$mode false)
    {
        
//$file = self::$root . '/' . $file;
        
if(empty($file)) {
            exit(
'Error! Path to file is empty');
        }
        if(!
file_exists($file)) {
            exit(
'Error! File '.$file.' not exists info');
        }
        if(
self::ext($file) != 'mp3') {
            exit(
'Error! Valid format files only mp3  '.self::ext($file).'!');
        }
        require_once(
self::$includePath.'/id3/getid3.php');
        
$ID3 = new getID3;
        
$ID3->encoding 'UTF-8';
        
$analyze $ID3->analyze($file);
        
$audio $analyze['audio'];
        
$info['bitrate'] = $audio['bitrate'];
        
$info['samplerate'] = $audio['sample_rate'];
        
$info['cannels'] = $audio['channels'];
        
$info['duration'] = ceil($analyze['playtime_seconds']);
        
$info['filesize'] = $analyze['filesize'];
        if(!empty(
$analyze['tags']['id3v2'])) {
            
$tags $analyze['tags']['id3v2'];
        }
        elseif(!empty(
$analyze['tags']['id3v1'])) {
            
$tags $analyze['tags']['id3v1'];
        }
        else { 
            
$tags['artist'][0] = false;
            
$tags['title'][0] = false;
            
$tags['genre'][0] = false;
            
$tags['year'][0] = false;
            
$tags['comment'][0] = false;
            
$tags['album'][0] = false;
        }
        if(
$mode != false) {
            return 
$tags;
        }
        
$info['artist'] = isset($tags['artist'][0]) ? self::clean($tags['artist'][0]) : false;
        
$info['title'] = isset($tags['title'][0]) ? self::clean($tags['title'][0]) : false;
        
$info['genre'] = isset($tags['genre'][0]) ? self::clean($tags['genre'][0]) : false;
        
$info['year'] = isset($tags['year'][0]) ? self::clean($tags['year'][0]) : false;
        
$info['comment'] = isset($tags['comment'][0]) ? self::clean($tags['comment'][0]) : false;
        
$info['album'] = isset($tags['album'][0]) ? self::clean($tags['album'][0]) : false;
        if(isset(
$analyze['id3v2']['APIC'][0]['data'])) {
            
$info['cover'] = $analyze['id3v2']['APIC'][0]['data'];
        }
        return 
$info;
        
    }
    
    
/**
     * Записываем обложку
    **/
    
    
public function Write($file$tags false$cover false)
    {
        
//$file = self::$root . '/' . $ffile;
        
if(empty($file)) {
            exit(
'Error! Path to file is empty write');
        }
        if(!
file_exists($file)) {
            exit(
'Error! File '.$file.' not exists write');
        }
        if(
$cover == false || !is_array($tags) || !is_string($cover)) {
            exit(
'Error! There are no required parameters!');
        }
        
$tagArr self::GetMp3Info($filetrue);
        if(!empty(
$cover)) {
            
//$cover = self::$root . '/' . $cover;
            
if(!file_exists($cover)) {
                exit(
'File of cover not exists!' $cover);
            }
            if(
self::ext($cover) != 'jpg' && self::ext($cover) != 'jpeg') {
                exit(
'Invalid mime type of cover image. Allowed mime type is jpeg!');
            }
            if(
filesize($cover) > 100 1024) {
                exit(
'File size of cover image is big. Max allowed file size is 100kb!');
            }
            
$data['attached_picture'][] = array(
                                               
'data' => file_get_contents($cover),
                                               
'description' => 'cover',
                                               
'picturetypeid' => '1',
                                               
'mime' => 'image/jpeg');
                                               
        }
        if(!empty(
$tags)) {
            if(!
is_array($tags)) {
                exit(
'Error! Tags must be an array!');
            }
            foreach(
$tags as $key => $value) {
                
$data[$key][0] = $value;
            }
        }
        if(!empty(
$tags)) {
            
$tagArr array_merge($tagArr$data);
        }
        require_once(
self::$includePath.'/id3/getid3.php');
        
$write = new getid3_writetags;
        
$write->filename $file;
        
$write->remove_other_tags false;
        
$write->overwrite_tags true;
        
$write->tag_encoding 'UTF-8';
        
$write->tag_data $tagArr;
        
$write->tagformats = array('id3v1''id3v2.3');
        return 
$write->WriteTags();
    }
    
    
/**
     * Обезаем мелодию, если передан параметр
    **/
    
    
private function Cut($time = array())
    {
        if(!
is_array($time)) {
            exit(
'Error! Time parameters must be an array!');
        }
        
$start gmdate('H:i:s'$time[0]);
        
$end gmdate('H:i:s'floor($time[1] - $time[0]));
        if(
$start $end) {
            exit(
'Error! Start time should not be greater than the final time');
        }
        return 
'-ss ' $start ' -t ' $end;
    }
    
    
/**
     * Конвертация 
    **/
    
    
public function Convert ($file$bit$outFile$time false)
    {
        if(empty(
$file)) {
            exit(
'Error! Path to file is empty');
        }
        if(!
file_exists($file)) {
            exit(
'Error! File '.$file.' not exists');
        }
        
$ext self::ext($outFile);
        
$outFile self::$root'/' $outFile;
        
$codecs = array(
                        
'mp3' => 'libmp3lame',
                        
'wav' => 'adpcm_ima_wav',
                        
'aac' => 'libfaac',
                        
'm4a' => 'libfaac',
                        
'wma' => 'wmav1'
                       
);
        
$sampleRate = array(
                            
'320' => '44100',
                            
'256' => '44100',
                            
'192' => '44100',
                            
'160' => '44100',
                            
'128' => '44100',
                            
'64'  => '22050',
                            
'32'  => '22050'
                           
);
        
$info self::GetMp3Info($file);
        if((
ceil($info['bitrate'] / 1000) < $bit) || (ceil($info['bitrate'] / 1000) == $bit && $ext == 'mp3')) {
            exit(
'Error! The new bitrate can not exceed the bitrate of the original file!');
        }
        if(
$time != false) {
            
$cut self::Cut($time);
        }
        if(
file_exists($outFile)) {
            return 
true;
        }
        if(
exec('ffmpeg -i ' self::$root '/' $file ' -acodec ' $codecs[$ext] . ' -ar ' $sampleRate[$bit] . ' -ab ' $bit 'K' . (isset($cut) ? ' ' $cut '') . ' -ac 2 ' $outFile ' && id3cp ' $file ' ' $outFile))
            return 
true;
        else
            return 
false;
    }
}
Онлайн: 2
Реклама