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

📄 module.tag.id3v2.php

📁 一个用PHP编写的
💻 PHP
📖 第 1 页 / 共 5 页
字号:
				$parsedFrame['flags']['Unsynchronisation']     = (bool) ($parsedFrame['frame_flags_raw'] & 0x0002); // n - Unsynchronisation				$parsedFrame['flags']['DataLengthIndicator']   = (bool) ($parsedFrame['frame_flags_raw'] & 0x0001); // p - Data length indicator				// Frame-level de-unsynchronisation - ID3v2.4				if ($parsedFrame['flags']['Unsynchronisation']) {					$parsedFrame['data'] = $this->DeUnsynchronise($parsedFrame['data']);				}			}			//    Frame-level de-compression			if ($parsedFrame['flags']['compression']) {				$parsedFrame['decompressed_size'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4));				if (!function_exists('gzuncompress')) {					$ThisFileInfo['warning'][] = 'gzuncompress() support required to decompress ID3v2 frame "'.$parsedFrame['frame_name'].'"';				} elseif ($decompresseddata = @gzuncompress(substr($parsedFrame['data'], 4))) {					$parsedFrame['data'] = $decompresseddata;				} else {					$ThisFileInfo['warning'][] = 'gzuncompress() failed on compressed contents of ID3v2 frame "'.$parsedFrame['frame_name'].'"';				}			}		}		if (isset($parsedFrame['datalength']) && ($parsedFrame['datalength'] == 0)) {			$warning = 'Frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset'].' has no data portion';			switch ($parsedFrame['frame_name']) {				case 'WCOM':					$warning .= ' (this is known to happen with files tagged by RioPort)';					break;				default:					break;			}			$ThisFileInfo['warning'][] = $warning;		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'UFID')) || // 4.1   UFID Unique file identifier			(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'UFI'))) {  // 4.1   UFI  Unique file identifier			//   There may be more than one 'UFID' frame in a tag,			//   but only one with the same 'Owner identifier'.			// <Header for 'Unique file identifier', ID: 'UFID'>			// Owner identifier        <text string> $00			// Identifier              <up to 64 bytes binary data>			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00");			$frame_idstring = substr($parsedFrame['data'], 0, $frame_terminatorpos);			$parsedFrame['ownerid'] = $frame_idstring;			$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00"));			unset($parsedFrame['data']);		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'TXXX')) || // 4.2.2 TXXX User defined text information frame				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'TXX'))) {    // 4.2.2 TXX  User defined text information frame			//   There may be more than one 'TXXX' frame in each tag,			//   but only one with the same description.			// <Header for 'User defined text information frame', ID: 'TXXX'>			// Text encoding     $xx			// Description       <text string according to encoding> $00 (00)			// Value             <text string according to encoding>			$frame_offset = 0;			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {				$ThisFileInfo['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding';			}			$frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset);			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) {				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00			}			$frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);			if (ord($frame_description) === 0) {				$frame_description = '';			}			$parsedFrame['encodingid']  = $frame_textencoding;			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);			$parsedFrame['description'] = $frame_description;			$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)));			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $ThisFileInfo['id3v2']['encoding'], $parsedFrame['data']));			}			unset($parsedFrame['data']);		} elseif ($parsedFrame['frame_name']{0} == 'T') { // 4.2. T??[?] Text information frame			//   There may only be one text information frame of its kind in an tag.			// <Header for 'Text information frame', ID: 'T000' - 'TZZZ',			// excluding 'TXXX' described in 4.2.6.>			// Text encoding                $xx			// Information                  <text string(s) according to encoding>			$frame_offset = 0;			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {				$ThisFileInfo['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding';			}			$parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset);			$parsedFrame['encodingid'] = $frame_textencoding;			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($frame_textencoding);			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $ThisFileInfo['id3v2']['encoding'], $parsedFrame['data']);			}		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'WXXX')) || // 4.3.2 WXXX User defined URL link frame				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'WXX'))) {    // 4.3.2 WXX  User defined URL link frame			//   There may be more than one 'WXXX' frame in each tag,			//   but only one with the same description			// <Header for 'User defined URL link frame', ID: 'WXXX'>			// Text encoding     $xx			// Description       <text string according to encoding> $00 (00)			// URL               <text string>			$frame_offset = 0;			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {				$ThisFileInfo['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding';			}			$frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding), $frame_offset);			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) {				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00			}			$frame_description = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);			if (ord($frame_description) === 0) {				$frame_description = '';			}			$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)));			$frame_terminatorpos = strpos($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding));			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($this->TextEncodingTerminatorLookup($frame_textencoding)), 1)) === 0) {				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00			}			if ($frame_terminatorpos) {				// there are null bytes after the data - this is not according to spec				// only use data up to first null byte				$frame_urldata = (string) substr($parsedFrame['data'], 0, $frame_terminatorpos);			} else {				// no null bytes following data, just use all data				$frame_urldata = (string) $parsedFrame['data'];			}			$parsedFrame['encodingid']  = $frame_textencoding;			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);			$parsedFrame['url']         = $frame_urldata;			$parsedFrame['description'] = $frame_description;			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $ThisFileInfo['id3v2']['encoding'], $parsedFrame['url']);			}			unset($parsedFrame['data']);		} elseif ($parsedFrame['frame_name']{0} == 'W') { // 4.3. W??? URL link frames			//   There may only be one URL link frame of its kind in a tag,			//   except when stated otherwise in the frame description			// <Header for 'URL link frame', ID: 'W000' - 'WZZZ', excluding 'WXXX'			// described in 4.3.2.>			// URL              <text string>			$parsedFrame['url'] = trim($parsedFrame['data']);			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['url'];			}			unset($parsedFrame['data']);		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'IPLS')) || // 4.4  IPLS Involved people list (ID3v2.3 only)				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'IPL'))) {     // 4.4  IPL  Involved people list (ID3v2.2 only)			//   There may only be one 'IPL' frame in each tag			// <Header for 'User defined URL link frame', ID: 'IPL'>			// Text encoding     $xx			// People list strings    <textstrings>			$frame_offset = 0;			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {				$ThisFileInfo['warning'][] = 'Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding';			}			$parsedFrame['encodingid'] = $frame_textencoding;			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($parsedFrame['encodingid']);			$parsedFrame['data']       = (string) substr($parsedFrame['data'], $frame_offset);			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $ThisFileInfo['id3v2']['encoding'], $parsedFrame['data']);			}		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MCDI')) || // 4.4   MCDI Music CD identifier				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MCI'))) {     // 4.5   MCI  Music CD identifier			//   There may only be one 'MCDI' frame in each tag			// <Header for 'Music CD identifier', ID: 'MCDI'>			// CD TOC                <binary data>			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {				$ThisFileInfo['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data'];			}		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ETCO')) || // 4.5   ETCO Event timing codes				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ETC'))) {     // 4.6   ETC  Event timing codes			//   There may only be one 'ETCO' frame in each tag			// <Header for 'Event timing codes', ID: 'ETCO'>			// Time stamp format    $xx			//   Where time stamp format is:			// $01  (32-bit value) MPEG frames from beginning of file			// $02  (32-bit value) milliseconds from beginning of file			//   Followed by a list of key events in the following format:			// Type of event   $xx			// Time stamp      $xx (xx ...)			//   The 'Time stamp' is set to zero if directly at the beginning of the sound			//   or after the previous event. All events MUST be sorted in chronological order.			$frame_offset = 0;			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));			while ($frame_offset < strlen($parsedFrame['data'])) {				$parsedFrame['typeid']    = substr($parsedFrame['data'], $frame_offset++, 1);				$parsedFrame['type']      = $this->ETCOEventLookup($parsedFrame['typeid']);				$parsedFrame['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));				$frame_offset += 4;			}			unset($parsedFrame['data']);		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MLLT')) || // 4.6   MLLT MPEG location lookup table				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MLL'))) {     // 4.7   MLL MPEG location lookup table			//   There may only be one 'MLLT' frame in each tag			// <Header for 'Location lookup table', ID: 'MLLT'>			// MPEG frames between reference  $xx xx			// Bytes between reference        $xx xx xx			// Milliseconds between reference $xx xx xx			// Bits for bytes deviation       $xx			// Bits for milliseconds dev.     $xx			//   Then for every reference the following data is included;			// Deviation in bytes         %xxx....			// Deviation in milliseconds  %xxx....			$frame_offset = 0;			$parsedFrame['framesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 2));			$parsedFrame['bytesbetweenreferences']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 2, 3));			$parsedFrame['msbetweenreferences']     = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 5, 3));			$parsedFrame['bitsforbytesdeviation']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 8, 1));			$parsedFrame['bitsformsdeviation']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 9, 1));			$parsedFrame['data'] = substr($parsedFrame['data'], 10);			while ($frame_offset < strlen($parsedFrame['data'])) {				$deviationbitstream .= getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));

⌨️ 快捷键说明

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