summaryrefslogtreecommitdiffstats
path: root/modules/id3/vainfo.class.php
diff options
context:
space:
mode:
authorKarl 'vollmerk' Vollmer <vollmer@ampache.org>2007-04-23 07:31:05 +0000
committerKarl 'vollmerk' Vollmer <vollmer@ampache.org>2007-04-23 07:31:05 +0000
commita31560aec4f004e58930277758f5412d86c62adc (patch)
tree845ff6947d26b22a0f4527901dbefc97bca89d78 /modules/id3/vainfo.class.php
parent8b27d66add7ca9ba57d7e9488612cb54be4b11c1 (diff)
downloadampache-a31560aec4f004e58930277758f5412d86c62adc.tar.gz
ampache-a31560aec4f004e58930277758f5412d86c62adc.tar.bz2
ampache-a31560aec4f004e58930277758f5412d86c62adc.zip
it technically logs in and streams.. but thats it, complete rewrite almost everything broken
Diffstat (limited to 'modules/id3/vainfo.class.php')
-rwxr-xr-xmodules/id3/vainfo.class.php516
1 files changed, 0 insertions, 516 deletions
diff --git a/modules/id3/vainfo.class.php b/modules/id3/vainfo.class.php
deleted file mode 100755
index cdf793ab..00000000
--- a/modules/id3/vainfo.class.php
+++ /dev/null
@@ -1,516 +0,0 @@
-<?php
-/*
-
- Copyright (c) 2001 - 2006 Ampache.org
- All rights reserved.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program 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 General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-*/
-
-/**
- * vainfo
- * This class takes the information pulled from getID3 and returns it in a
- * Ampache friendly way.
- */
-class vainfo {
-
- /* Default Encoding */
- var $encoding = '';
-
- /* Loaded Variables */
- var $filename = '';
- var $type = '';
- var $tags = array();
-
- /* Internal Information */
- var $_raw = array();
- var $_getID3 = '';
- var $_iconv = false;
- var $_file_encoding = '';
- var $_file_pattern = '';
- var $_dir_pattern = '';
-
- /**
- * Constructor
- * This function just sets up the class, it doesn't
- * actually pull the information
- */
- function vainfo($file,$encoding='',$dir_pattern,$file_pattern) {
-
- $this->filename = $file;
- if ($encoding) {
- $this->encoding = $encoding;
- }
- else {
- $this->encoding = conf('site_charset');
- }
-
- /* These are needed for the filename mojo */
- $this->_file_pattern = $file_pattern;
- $this->_dir_pattern = $dir_pattern;
-
- // Initialize getID3 engine
- $this->_getID3 = new getID3();
- $this->_getID3->option_md5_data = false;
- $this->_getID3->option_md5_data_source = false;
- $this->_getID3->option_tags_html = false;
- $this->_getID3->option_extra_info = false;
- $this->_getID3->option_tag_lyrics3 = false;
- $this->_getID3->encoding = $this->encoding;
-
- /* Check for ICONV */
- if (function_exists('iconv')) {
- $this->_iconv = true;
- }
-
- } // vainfo
-
-
- /**
- * get_info
- * This function takes a filename and returns the $_info array
- * all filled up with tagie goodness or if specified filename
- * pattern goodness
- */
- function get_info() {
-
- /* Get the Raw file information */
- $this->_raw = $this->_getID3->analyze($this->filename);
-
- /* Figure out what type of file we are dealing with */
- $this->type = $this->_get_type();
-
- /* This is very important, figure out th encoding of the
- * file
- */
- $this->_set_encoding();
-
- /* Get the general information about this file */
- $info = $this->_get_info();
-
-
- /* Gets the Tags */
- $this->tags = $this->_get_tags();
- $this->tags['info'] = $info;
-
- unset($this->_raw);
-
- } // get_info
-
- /**
- * _set_encoding
- * This function trys to figure out what the encoding
- * is based on the file type and sets the _file_encoding
- * var to whatever it finds, the default is UTF-8 if we
- * can't find anything
- */
- function _set_encoding() {
- /* Switch on the file type */
- switch ($this->type) {
- case 'mp3':
- case 'ogg':
- case 'flac':
- default:
- $this->_file_encoding = $this->_raw['encoding'];
- break;
- } // end switch
-
- } // _get_encoding
-
- /**
- * _get_type
- * This function takes the raw information and figures out
- * what type of file we are dealing with for use by the tag
- * function
- */
- function _get_type() {
-
- /* There are a few places that the file type can
- * come from, in the end we trust the encoding
- * type
- */
- if ($type = $this->_raw['audio']['streams']['0']['dataformat']) {
- $this->_clean_type($type);
- return $type;
- }
- if ($type = $this->_raw['audio']['dataformat']) {
- $this->_clean_type($type);
- return $type;
- }
- if ($type = $this->_raw['fileformat']) {
- $this->_clean_type($type);
- return $type;
- }
-
- return false;
-
- } // _get_type
-
-
- /**
- * _get_tags
- * This function takes the raw information and the type and
- * attempts to gather the tags and then normalize them into
- * ['tag_name']['var'] = value
- */
- function _get_tags() {
-
- $results = array();
-
- /* Gather Tag information from the filenames */
- $results['file'] = $this->_parse_filename($this->filename);
-
- /* Return false if we don't have
- * any tags to look at
- */
- if (!is_array($this->_raw['tags'])) {
- return false;
- }
-
- /* The tags can come in many different shapes and colors
- * depending on the encoding time of day and phase of the
- * moon
- */
- foreach ($this->_raw['tags'] as $key=>$tag_array) {
- switch ($key) {
- case 'vorbiscomment':
- $results[$key] = $this->_parse_vorbiscomment($tag_array);
- break;
- case 'id3v1':
- $results[$key] = $this->_parse_id3v1($tag_array);
- break;
- case 'id3v2':
- $results[$key] = $this->_parse_id3v2($tag_array);
- break;
- case 'ape':
- $results[$key] = $this->_parse_ape($tag_array);
- break;
- case 'quicktime':
- $results[$key] = $this->_parse_quicktime($tag_array);
- break;
- case 'riff':
- $results[$key] = $this->_parse_riff($tag_array);
- break;
- default:
- debug_event('vainfo','Error: Unable to determine tag type of ' . $key . ' for file ' . $this->filename . ' Assuming id3v2','5');
- $results[$key] = $this->_parse_id3v2($tag_array);
- break;
- } // end switch
-
- } // end foreach
-
- return $results;
-
- } // _get_tags
-
- /**
- * _get_info
- * This function gathers and returns the general information
- * about a song, vbr/cbr sample rate channels etc
- */
- function _get_info() {
-
- $array = array();
-
- /* Try to pull the information directly from
- * the audio array
- */
- if ($this->_raw['audio']['bitrate_mode']) {
- $array['bitrate_mode'] = $this->_raw['audio']['bitrate_mode'];
- }
- if ($this->_raw['audio']['bitrate']) {
- $array['bitrate'] = $this->_raw['audio']['bitrate'];
- }
- if ($this->_raw['audio']['channels']) {
- $array['channels'] = intval($this->_raw['audio']['channels']);
- }
- if ($this->_raw['audio']['sample_rate']) {
- $array['sample_rate'] = intval($this->_raw['audio']['sample_rate']);
- }
- if ($this->_raw['filesize']) {
- $array['filesize'] = intval($this->_raw['filesize']);
- }
- if ($this->_raw['encoding']) {
- $array['encoding'] = $this->_raw['encoding'];
- }
- if ($this->_raw['mime_type']) {
- $array['mime'] = $this->_raw['mime_type'];
- }
- if ($this->_raw['playtime_seconds']) {
- $array['playing_time'] = $this->_raw['playtime_seconds'];
- }
-
- return $array;
-
- } // _get_info
-
- /**
- * _clean_type
- * This standardizes the type that we are given into a reconized
- * type
- */
- function _clean_type($type) {
-
- switch ($type) {
- case 'mp3':
- case 'mp2':
- case 'mpeg3':
- return 'mp3';
- break;
- case 'flac':
- return 'flac';
- break;
- case 'vorbis':
- return 'ogg';
- break;
- default:
- /* Log the fact that we couldn't figure it out */
- debug_event('vainfo','Unable to determine file type from ' . $type . ' on file ' . $this->filename,'5');
- return 'unknown';
- break;
- } // end switch on type
-
- } // _clean_type
-
- /**
- * _parse_vorbiscomment
- * This function takes a vorbiscomment from getid3() and then
- * returns the elements translated using iconv if needed in a
- * pretty little format
- */
- function _parse_vorbiscomment($tags) {
-
- /* Results array */
- $array = array();
-
- /* go through them all! */
- foreach ($tags as $tag=>$data) {
-
- /* We need to translate a few of these tags */
- switch ($tag) {
- case 'tracknumber':
- $array['track'] = $this->_clean_tag($data['0']);
- break;
- case 'date':
- $array['year'] = $this->_clean_tag($data['0']);
- break;
- } // end switch
-
- $array[$tag] = $this->_clean_tag($data['0']);
-
- } // end foreach
-
- return $array;
-
- } // _parse_vorbiscomment
-
- /**
- * _parse_id3v1
- * This function takes a id3v1 tag set from getid3() and then
- * returns the elements translated using iconv if needed in a
- * pretty little format
- */
- function _parse_id3v1($tags) {
-
- $array = array();
-
- /* Go through all the tags */
- foreach ($tags as $tag=>$data) {
-
- /* This is our baseline for naming
- * so no translation needed
- */
- $array[$tag] = $this->_clean_tag($data['0'],$this->_file_encoding);
-
- } // end foreach
-
- return $array;
-
- } // _parse_id3v1
-
- /**
- * _parse_id3v2
- * This function takes a id3v2 tag set from getid3() and then
- * returns the lelements translated using iconv if needed in a
- * pretty little format
- */
- function _parse_id3v2($tags) {
-
- $array = array();
-
- /* Go through the tags */
- foreach ($tags as $tag=>$data) {
-
- /**
- * the new getid3 handles this differently
- * so we now need to account for it :(
- */
- switch ($tag) {
- case 'track_number':
- $array['track'] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- //case 'content_type':
- // $array['genre'] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- case 'comments':
- $array['comment'] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- default:
- $array[$tag] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- } // end switch on tag
-
- } // end foreach
-
- return $array;
-
- } // _parse_id3v2
-
- /**
- * _parse_ape
- * This function takes ape tags set by getid3() and then
- * returns the elements translated using iconv if needed in a
- * pretty little format
- */
- function _parse_ape($tags) {
-
- foreach ($tags as $tag=>$data) {
-
- $array[$tag] = $this->_clean_tag($data['0'],$this->_file_encoding);
-
- } // end foreach tags
-
- return $array;
-
- } // _parse_ape
-
- /**
- * _parse_riff
- * this function takes the riff take information passed by getid3() and
- * then reformats it so that it matches the other formats. May require iconv
- */
- function _parse_riff($tags) {
-
- foreach ($tags as $tag=>$data) {
-
- switch ($tag) {
- case 'product':
- $array['album'] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- default:
- $array[$tag] = $this->_clean_tag($data['0'],$this->_file_encoding);
- break;
- } // end switch on tag
-
- } // foreach tags
-
- return $array;
-
- } // _parse_riff
-
- /**
- * _parse_quicktime
- * this function takes the quicktime tags set by getid3() and then
- * returns the elements translated using iconv if needed in a
- * pretty little format
- */
- function _parse_quicktime($tags) {
-
- /* Results array */
- $array = array();
-
- /* go through them all! */
- foreach ($tags as $tag=>$data) {
-
- /* We need to translate a few of these tags */
- switch ($tag) {
- case 'creation_date':
- if (strlen($data['0']) > 4) {
- /* Weird Date format, attempt to normalize */
- $data['0'] = date("Y",strtotime($data['0']));
- }
- $array['year'] = $this->_clean_tag($data['0']);
- break;
- } // end switch
-
- $array[$tag] = $this->_clean_tag($data['0']);
-
- } // end foreach
-
- return $array;
-
- } // _parse_quicktime
-
-
- /**
- * _parse_filename
- * This function uses the passed file and dir patterns
- * To pull out extra tag information and populate it into
- * it's own array
- */
- function _parse_filename($filename) {
-
- $results = array();
-
- $pattern = $this->_dir_pattern . '/' . $this->_file_pattern;
- preg_match_all("/\%\w/",$pattern,$elements);
-
- $preg_pattern = preg_quote($pattern);
- $preg_pattern = preg_replace("/\%\w/","(.+)",$preg_pattern);
- $preg_pattern = str_replace("/","\/",$preg_pattern);
- $preg_pattern = "/" . $preg_pattern . "\..+$/";
- preg_match($preg_pattern,$filename,$matches);
- /* Cut out the Full line, we don't need that */
- array_shift($matches);
-
- /* Foreach through what we've found */
- foreach ($matches as $key=>$value) {
- $new_key = translate_pattern_code($elements['0'][$key]);
- if ($new_key) {
- $results[$new_key] = $value;
- }
- } // end foreach matches
-
- return $results;
-
- } // _parse_filename
-
- /**
- * _clean_tag
- * This function cleans up the tag that it's passed using Iconv
- * if we've got it. It also takes an optional encoding param
- * for the cases where we know what the tags source encoding
- * is, and or if it's different then the encoding recorded
- * in the file
- */
- function _clean_tag($tag,$encoding='') {
-
- /* Guess that it's UTF-8 */
- if (!$encoding) { $encoding = 'UTF-8'; }
-
- if ($this->_iconv AND strcasecmp($encoding,$this->encoding) != 0) {
- $charset = $this->encoding . '//TRANSLIT';
- $tag = iconv($encoding,$charset,$tag);
- }
-
- return $tag;
-
-
-
- } // _clean_tag
-
-} // end class vainfo
-?>