⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.audio.aac.php

📁 一个用PHP编写的
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php//////////////////////////////////////////////////////////////////// getID3() by James Heinrich <info@getid3.org>               ////  available at http://getid3.sourceforge.net                 ////            or http://www.getid3.org                         ///////////////////////////////////////////////////////////////////// See readme.txt for more details                             /////////////////////////////////////////////////////////////////////                                                             //// module.audio.aac.php                                        //// module for analyzing AAC Audio files                        //// dependencies: NONE                                          ////                                                            ////////////////////////////////////////////////////////////////////class getid3_aac{	// new combined constructor	function getid3_aac(&$fd, &$ThisFileInfo, $option) {		if ($option === 'adif') {			$this->getAACADIFheaderFilepointer($fd, $ThisFileInfo);		}		elseif ($option === 'adts') {			$this->getAACADTSheaderFilepointer($fd, $ThisFileInfo);		}	}	function getAACADIFheaderFilepointer(&$fd, &$ThisFileInfo) {		$ThisFileInfo['fileformat']          = 'aac';		$ThisFileInfo['audio']['dataformat'] = 'aac';		$ThisFileInfo['audio']['lossless']   = false;		fseek($fd, $ThisFileInfo['avdataoffset'], SEEK_SET);		$AACheader = fread($fd, 1024);		$offset    = 0;		if (substr($AACheader, 0, 4) == 'ADIF') {			// http://faac.sourceforge.net/wiki/index.php?page=ADIF			// http://libmpeg.org/mpeg4/doc/w2203tfs.pdf			// adif_header() {			//     adif_id                                32			//     copyright_id_present                    1			//     if( copyright_id_present )			//         copyright_id                       72			//     original_copy                           1			//     home                                    1			//     bitstream_type                          1			//     bitrate                                23			//     num_program_config_elements             4			//     for (i = 0; i < num_program_config_elements + 1; i++ ) {			//         if( bitstream_type == '0' )			//             adif_buffer_fullness           20			//         program_config_element()			//     }			// }			$AACheaderBitstream = getid3_lib::BigEndian2Bin($AACheader);			$bitoffset          = 0;			$ThisFileInfo['aac']['header_type']                   = 'ADIF';			$bitoffset += 32;			$ThisFileInfo['aac']['header']['mpeg_version']        = 4;			$ThisFileInfo['aac']['header']['copyright']           = (bool) (substr($AACheaderBitstream, $bitoffset, 1) == '1');			$bitoffset += 1;			if ($ThisFileInfo['aac']['header']['copyright']) {				$ThisFileInfo['aac']['header']['copyright_id']    = getid3_lib::Bin2String(substr($AACheaderBitstream, $bitoffset, 72));				$bitoffset += 72;			}			$ThisFileInfo['aac']['header']['original_copy']       = (bool) (substr($AACheaderBitstream, $bitoffset, 1) == '1');			$bitoffset += 1;			$ThisFileInfo['aac']['header']['home']                = (bool) (substr($AACheaderBitstream, $bitoffset, 1) == '1');			$bitoffset += 1;			$ThisFileInfo['aac']['header']['is_vbr']              = (bool) (substr($AACheaderBitstream, $bitoffset, 1) == '1');			$bitoffset += 1;			if ($ThisFileInfo['aac']['header']['is_vbr']) {				$ThisFileInfo['audio']['bitrate_mode']            = 'vbr';				$ThisFileInfo['aac']['header']['bitrate_max']     = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 23));				$bitoffset += 23;			} else {				$ThisFileInfo['audio']['bitrate_mode']            = 'cbr';				$ThisFileInfo['aac']['header']['bitrate']         = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 23));				$bitoffset += 23;				$ThisFileInfo['audio']['bitrate']                 = $ThisFileInfo['aac']['header']['bitrate'];			}			if ($ThisFileInfo['audio']['bitrate'] == 0) {				$ThisFileInfo['error'][] = 'Corrupt AAC file: bitrate_audio == zero';				return false;			}			$ThisFileInfo['aac']['header']['num_program_configs'] = 1 + getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));			$bitoffset += 4;			for ($i = 0; $i < $ThisFileInfo['aac']['header']['num_program_configs']; $i++) {				// http://www.audiocoding.com/wiki/index.php?page=program_config_element				// buffer_fullness                       20				// element_instance_tag                   4				// object_type                            2				// sampling_frequency_index               4				// num_front_channel_elements             4				// num_side_channel_elements              4				// num_back_channel_elements              4				// num_lfe_channel_elements               2				// num_assoc_data_elements                3				// num_valid_cc_elements                  4				// mono_mixdown_present                   1				// mono_mixdown_element_number            4   if mono_mixdown_present == 1				// stereo_mixdown_present                 1				// stereo_mixdown_element_number          4   if stereo_mixdown_present == 1				// matrix_mixdown_idx_present             1				// matrix_mixdown_idx                     2   if matrix_mixdown_idx_present == 1				// pseudo_surround_enable                 1   if matrix_mixdown_idx_present == 1				// for (i = 0; i < num_front_channel_elements; i++) {				//     front_element_is_cpe[i]            1				//     front_element_tag_select[i]        4				// }				// for (i = 0; i < num_side_channel_elements; i++) {				//     side_element_is_cpe[i]             1				//     side_element_tag_select[i]         4				// }				// for (i = 0; i < num_back_channel_elements; i++) {				//     back_element_is_cpe[i]             1				//     back_element_tag_select[i]         4				// }				// for (i = 0; i < num_lfe_channel_elements; i++) {				//     lfe_element_tag_select[i]          4				// }				// for (i = 0; i < num_assoc_data_elements; i++) {				//     assoc_data_element_tag_select[i]   4				// }				// for (i = 0; i < num_valid_cc_elements; i++) {				//     cc_element_is_ind_sw[i]            1				//     valid_cc_element_tag_select[i]     4				// }				// byte_alignment()                       VAR				// comment_field_bytes                    8				// for (i = 0; i < comment_field_bytes; i++) {				//     comment_field_data[i]              8				// }				if (!$ThisFileInfo['aac']['header']['is_vbr']) {					$ThisFileInfo['aac']['program_configs'][$i]['buffer_fullness']        = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 20));					$bitoffset += 20;				}				$ThisFileInfo['aac']['program_configs'][$i]['element_instance_tag']       = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['object_type']                = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 2));				$bitoffset += 2;				$ThisFileInfo['aac']['program_configs'][$i]['sampling_frequency_index']   = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['num_front_channel_elements'] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['num_side_channel_elements']  = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['num_back_channel_elements']  = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['num_lfe_channel_elements']   = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 2));				$bitoffset += 2;				$ThisFileInfo['aac']['program_configs'][$i]['num_assoc_data_elements']    = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 3));				$bitoffset += 3;				$ThisFileInfo['aac']['program_configs'][$i]['num_valid_cc_elements']      = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));				$bitoffset += 4;				$ThisFileInfo['aac']['program_configs'][$i]['mono_mixdown_present']       = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));				$bitoffset += 1;				if ($ThisFileInfo['aac']['program_configs'][$i]['mono_mixdown_present']) {					$ThisFileInfo['aac']['program_configs'][$i]['mono_mixdown_element_number']    = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				$ThisFileInfo['aac']['program_configs'][$i]['stereo_mixdown_present']             = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));				$bitoffset += 1;				if ($ThisFileInfo['aac']['program_configs'][$i]['stereo_mixdown_present']) {					$ThisFileInfo['aac']['program_configs'][$i]['stereo_mixdown_element_number']  = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				$ThisFileInfo['aac']['program_configs'][$i]['matrix_mixdown_idx_present']         = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));				$bitoffset += 1;				if ($ThisFileInfo['aac']['program_configs'][$i]['matrix_mixdown_idx_present']) {					$ThisFileInfo['aac']['program_configs'][$i]['matrix_mixdown_idx']             = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 2));					$bitoffset += 2;					$ThisFileInfo['aac']['program_configs'][$i]['pseudo_surround_enable']         = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));					$bitoffset += 1;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_front_channel_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['front_element_is_cpe'][$j]     = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));					$bitoffset += 1;					$ThisFileInfo['aac']['program_configs'][$i]['front_element_tag_select'][$j] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_side_channel_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['side_element_is_cpe'][$j]     = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));					$bitoffset += 1;					$ThisFileInfo['aac']['program_configs'][$i]['side_element_tag_select'][$j] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_back_channel_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['back_element_is_cpe'][$j]     = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));					$bitoffset += 1;					$ThisFileInfo['aac']['program_configs'][$i]['back_element_tag_select'][$j] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_lfe_channel_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['lfe_element_tag_select'][$j] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_assoc_data_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['assoc_data_element_tag_select'][$j] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				for ($j = 0; $j < $ThisFileInfo['aac']['program_configs'][$i]['num_valid_cc_elements']; $j++) {					$ThisFileInfo['aac']['program_configs'][$i]['cc_element_is_ind_sw'][$j]          = (bool) getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 1));					$bitoffset += 1;					$ThisFileInfo['aac']['program_configs'][$i]['valid_cc_element_tag_select'][$j]   = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 4));					$bitoffset += 4;				}				$bitoffset = ceil($bitoffset / 8) * 8;				$ThisFileInfo['aac']['program_configs'][$i]['comment_field_bytes'] = getid3_lib::Bin2Dec(substr($AACheaderBitstream, $bitoffset, 8));				$bitoffset += 8;				$ThisFileInfo['aac']['program_configs'][$i]['comment_field']       = getid3_lib::Bin2String(substr($AACheaderBitstream, $bitoffset, 8 * $ThisFileInfo['aac']['program_configs'][$i]['comment_field_bytes']));				$bitoffset += 8 * $ThisFileInfo['aac']['program_configs'][$i]['comment_field_bytes'];				$ThisFileInfo['aac']['header']['profile_text']                      = $this->AACprofileLookup($ThisFileInfo['aac']['program_configs'][$i]['object_type'], $ThisFileInfo['aac']['header']['mpeg_version']);				$ThisFileInfo['aac']['program_configs'][$i]['sampling_frequency']   = $this->AACsampleRateLookup($ThisFileInfo['aac']['program_configs'][$i]['sampling_frequency_index']);				$ThisFileInfo['audio']['sample_rate']                               = $ThisFileInfo['aac']['program_configs'][$i]['sampling_frequency'];				$ThisFileInfo['audio']['channels']                                  = $this->AACchannelCountCalculate($ThisFileInfo['aac']['program_configs'][$i]);				if ($ThisFileInfo['aac']['program_configs'][$i]['comment_field']) {					$ThisFileInfo['aac']['comments'][]                          = $ThisFileInfo['aac']['program_configs'][$i]['comment_field'];				}			}			$ThisFileInfo['playtime_seconds'] = (($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) * 8) / $ThisFileInfo['audio']['bitrate'];			$ThisFileInfo['audio']['encoder_options'] = $ThisFileInfo['aac']['header_type'].' '.$ThisFileInfo['aac']['header']['profile_text'];			return true;		} else {			unset($ThisFileInfo['fileformat']);			unset($ThisFileInfo['aac']);			$ThisFileInfo['error'][] = 'AAC-ADIF synch not found at offset '.$ThisFileInfo['avdataoffset'].' (expected "ADIF", found "'.substr($AACheader, 0, 4).'" instead)';			return false;		}	}	function getAACADTSheaderFilepointer(&$fd, &$ThisFileInfo, $MaxFramesToScan=1000000, $ReturnExtendedInfo=false) {		// based loosely on code from AACfile by Jurgen Faul  <jfaul豨mx.de>		// http://jfaul.de/atl  or  http://j-faul.virtualave.net/atl/atl.html		// http://faac.sourceforge.net/wiki/index.php?page=ADTS		// * ADTS Fixed Header: these don't change from frame to frame		// syncword                                       12    always: '111111111111'		// ID                                              1    0: MPEG-4, 1: MPEG-2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -