wp/wp-includes/ID3/module.audio.flac.php
author ymh <ymh.work@gmail.com>
Tue, 15 Dec 2020 13:49:49 +0100
changeset 16 a86126ab1dd4
parent 7 cf61fcea0001
child 19 3d72ae0968f4
permissions -rw-r--r--
update enmi-conf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     2
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
/// getID3() by James Heinrich <info@getid3.org>               //
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     5
//  available at https://github.com/JamesHeinrich/getID3       //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     6
//            or https://www.getid3.org                        //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     7
//            or http://getid3.sourceforge.net                 //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     8
//  see readme.txt for more details                            //
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
// module.audio.flac.php                                       //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
// module for analyzing FLAC and OggFLAC audio files           //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
// dependencies: module.audio.ogg.php                          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
//                                                            ///
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    17
if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    18
	exit;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    19
}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
* @tutorial http://flac.sourceforge.net/format.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
class getid3_flac extends getid3_handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	const syncword = 'fLaC';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    29
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    30
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    31
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
	public function Analyze() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		$this->fseek($info['avdataoffset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		$StreamMarker = $this->fread(4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		if ($StreamMarker != self::syncword) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			return $this->error('Expecting "'.getid3_lib::PrintHexBytes(self::syncword).'" at offset '.$info['avdataoffset'].', found "'.getid3_lib::PrintHexBytes($StreamMarker).'"');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		$info['fileformat']            = 'flac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		$info['audio']['dataformat']   = 'flac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		$info['audio']['bitrate_mode'] = 'vbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		$info['audio']['lossless']     = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		// parse flac container
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		return $this->parseMETAdata();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    49
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    50
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    51
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
	public function parseMETAdata() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			$BlockOffset   = $this->ftell();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			$BlockHeader   = $this->fread(4);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    57
			$LBFBT         = getid3_lib::BigEndian2Int(substr($BlockHeader, 0, 1));  // LBFBT = LastBlockFlag + BlockType
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
			$LastBlockFlag = (bool) ($LBFBT & 0x80);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
			$BlockType     =        ($LBFBT & 0x7F);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			$BlockLength   = getid3_lib::BigEndian2Int(substr($BlockHeader, 1, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
			$BlockTypeText = self::metaBlockTypeLookup($BlockType);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
			if (($BlockOffset + 4 + $BlockLength) > $info['avdataend']) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    64
				$this->warning('METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockTypeText.') at offset '.$BlockOffset.' extends beyond end of file');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			if ($BlockLength < 1) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    68
				if ($BlockTypeText != 'reserved') {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    69
					// probably supposed to be zero-length
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    70
					$this->warning('METADATA_BLOCK_HEADER.BLOCK_LENGTH ('.$BlockTypeText.') at offset '.$BlockOffset.' is zero bytes');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    71
					continue;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    72
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
				$this->error('METADATA_BLOCK_HEADER.BLOCK_LENGTH ('.$BlockLength.') at offset '.$BlockOffset.' is invalid');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			$info['flac'][$BlockTypeText]['raw'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			$BlockTypeText_raw = &$info['flac'][$BlockTypeText]['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			$BlockTypeText_raw['offset']          = $BlockOffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			$BlockTypeText_raw['last_meta_block'] = $LastBlockFlag;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			$BlockTypeText_raw['block_type']      = $BlockType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			$BlockTypeText_raw['block_type_text'] = $BlockTypeText;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
			$BlockTypeText_raw['block_length']    = $BlockLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			if ($BlockTypeText_raw['block_type'] != 0x06) { // do not read attachment data automatically
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
				$BlockTypeText_raw['block_data']  = $this->fread($BlockLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			switch ($BlockTypeText) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				case 'STREAMINFO':     // 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
					if (!$this->parseSTREAMINFO($BlockTypeText_raw['block_data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				case 'PADDING':        // 0x01
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					unset($info['flac']['PADDING']); // ignore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
				case 'APPLICATION':    // 0x02
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
					if (!$this->parseAPPLICATION($BlockTypeText_raw['block_data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				case 'SEEKTABLE':      // 0x03
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
					if (!$this->parseSEEKTABLE($BlockTypeText_raw['block_data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
				case 'VORBIS_COMMENT': // 0x04
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
					if (!$this->parseVORBIS_COMMENT($BlockTypeText_raw['block_data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
				case 'CUESHEET':       // 0x05
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
					if (!$this->parseCUESHEET($BlockTypeText_raw['block_data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
				case 'PICTURE':        // 0x06
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
					if (!$this->parsePICTURE()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					$this->warning('Unhandled METADATA_BLOCK_HEADER.BLOCK_TYPE ('.$BlockType.') at offset '.$BlockOffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			unset($info['flac'][$BlockTypeText]['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			$info['avdataoffset'] = $this->ftell();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		while ($LastBlockFlag === false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		// handle tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
		if (!empty($info['flac']['VORBIS_COMMENT']['comments'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			$info['flac']['comments'] = $info['flac']['VORBIS_COMMENT']['comments'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		if (!empty($info['flac']['VORBIS_COMMENT']['vendor'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			$info['audio']['encoder'] = str_replace('reference ', '', $info['flac']['VORBIS_COMMENT']['vendor']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
		// copy attachments to 'comments' array if nesesary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		if (isset($info['flac']['PICTURE']) && ($this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			foreach ($info['flac']['PICTURE'] as $entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
				if (!empty($entry['data'])) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   151
					if (!isset($info['flac']['comments']['picture'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   152
						$info['flac']['comments']['picture'] = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   153
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   154
					$comments_picture_data = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   155
					foreach (array('data', 'image_mime', 'image_width', 'image_height', 'imagetype', 'picturetype', 'description', 'datalength') as $picture_key) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   156
						if (isset($entry[$picture_key])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   157
							$comments_picture_data[$picture_key] = $entry[$picture_key];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   158
						}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   159
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   160
					$info['flac']['comments']['picture'][] = $comments_picture_data;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   161
					unset($comments_picture_data);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
		if (isset($info['flac']['STREAMINFO'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
			if (!$this->isDependencyFor('matroska')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
				$info['flac']['compressed_audio_bytes'] = $info['avdataend'] - $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
			$info['flac']['uncompressed_audio_bytes'] = $info['flac']['STREAMINFO']['samples_stream'] * $info['flac']['STREAMINFO']['channels'] * ($info['flac']['STREAMINFO']['bits_per_sample'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			if ($info['flac']['uncompressed_audio_bytes'] == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
				return $this->error('Corrupt FLAC file: uncompressed_audio_bytes == zero');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			if (!empty($info['flac']['compressed_audio_bytes'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				$info['flac']['compression_ratio'] = $info['flac']['compressed_audio_bytes'] / $info['flac']['uncompressed_audio_bytes'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		// set md5_data_source - built into flac 0.5+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		if (isset($info['flac']['STREAMINFO']['audio_signature'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			if ($info['flac']['STREAMINFO']['audio_signature'] === str_repeat("\x00", 16)) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   183
				$this->warning('FLAC STREAMINFO.audio_signature is null (known issue with libOggFLAC)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
				$info['md5_data_source'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
				$md5 = $info['flac']['STREAMINFO']['audio_signature'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
				for ($i = 0; $i < strlen($md5); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
					$info['md5_data_source'] .= str_pad(dechex(ord($md5[$i])), 2, '00', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
				if (!preg_match('/^[0-9a-f]{32}$/', $info['md5_data_source'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
					unset($info['md5_data_source']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		if (isset($info['flac']['STREAMINFO']['bits_per_sample'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
			$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
			if ($info['audio']['bits_per_sample'] == 8) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
				// special case
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
				// must invert sign bit on all data bytes before MD5'ing to match FLAC's calculated value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
				// MD5sum calculates on unsigned bytes, but FLAC calculated MD5 on 8-bit audio data as signed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
				$this->warning('FLAC calculates MD5 data strangely on 8-bit audio, so the stored md5_data_source value will not match the decoded WAV file');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   211
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   212
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   213
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   214
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   215
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   216
	public static function parseSTREAMINFOdata($BlockData) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   217
		$streaminfo = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		$streaminfo['min_block_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		$streaminfo['max_block_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 2, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		$streaminfo['min_frame_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 4, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		$streaminfo['max_frame_size']  = getid3_lib::BigEndian2Int(substr($BlockData, 7, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
		$SRCSBSS                       = getid3_lib::BigEndian2Bin(substr($BlockData, 10, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		$streaminfo['sample_rate']     = getid3_lib::Bin2Dec(substr($SRCSBSS,  0, 20));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
		$streaminfo['channels']        = getid3_lib::Bin2Dec(substr($SRCSBSS, 20,  3)) + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
		$streaminfo['bits_per_sample'] = getid3_lib::Bin2Dec(substr($SRCSBSS, 23,  5)) + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
		$streaminfo['samples_stream']  = getid3_lib::Bin2Dec(substr($SRCSBSS, 28, 36));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   229
		$streaminfo['audio_signature'] =                           substr($BlockData, 18, 16);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   230
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   231
		return $streaminfo;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   232
	}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   234
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   235
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   236
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   237
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   238
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   239
	private function parseSTREAMINFO($BlockData) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   240
		$info = &$this->getid3->info;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   241
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   242
		$info['flac']['STREAMINFO'] = self::parseSTREAMINFOdata($BlockData);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   243
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   244
		if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
			$info['audio']['bitrate_mode']    = 'vbr';
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   247
			$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   248
			$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   249
			$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   250
			$info['playtime_seconds']         = $info['flac']['STREAMINFO']['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
			if ($info['playtime_seconds'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
				if (!$this->isDependencyFor('matroska')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
					$info['audio']['bitrate'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
				else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
					$this->warning('Cannot determine audio bitrate because total stream size is unknown');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			return $this->error('Corrupt METAdata block: STREAMINFO');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   267
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   268
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   269
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   270
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   271
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
	private function parseAPPLICATION($BlockData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		$ApplicationID = getid3_lib::BigEndian2Int(substr($BlockData, 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
		$info['flac']['APPLICATION'][$ApplicationID]['name'] = self::applicationIDLookup($ApplicationID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		$info['flac']['APPLICATION'][$ApplicationID]['data'] = substr($BlockData, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   282
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   283
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   284
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   285
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   286
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
	private function parseSEEKTABLE($BlockData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
		$BlockLength = strlen($BlockData);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		$placeholderpattern = str_repeat("\xFF", 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
		while ($offset < $BlockLength) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
			$SampleNumberString = substr($BlockData, $offset, 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
			$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
			if ($SampleNumberString == $placeholderpattern) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
				// placeholder point
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
				getid3_lib::safe_inc($info['flac']['SEEKTABLE']['placeholders'], 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
				$offset += 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
				$SampleNumber                                        = getid3_lib::BigEndian2Int($SampleNumberString);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				$info['flac']['SEEKTABLE'][$SampleNumber]['offset']  = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
				$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
				$info['flac']['SEEKTABLE'][$SampleNumber]['samples'] = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
				$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   316
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   317
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   318
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   319
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   320
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
	private function parseVORBIS_COMMENT($BlockData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
		$getid3_ogg = new getid3_ogg($this->getid3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
		if ($this->isDependencyFor('matroska')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
			$getid3_ogg->setStringMode($this->data_string);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
		$getid3_ogg->ParseVorbisComments();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
		if (isset($info['ogg'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
			unset($info['ogg']['comments_raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			$info['flac']['VORBIS_COMMENT'] = $info['ogg'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			unset($info['ogg']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
		unset($getid3_ogg);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   340
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   341
	 * @param string $BlockData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   342
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   343
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   344
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
	private function parseCUESHEET($BlockData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
		$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
		$info['flac']['CUESHEET']['media_catalog_number'] =                              trim(substr($BlockData, $offset, 128), "\0");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
		$offset += 128;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
		$info['flac']['CUESHEET']['lead_in_samples']      =         getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		$info['flac']['CUESHEET']['flags']['is_cd']       = (bool) (getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1)) & 0x80);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
		$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		$offset += 258; // reserved
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
		$info['flac']['CUESHEET']['number_tracks']        =         getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
		$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
		for ($track = 0; $track < $info['flac']['CUESHEET']['number_tracks']; $track++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
			$TrackSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
			$TrackNumber       = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
			$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['sample_offset']         = $TrackSampleOffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['isrc']                  =                           substr($BlockData, $offset, 12);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
			$offset += 12;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
			$TrackFlagsRaw                                                             = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['is_audio']     = (bool) ($TrackFlagsRaw & 0x80);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['flags']['pre_emphasis'] = (bool) ($TrackFlagsRaw & 0x40);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			$offset += 13; // reserved
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
			$info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']          = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			for ($index = 0; $index < $info['flac']['CUESHEET']['tracks'][$TrackNumber]['index_points']; $index++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
				$IndexSampleOffset = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
				$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				$IndexNumber       = getid3_lib::BigEndian2Int(substr($BlockData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
				$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
				$offset += 3; // reserved
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
				$info['flac']['CUESHEET']['tracks'][$TrackNumber]['indexes'][$IndexNumber] = $IndexSampleOffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
	/**
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   397
	 * Parse METADATA_BLOCK_PICTURE flac structure and extract attachment
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   398
	 * External usage: audio.ogg
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   399
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   400
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   401
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
	public function parsePICTURE() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
		$picture['typeid']         = getid3_lib::BigEndian2Int($this->fread(4));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   406
		$picture['picturetype']    = self::pictureTypeLookup($picture['typeid']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
		$picture['image_mime']     = $this->fread(getid3_lib::BigEndian2Int($this->fread(4)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
		$descr_length              = getid3_lib::BigEndian2Int($this->fread(4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
		if ($descr_length) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			$picture['description'] = $this->fread($descr_length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
		}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   412
		$picture['image_width']    = getid3_lib::BigEndian2Int($this->fread(4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   413
		$picture['image_height']   = getid3_lib::BigEndian2Int($this->fread(4));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
		$picture['color_depth']    = getid3_lib::BigEndian2Int($this->fread(4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		$picture['colors_indexed'] = getid3_lib::BigEndian2Int($this->fread(4));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   416
		$picture['datalength']     = getid3_lib::BigEndian2Int($this->fread(4));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		if ($picture['image_mime'] == '-->') {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   419
			$picture['data'] = $this->fread($picture['datalength']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
			$picture['data'] = $this->saveAttachment(
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   422
				str_replace('/', '_', $picture['picturetype']).'_'.$this->ftell(),
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
				$this->ftell(),
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   424
				$picture['datalength'],
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				$picture['image_mime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
		$info['flac']['PICTURE'][] = $picture;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   433
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   434
	 * @param int $blocktype
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   435
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   436
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   437
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
	public static function metaBlockTypeLookup($blocktype) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
		static $lookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			0 => 'STREAMINFO',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
			1 => 'PADDING',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			2 => 'APPLICATION',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
			3 => 'SEEKTABLE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
			4 => 'VORBIS_COMMENT',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
			5 => 'CUESHEET',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
			6 => 'PICTURE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
		return (isset($lookup[$blocktype]) ? $lookup[$blocktype] : 'reserved');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   451
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   452
	 * @param int $applicationid
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   453
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   454
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   455
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
	public static function applicationIDLookup($applicationid) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
		// http://flac.sourceforge.net/id.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
		static $lookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			0x41544348 => 'FlacFile',                                                                           // "ATCH"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
			0x42534F4C => 'beSolo',                                                                             // "BSOL"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
			0x42554753 => 'Bugs Player',                                                                        // "BUGS"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
			0x43756573 => 'GoldWave cue points (specification)',                                                // "Cues"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
			0x46696361 => 'CUE Splitter',                                                                       // "Fica"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
			0x46746F6C => 'flac-tools',                                                                         // "Ftol"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			0x4D4F5442 => 'MOTB MetaCzar',                                                                      // "MOTB"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
			0x4D505345 => 'MP3 Stream Editor',                                                                  // "MPSE"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
			0x4D754D4C => 'MusicML: Music Metadata Language',                                                   // "MuML"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
			0x52494646 => 'Sound Devices RIFF chunk storage',                                                   // "RIFF"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			0x5346464C => 'Sound Font FLAC',                                                                    // "SFFL"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			0x534F4E59 => 'Sony Creative Software',                                                             // "SONY"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
			0x5351455A => 'flacsqueeze',                                                                        // "SQEZ"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			0x54745776 => 'TwistedWave',                                                                        // "TtWv"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
			0x55495453 => 'UITS Embedding tools',                                                               // "UITS"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
			0x61696666 => 'FLAC AIFF chunk storage',                                                            // "aiff"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
			0x696D6167 => 'flac-image application for storing arbitrary files in APPLICATION metadata blocks',  // "imag"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			0x7065656D => 'Parseable Embedded Extensible Metadata (specification)',                             // "peem"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
			0x71667374 => 'QFLAC Studio',                                                                       // "qfst"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
			0x72696666 => 'FLAC RIFF chunk storage',                                                            // "riff"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
			0x74756E65 => 'TagTuner',                                                                           // "tune"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			0x78626174 => 'XBAT',                                                                               // "xbat"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
			0x786D6364 => 'xmcd',                                                                               // "xmcd"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
		return (isset($lookup[$applicationid]) ? $lookup[$applicationid] : 'reserved');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   486
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   487
	 * @param int $type_id
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   488
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   489
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   490
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
	public static function pictureTypeLookup($type_id) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
		static $lookup = array (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
			 0 => 'Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
			 1 => '32x32 pixels \'file icon\' (PNG only)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
			 2 => 'Other file icon',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			 3 => 'Cover (front)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			 4 => 'Cover (back)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
			 5 => 'Leaflet page',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
			 6 => 'Media (e.g. label side of CD)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
			 7 => 'Lead artist/lead performer/soloist',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			 8 => 'Artist/performer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			 9 => 'Conductor',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			10 => 'Band/Orchestra',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
			11 => 'Composer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
			12 => 'Lyricist/text writer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			13 => 'Recording Location',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
			14 => 'During recording',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			15 => 'During performance',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			16 => 'Movie/video screen capture',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			17 => 'A bright coloured fish',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			18 => 'Illustration',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
			19 => 'Band/artist logotype',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
			20 => 'Publisher/Studio logotype',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
		return (isset($lookup[$type_id]) ? $lookup[$type_id] : 'reserved');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   518
}