nextcloud/apps/media/getID3/demos/demo.audioinfo.class.php

319 lines
6.8 KiB
PHP
Raw Normal View History

2011-07-22 08:30:52 +04:00
<?php
// +----------------------------------------------------------------------+
// | 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<61>artemis*dk> |
// +----------------------------------------------------------------------+
//
/**
* getID3() settings
*/
require_once('../getid3/getid3.php');
/**
* Class for extracting information from audio files with getID3().
*/
class AudioInfo {
/**
* Private variables
*/
var $result = NULL;
var $info = NULL;
/**
* Constructor
*/
function AudioInfo() {
// 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
*
* @access public
* @param string file Audio file to extract info from.
*/
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'] = @$this->info['fileformat'].'/'.@$this->info['audio']['dataformat'].(isset($this->info['video']['dataformat']) ? '/'.@$this->info['video']['dataformat'] : '');
$this->result['encoder_version'] = @$this->info['audio']['encoder'];
$this->result['encoder_options'] = @$this->info['audio']['encoder_options'];
$this->result['bitrate_mode'] = @$this->info['audio']['bitrate_mode'];
$this->result['channels'] = @$this->info['audio']['channels'];
$this->result['sample_rate'] = @$this->info['audio']['sample_rate'];
$this->result['bits_per_sample'] = @$this->info['audio']['bits_per_sample'];
$this->result['playing_time'] = @$this->info['playtime_seconds'];
$this->result['avg_bit_rate'] = @$this->info['audio']['bitrate'];
$this->result['tags'] = @$this->info['tags'];
$this->result['comments'] = @$this->info['comments'];
$this->result['warning'] = @$this->info['warning'];
$this->result['md5'] = @$this->info['md5_data'];
// Post getID3() data handling based on file format
$method = @$this->info['fileformat'].'Info';
if (@$this->info['fileformat'] && method_exists($this, $method)) {
$this->$method();
}
return $this->result;
}
/**
* post-getID3() data handling for AAC files.
*
* @access private
*/
function aacInfo() {
$this->result['format_name'] = 'AAC';
}
/**
* post-getID3() data handling for Wave files.
*
* @access private
*/
function riffInfo() {
if ($this->info['audio']['dataformat'] == 'wav') {
$this->result['format_name'] = 'Wave';
} else if (ereg('^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.
*
* @access private
*/
function flacInfo() {
$this->result['format_name'] = 'FLAC';
}
/**
* post-getID3() data handling for Monkey's Audio files.
*
* @access private
*/
function macInfo() {
$this->result['format_name'] = 'Monkey\'s Audio';
}
/**
* post-getID3() data handling for Lossless Audio files.
*
* @access 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';
}
}
?>