123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- <?php
- /////////////////////////////////////////////////////////////////
- /// getID3() by James Heinrich <info@getid3.org> //
- // available at https://github.com/JamesHeinrich/getID3 //
- // or https://www.getid3.org //
- // or http://getid3.sourceforge.net //
- // //
- // /demo/demo.audioinfo.class.php - part of getID3() //
- // ///
- /////////////////////////////////////////////////////////////////
- // +----------------------------------------------------------------------+
- // | PHP version 4.1.0 |
- // +----------------------------------------------------------------------+
- // | Placed in public domain by Allan Hansen, 2002. Share and enjoy! |
- // +----------------------------------------------------------------------+
- // | /demo/demo.audioinfo.class.php |
- // | |
- // | Example wrapper class to extract information from audio files |
- // | through getID3(). |
- // | |
- // | getID3() returns a lot of information. Much of this information is |
- // | not needed for the end-application. It is also possible that some |
- // | users want to extract specific info. Modifying getID3() files is a |
- // | bad idea, as modifications needs to be done to future versions of |
- // | getID3(). |
- // | |
- // | Modify this wrapper class instead. This example extracts certain |
- // | fields only and adds a new root value - encoder_options if possible. |
- // | It also checks for mp3 files with wave headers. |
- // +----------------------------------------------------------------------+
- // | Example code: |
- // | $au = new AudioInfo(); |
- // | print_r($au->Info('file.flac'); |
- // +----------------------------------------------------------------------+
- // | Authors: Allan Hansen <ahØartemis*dk> |
- // +----------------------------------------------------------------------+
- /**
- * getID3() settings
- */
- require_once('../getid3/getid3.php');
- /**
- * Class for extracting information from audio files with getID3().
- */
- class AudioInfo {
- /**
- * Private variables
- */
- private $result;
- private $info;
- private $getID3;
- /**
- * Constructor
- */
- function __construct() {
- // Initialize getID3 engine
- $this->getID3 = new getID3;
- $this->getID3->option_md5_data = true;
- $this->getID3->option_md5_data_source = true;
- $this->getID3->encoding = 'UTF-8';
- }
- /**
- * Extract information - only public function
- *
- * @param string $file Audio file to extract info from.
- *
- * @return array
- */
- public function Info($file) {
- // Analyze file
- $this->info = $this->getID3->analyze($file);
- // Exit here on error
- if (isset($this->info['error'])) {
- return array ('error' => $this->info['error']);
- }
- // Init wrapper object
- $this->result = array();
- $this->result['format_name'] = (isset($this->info['fileformat']) ? $this->info['fileformat'] : '').'/'.(isset($this->info['audio']['dataformat']) ? $this->info['audio']['dataformat'] : '').(isset($this->info['video']['dataformat']) ? '/'.$this->info['video']['dataformat'] : '');
- $this->result['encoder_version'] = (isset($this->info['audio']['encoder']) ? $this->info['audio']['encoder'] : '');
- $this->result['encoder_options'] = (isset($this->info['audio']['encoder_options']) ? $this->info['audio']['encoder_options'] : '');
- $this->result['bitrate_mode'] = (isset($this->info['audio']['bitrate_mode']) ? $this->info['audio']['bitrate_mode'] : '');
- $this->result['channels'] = (isset($this->info['audio']['channels']) ? $this->info['audio']['channels'] : '');
- $this->result['sample_rate'] = (isset($this->info['audio']['sample_rate']) ? $this->info['audio']['sample_rate'] : '');
- $this->result['bits_per_sample'] = (isset($this->info['audio']['bits_per_sample']) ? $this->info['audio']['bits_per_sample'] : '');
- $this->result['playing_time'] = (isset($this->info['playtime_seconds']) ? $this->info['playtime_seconds'] : '');
- $this->result['avg_bit_rate'] = (isset($this->info['audio']['bitrate']) ? $this->info['audio']['bitrate'] : '');
- $this->result['tags'] = (isset($this->info['tags']) ? $this->info['tags'] : '');
- $this->result['comments'] = (isset($this->info['comments']) ? $this->info['comments'] : '');
- $this->result['warning'] = (isset($this->info['warning']) ? $this->info['warning'] : '');
- $this->result['md5'] = (isset($this->info['md5_data']) ? $this->info['md5_data'] : '');
- // Post getID3() data handling based on file format
- $method = (isset($this->info['fileformat']) ? $this->info['fileformat'] : '').'Info';
- if ($method && method_exists($this, $method)) {
- $this->$method();
- }
- return $this->result;
- }
- /**
- * post-getID3() data handling for AAC files.
- *
- */
- private function aacInfo() {
- $this->result['format_name'] = 'AAC';
- }
- /**
- * post-getID3() data handling for Wave files.
- *
- */
- private function riffInfo() {
- if ($this->info['audio']['dataformat'] == 'wav') {
- $this->result['format_name'] = 'Wave';
- } elseif (preg_match('#^mp[1-3]$#', $this->info['audio']['dataformat'])) {
- $this->result['format_name'] = strtoupper($this->info['audio']['dataformat']);
- } else {
- $this->result['format_name'] = 'riff/'.$this->info['audio']['dataformat'];
- }
- }
- /**
- * * post-getID3() data handling for FLAC files.
- *
- */
- private function flacInfo() {
- $this->result['format_name'] = 'FLAC';
- }
- /**
- * post-getID3() data handling for Monkey's Audio files.
- *
- */
- private function macInfo() {
- $this->result['format_name'] = 'Monkey\'s Audio';
- }
- /**
- * post-getID3() data handling for Lossless Audio files.
- */
- private function laInfo() {
- $this->result['format_name'] = 'La';
- }
- /**
- * post-getID3() data handling for Ogg Vorbis files.
- *
- * @access private
- */
- function oggInfo() {
- if ($this->info['audio']['dataformat'] == 'vorbis') {
- $this->result['format_name'] = 'Ogg Vorbis';
- } else if ($this->info['audio']['dataformat'] == 'flac') {
- $this->result['format_name'] = 'Ogg FLAC';
- } else if ($this->info['audio']['dataformat'] == 'speex') {
- $this->result['format_name'] = 'Ogg Speex';
- } else {
- $this->result['format_name'] = 'Ogg '.$this->info['audio']['dataformat'];
- }
- }
- /**
- * post-getID3() data handling for Musepack files.
- *
- * @access private
- */
- function mpcInfo() {
- $this->result['format_name'] = 'Musepack';
- }
- /**
- * post-getID3() data handling for MPEG files.
- *
- * @access private
- */
- function mp3Info() {
- $this->result['format_name'] = 'MP3';
- }
- /**
- * post-getID3() data handling for MPEG files.
- *
- * @access private
- */
- function mp2Info() {
- $this->result['format_name'] = 'MP2';
- }
- /**
- * post-getID3() data handling for MPEG files.
- *
- * @access private
- */
- function mp1Info() {
- $this->result['format_name'] = 'MP1';
- }
- /**
- * post-getID3() data handling for WMA files.
- *
- * @access private
- */
- function asfInfo() {
- $this->result['format_name'] = strtoupper($this->info['audio']['dataformat']);
- }
- /**
- * post-getID3() data handling for Real files.
- *
- * @access private
- */
- function realInfo() {
- $this->result['format_name'] = 'Real';
- }
- /**
- * post-getID3() data handling for VQF files.
- *
- * @access private
- */
- function vqfInfo() {
- $this->result['format_name'] = 'VQF';
- }
- }
|