wp/wp-includes/ID3/module.tag.id3v2.php
author ymh <ymh.work@gmail.com>
Mon, 08 Sep 2025 19:44:41 +0200
changeset 23 417f20492bf7
parent 21 48c4eec2b7e6
permissions -rw-r--r--
Update Docker configuration and plugin versions - Upgrade MariaDB from 10.6 to 11 with auto-upgrade support - Add WordPress debug environment variable to FPM container - Update PHP-FPM Dockerfile base image - Update Include Mastodon Feed plugin with bug fixes and improvements - Update Portfolio plugin (v2.58) with latest translations and demo data enhancements - Remove old README.md from Mastodon Feed plugin 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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.tag.id3v2.php                                        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
// module for analyzing ID3v2 tags                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
// dependencies: module.tag.id3v1.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.tag.id3v1.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
class getid3_id3v2 extends getid3_handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	public $StartingOffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    26
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    27
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    28
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
	public function Analyze() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
		//    Overall tag structure:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		//        |      Header (10 bytes)      |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		//        |       Extended Header       |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		//        | (variable length, OPTIONAL) |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		//        |   Frames (variable length)  |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		//        |           Padding           |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		//        | (variable length, OPTIONAL) |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		//        | Footer (10 bytes, OPTIONAL) |
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		//        +-----------------------------+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		//    Header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		//        ID3v2/file identifier      "ID3"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		//        ID3v2 version              $04 00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		//        ID3v2 flags                (%ab000000 in v2.2, %abc00000 in v2.3, %abcd0000 in v2.4.x)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		//        ID3v2 size             4 * %0xxxxxxx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		// shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		$info['id3v2']['header'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		$thisfile_id3v2                  = &$info['id3v2'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		$thisfile_id3v2['flags']         =  array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		$thisfile_id3v2_flags            = &$thisfile_id3v2['flags'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    61
		$this->fseek($this->StartingOffset);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    62
		$header = $this->fread(10);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		if (substr($header, 0, 3) == 'ID3'  &&  strlen($header) == 10) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    65
			$thisfile_id3v2['majorversion'] = ord($header[3]);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    66
			$thisfile_id3v2['minorversion'] = ord($header[4]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
			// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
			$id3v2_majorversion = &$thisfile_id3v2['majorversion'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			unset($info['id3v2']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
			return false;
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		if ($id3v2_majorversion > 4) { // this script probably won't correctly parse ID3v2.5.x and above (if it ever exists)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    80
			$this->error('this script only parses up to ID3v2.4.x - this tag is ID3v2.'.$id3v2_majorversion.'.'.$thisfile_id3v2['minorversion']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    85
		$id3_flags = ord($header[5]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		switch ($id3v2_majorversion) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				// %ab000000 in v2.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				$thisfile_id3v2_flags['compression'] = (bool) ($id3_flags & 0x40); // b - Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				// %abc00000 in v2.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				$thisfile_id3v2_flags['exthead']     = (bool) ($id3_flags & 0x40); // b - Extended header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
				$thisfile_id3v2_flags['experim']     = (bool) ($id3_flags & 0x20); // c - Experimental indicator
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 4:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				// %abcd0000 in v2.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				$thisfile_id3v2_flags['unsynch']     = (bool) ($id3_flags & 0x80); // a - Unsynchronisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				$thisfile_id3v2_flags['exthead']     = (bool) ($id3_flags & 0x40); // b - Extended header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				$thisfile_id3v2_flags['experim']     = (bool) ($id3_flags & 0x20); // c - Experimental indicator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
				$thisfile_id3v2_flags['isfooter']    = (bool) ($id3_flags & 0x10); // d - Footer present
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
		$thisfile_id3v2['headerlength'] = getid3_lib::BigEndian2Int(substr($header, 6, 4), 1) + 10; // length of ID3v2 tag in 10-byte header doesn't include 10-byte header length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		$thisfile_id3v2['tag_offset_start'] = $this->StartingOffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		$thisfile_id3v2['tag_offset_end']   = $thisfile_id3v2['tag_offset_start'] + $thisfile_id3v2['headerlength'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		// create 'encoding' key - used by getid3::HandleAllTags()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		// in ID3v2 every field can have it's own encoding type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		// so force everything to UTF-8 so it can be handled consistantly
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		$thisfile_id3v2['encoding'] = 'UTF-8';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
	//    Frames
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
	//        All ID3v2 frames consists of one frame header followed by one or more
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
	//        fields containing the actual information. The header is always 10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
	//        bytes and laid out as follows:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
	//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	//        Frame ID      $xx xx xx xx  (four characters)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
	//        Size      4 * %0xxxxxxx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	//        Flags         $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		$sizeofframes = $thisfile_id3v2['headerlength'] - 10; // not including 10-byte initial header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
		if (!empty($thisfile_id3v2['exthead']['length'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			$sizeofframes -= ($thisfile_id3v2['exthead']['length'] + 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		if (!empty($thisfile_id3v2_flags['isfooter'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			$sizeofframes -= 10; // footer takes last 10 bytes of ID3v2 header, after frame data, before audio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		if ($sizeofframes > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   141
			$framedata = $this->fread($sizeofframes); // read all frames from file into $framedata variable
0
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 entire frame data is unsynched, de-unsynch it now (ID3v2.3.x)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			if (!empty($thisfile_id3v2_flags['unsynch']) && ($id3v2_majorversion <= 3)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
				$framedata = $this->DeUnsynchronise($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			//        [in ID3v2.4.0] Unsynchronisation [S:6.1] is done on frame level, instead
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			//        of on tag level, making it easier to skip frames, increasing the streamability
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			//        of the tag. The unsynchronisation flag in the header [S:3.1] indicates that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			//        there exists an unsynchronised frame, while the new unsynchronisation flag in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			//        the frame header [S:4.1.2] indicates unsynchronisation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
			//$framedataoffset = 10 + ($thisfile_id3v2['exthead']['length'] ? $thisfile_id3v2['exthead']['length'] + 4 : 0); // how many bytes into the stream - start from after the 10-byte header (and extended header length+4, if present)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			$framedataoffset = 10; // how many bytes into the stream - start from after the 10-byte header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			//    Extended Header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			if (!empty($thisfile_id3v2_flags['exthead'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
				$extended_header_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
				if ($id3v2_majorversion == 3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
					// v2.3 definition:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
					//Extended header size  $xx xx xx xx   // 32-bit integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
					//Extended Flags        $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
					//     %x0000000 %00000000 // v2.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
					//     x - CRC data present
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
					//Size of padding       $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
					$thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
					$extended_header_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					$thisfile_id3v2['exthead']['flag_bytes'] = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
					$thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
					$extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
					$thisfile_id3v2['exthead']['flags']['crc'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x8000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
					$thisfile_id3v2['exthead']['padding_size'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
					$extended_header_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
					if ($thisfile_id3v2['exthead']['flags']['crc']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
						$thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
						$extended_header_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
					$extended_header_offset += $thisfile_id3v2['exthead']['padding_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
				} elseif ($id3v2_majorversion == 4) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
					// v2.4 definition:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
					//Extended header size   4 * %0xxxxxxx // 28-bit synchsafe integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
					//Number of flag bytes       $01
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
					//Extended Flags             $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					//     %0bcd0000 // v2.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					//     b - Tag is an update
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
					//         Flag data length       $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					//     c - CRC data present
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
					//         Flag data length       $05
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
					//         Total frame CRC    5 * %0xxxxxxx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					//     d - Tag restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
					//         Flag data length       $01
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
					$thisfile_id3v2['exthead']['length'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 4), true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
					$extended_header_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
					$thisfile_id3v2['exthead']['flag_bytes'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should always be 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
					$extended_header_offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
					$thisfile_id3v2['exthead']['flag_raw'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $thisfile_id3v2['exthead']['flag_bytes']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
					$extended_header_offset += $thisfile_id3v2['exthead']['flag_bytes'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
					$thisfile_id3v2['exthead']['flags']['update']       = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x40);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
					$thisfile_id3v2['exthead']['flags']['crc']          = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x20);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
					$thisfile_id3v2['exthead']['flags']['restrictions'] = (bool) ($thisfile_id3v2['exthead']['flag_raw'] & 0x10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
					if ($thisfile_id3v2['exthead']['flags']['update']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
						$extended_header_offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
					if ($thisfile_id3v2['exthead']['flags']['crc']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
						$extended_header_offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
						$thisfile_id3v2['exthead']['flag_data']['crc'] = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, $ext_header_chunk_length), true, false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
						$extended_header_offset += $ext_header_chunk_length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
					if ($thisfile_id3v2['exthead']['flags']['restrictions']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
						$ext_header_chunk_length = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1)); // should be 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
						$extended_header_offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
						// %ppqrrstt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
						$restrictions_raw = getid3_lib::BigEndian2Int(substr($framedata, $extended_header_offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
						$extended_header_offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
						$thisfile_id3v2['exthead']['flags']['restrictions']['tagsize']  = ($restrictions_raw & 0xC0) >> 6; // p - Tag size restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
						$thisfile_id3v2['exthead']['flags']['restrictions']['textenc']  = ($restrictions_raw & 0x20) >> 5; // q - Text encoding restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
						$thisfile_id3v2['exthead']['flags']['restrictions']['textsize'] = ($restrictions_raw & 0x18) >> 3; // r - Text fields size restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
						$thisfile_id3v2['exthead']['flags']['restrictions']['imgenc']   = ($restrictions_raw & 0x04) >> 2; // s - Image encoding restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
						$thisfile_id3v2['exthead']['flags']['restrictions']['imgsize']  = ($restrictions_raw & 0x03) >> 0; // t - Image size restrictions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['tagsize']  = $this->LookupExtendedHeaderRestrictionsTagSizeLimits($thisfile_id3v2['exthead']['flags']['restrictions']['tagsize']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['textenc']  = $this->LookupExtendedHeaderRestrictionsTextEncodings($thisfile_id3v2['exthead']['flags']['restrictions']['textenc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['textsize'] = $this->LookupExtendedHeaderRestrictionsTextFieldSize($thisfile_id3v2['exthead']['flags']['restrictions']['textsize']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['imgenc']   = $this->LookupExtendedHeaderRestrictionsImageEncoding($thisfile_id3v2['exthead']['flags']['restrictions']['imgenc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
						$thisfile_id3v2['exthead']['flags']['restrictions_text']['imgsize']  = $this->LookupExtendedHeaderRestrictionsImageSizeSize($thisfile_id3v2['exthead']['flags']['restrictions']['imgsize']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
					if ($thisfile_id3v2['exthead']['length'] != $extended_header_offset) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   250
						$this->warning('ID3v2.4 extended header length mismatch (expecting '.intval($thisfile_id3v2['exthead']['length']).', found '.intval($extended_header_offset).')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
				$framedataoffset += $extended_header_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
				$framedata = substr($framedata, $extended_header_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
			} // end extended header
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
			while (isset($framedata) && (strlen($framedata) > 0)) { // cycle through until no more frame data is left to parse
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
				if (strlen($framedata) <= $this->ID3v2HeaderLength($id3v2_majorversion)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
					// insufficient room left in ID3v2 header for actual data - must be padding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
					$thisfile_id3v2['padding']['start']  = $framedataoffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
					$thisfile_id3v2['padding']['length'] = strlen($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
					$thisfile_id3v2['padding']['valid']  = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					for ($i = 0; $i < $thisfile_id3v2['padding']['length']; $i++) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   266
						if ($framedata[$i] != "\x00") {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
							$thisfile_id3v2['padding']['valid'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
							$thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   269
							$this->warning('Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					break; // skip rest of ID3v2 header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
				}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   275
				$frame_header = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   276
				$frame_name   = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   277
				$frame_size   = null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   278
				$frame_flags  = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				if ($id3v2_majorversion == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
					// Frame ID  $xx xx xx (three characters)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					// Size      $xx xx xx (24-bit integer)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					// Flags     $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
					$frame_header = substr($framedata, 0, 6); // take next 6 bytes for header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
					$framedata    = substr($framedata, 6);    // and leave the rest in $framedata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
					$frame_name   = substr($frame_header, 0, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
					$frame_size   = getid3_lib::BigEndian2Int(substr($frame_header, 3, 3), 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
					$frame_flags  = 0; // not used for anything in ID3v2.2, just set to avoid E_NOTICEs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
				} elseif ($id3v2_majorversion > 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
					// Frame ID  $xx xx xx xx (four characters)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
					// Size      $xx xx xx xx (32-bit integer in v2.3, 28-bit synchsafe in v2.4+)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					// Flags     $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
					$frame_header = substr($framedata, 0, 10); // take next 10 bytes for header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
					$framedata    = substr($framedata, 10);    // and leave the rest in $framedata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					$frame_name = substr($frame_header, 0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					if ($id3v2_majorversion == 3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
						$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					} else { // ID3v2.4+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
						$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 1); // 32-bit synchsafe integer (28-bit value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					if ($frame_size < (strlen($framedata) + 4)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
						$nextFrameID = substr($framedata, $frame_size, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
						if ($this->IsValidID3v2FrameName($nextFrameID, $id3v2_majorversion)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
							// next frame is OK
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
						} elseif (($frame_name == "\x00".'MP3') || ($frame_name == "\x00\x00".'MP') || ($frame_name == ' MP3') || ($frame_name == 'MP3e')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
							// MP3ext known broken frames - "ok" for the purposes of this test
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
						} elseif (($id3v2_majorversion == 4) && ($this->IsValidID3v2FrameName(substr($framedata, getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0), 4), 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   313
							$this->warning('ID3v2 tag written as ID3v2.4, but with non-synchsafe integers (ID3v2.3 style). Older versions of (Helium2; iTunes) are known culprits of this. Tag has been parsed as ID3v2.3');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
							$id3v2_majorversion = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
							$frame_size = getid3_lib::BigEndian2Int(substr($frame_header, 4, 4), 0); // 32-bit integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
					$frame_flags = getid3_lib::BigEndian2Int(substr($frame_header, 8, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
				if ((($id3v2_majorversion == 2) && ($frame_name == "\x00\x00\x00")) || ($frame_name == "\x00\x00\x00\x00")) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
					// padding encountered
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
					$thisfile_id3v2['padding']['start']  = $framedataoffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
					$thisfile_id3v2['padding']['length'] = strlen($frame_header) + strlen($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
					$thisfile_id3v2['padding']['valid']  = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
					$len = strlen($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
					for ($i = 0; $i < $len; $i++) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   332
						if ($framedata[$i] != "\x00") {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
							$thisfile_id3v2['padding']['valid'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
							$thisfile_id3v2['padding']['errorpos'] = $thisfile_id3v2['padding']['start'] + $i;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   335
							$this->warning('Invalid ID3v2 padding found at offset '.$thisfile_id3v2['padding']['errorpos'].' (the remaining '.($thisfile_id3v2['padding']['length'] - $i).' bytes are considered invalid)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
					break; // skip rest of ID3v2 header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   342
				if ($iTunesBrokenFrameNameFixed = self::ID3v22iTunesBrokenFrameName($frame_name)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   343
					$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by iTunes (versions "X v2.0.3", "v3.0.1", "v7.0.0.70" are known-guilty, probably others too)]. Translated frame name from "'.str_replace("\x00", ' ', $frame_name).'" to "'.$iTunesBrokenFrameNameFixed.'" for parsing.');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   344
					$frame_name = $iTunesBrokenFrameNameFixed;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
				if (($frame_size <= strlen($framedata)) && ($this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   348
					$parsedFrame                    = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
					$parsedFrame['frame_name']      = $frame_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
					$parsedFrame['frame_flags_raw'] = $frame_flags;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
					$parsedFrame['data']            = substr($framedata, 0, $frame_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
					$parsedFrame['datalength']      = getid3_lib::CastAsInt($frame_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
					$parsedFrame['dataoffset']      = $framedataoffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
					$this->ParseID3v2Frame($parsedFrame);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
					$thisfile_id3v2[$frame_name][] = $parsedFrame;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
					$framedata = substr($framedata, $frame_size);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
				} else { // invalid frame length or FrameID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
					if ($frame_size <= strlen($framedata)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
						if ($this->IsValidID3v2FrameName(substr($framedata, $frame_size, 4), $id3v2_majorversion)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
							// next frame is valid, just skip the current frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
							$framedata = substr($framedata, $frame_size);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   368
							$this->warning('Next ID3v2 frame is valid, skipping current frame.');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
							// next frame is invalid too, abort processing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
							//unset($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
							$framedata = null;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   375
							$this->error('Next ID3v2 frame is also invalid, aborting processing.');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
					} elseif ($frame_size == strlen($framedata)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
						// this is the last frame, just skip
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   382
						$this->warning('This was the last ID3v2 frame.');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
						// next frame is invalid too, abort processing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
						//unset($framedata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
						$framedata = null;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   389
						$this->warning('Invalid ID3v2 frame size, aborting.');
0
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
					if (!$this->IsValidID3v2FrameName($frame_name, $id3v2_majorversion)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
						switch ($frame_name) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
							case "\x00\x00".'MP':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
							case "\x00".'MP3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
							case ' MP3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
							case 'MP3e':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
							case "\x00".'MP':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
							case ' MP':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
							case 'MP3':
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   402
								$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))). [Note: this particular error has been known to happen with tags edited by "MP3ext (www.mutschler.de/mp3ext/)"]');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
							default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   406
								$this->warning('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: !IsValidID3v2FrameName("'.str_replace("\x00", ' ', $frame_name).'", '.$id3v2_majorversion.'))).');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
					} elseif (!isset($framedata) || ($frame_size > strlen($framedata))) {
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
						$this->error('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag). (ERROR: $frame_size ('.$frame_size.') > strlen($framedata) ('.(isset($framedata) ? strlen($framedata) : 'null').')).');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   416
						$this->error('error parsing "'.$frame_name.'" ('.$framedataoffset.' bytes into the ID3v2.'.$id3v2_majorversion.' tag).');
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
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
				$framedataoffset += ($frame_size + $this->ID3v2HeaderLength($id3v2_majorversion));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
		}
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
	//    Footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
	//    The footer is a copy of the header, but with a different identifier.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
	//        ID3v2 identifier           "3DI"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
	//        ID3v2 version              $04 00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
	//        ID3v2 flags                %abcd0000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
	//        ID3v2 size             4 * %0xxxxxxx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
		if (isset($thisfile_id3v2_flags['isfooter']) && $thisfile_id3v2_flags['isfooter']) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   437
			$footer = $this->fread(10);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
			if (substr($footer, 0, 3) == '3DI') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				$thisfile_id3v2['footer'] = true;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   440
				$thisfile_id3v2['majorversion_footer'] = ord($footer[3]);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   441
				$thisfile_id3v2['minorversion_footer'] = ord($footer[4]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
			if ($thisfile_id3v2['majorversion_footer'] <= 4) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   444
				$id3_flags = ord($footer[5]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
				$thisfile_id3v2_flags['unsynch_footer']  = (bool) ($id3_flags & 0x80);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
				$thisfile_id3v2_flags['extfoot_footer']  = (bool) ($id3_flags & 0x40);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
				$thisfile_id3v2_flags['experim_footer']  = (bool) ($id3_flags & 0x20);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
				$thisfile_id3v2_flags['isfooter_footer'] = (bool) ($id3_flags & 0x10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
				$thisfile_id3v2['footerlength'] = getid3_lib::BigEndian2Int(substr($footer, 6, 4), 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
		} // end footer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
		if (isset($thisfile_id3v2['comments']['genre'])) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   455
			$genres = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			foreach ($thisfile_id3v2['comments']['genre'] as $key => $value) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   457
				foreach ($this->ParseID3v2GenreString($value) as $genre) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   458
					$genres[] = $genre;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   459
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   461
			$thisfile_id3v2['comments']['genre'] = array_unique($genres);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   462
			unset($key, $value, $genres, $genre);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   465
		if (isset($thisfile_id3v2['comments']['track_number'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   466
			foreach ($thisfile_id3v2['comments']['track_number'] as $key => $value) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
				if (strstr($value, '/')) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   468
					list($thisfile_id3v2['comments']['track_number'][$key], $thisfile_id3v2['comments']['totaltracks'][$key]) = explode('/', $thisfile_id3v2['comments']['track_number'][$key]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
		if (!isset($thisfile_id3v2['comments']['year']) && !empty($thisfile_id3v2['comments']['recording_time'][0]) && preg_match('#^([0-9]{4})#', trim($thisfile_id3v2['comments']['recording_time'][0]), $matches)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
			$thisfile_id3v2['comments']['year'] = array($matches[1]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
		if (!empty($thisfile_id3v2['TXXX'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
			// MediaMonkey does this, maybe others: write a blank RGAD frame, but put replay-gain adjustment values in TXXX frames
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			foreach ($thisfile_id3v2['TXXX'] as $txxx_array) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
				switch ($txxx_array['description']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
					case 'replaygain_track_gain':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
						if (empty($info['replay_gain']['track']['adjustment']) && !empty($txxx_array['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
							$info['replay_gain']['track']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data'])));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
					case 'replaygain_track_peak':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
						if (empty($info['replay_gain']['track']['peak']) && !empty($txxx_array['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
							$info['replay_gain']['track']['peak'] = floatval($txxx_array['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
					case 'replaygain_album_gain':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
						if (empty($info['replay_gain']['album']['adjustment']) && !empty($txxx_array['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
							$info['replay_gain']['album']['adjustment'] = floatval(trim(str_replace('dB', '', $txxx_array['data'])));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		// Set avdataoffset
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
		$info['avdataoffset'] = $thisfile_id3v2['headerlength'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		if (isset($thisfile_id3v2['footer'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
			$info['avdataoffset'] += 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   511
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   512
	 * @param string $genrestring
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   513
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   514
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   515
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
	public function ParseID3v2GenreString($genrestring) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
		// Parse genres into arrays of genreName and genreID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
		// ID3v2.2.x, ID3v2.3.x: '(21)' or '(4)Eurodisco' or '(51)(39)' or '(55)((I think...)'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
		// ID3v2.4.x: '21' $00 'Eurodisco' $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
		$clean_genres = array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   521
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   522
		// hack-fixes for some badly-written ID3v2.3 taggers, while trying not to break correctly-written tags
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   523
		if (($this->getid3->info['id3v2']['majorversion'] == 3) && !preg_match('#[\x00]#', $genrestring)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   524
			// note: MusicBrainz Picard incorrectly stores plaintext genres separated by "/" when writing in ID3v2.3 mode, hack-fix here:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   525
			// replace / with NULL, then replace back the two ID3v1 genres that legitimately have "/" as part of the single genre name
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   526
			if (strpos($genrestring, '/') !== false) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   527
				$LegitimateSlashedGenreList = array(  // https://github.com/JamesHeinrich/getID3/issues/223
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   528
					'Pop/Funk',    // ID3v1 genre #62 - https://en.wikipedia.org/wiki/ID3#standard
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   529
					'Cut-up/DJ',   // Discogs - https://www.discogs.com/style/cut-up/dj
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   530
					'RnB/Swing',   // Discogs - https://www.discogs.com/style/rnb/swing
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   531
					'Funk / Soul', // Discogs (note spaces) - https://www.discogs.com/genre/funk+%2F+soul
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   532
				);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   533
				$genrestring = str_replace('/', "\x00", $genrestring);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   534
				foreach ($LegitimateSlashedGenreList as $SlashedGenre) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   535
					$genrestring = str_ireplace(str_replace('/', "\x00", $SlashedGenre), $SlashedGenre, $genrestring);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   536
				}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   537
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   538
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   539
			// some other taggers separate multiple genres with semicolon, e.g. "Heavy Metal;Thrash Metal;Metal"
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   540
			if (strpos($genrestring, ';') !== false) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   541
				$genrestring = str_replace(';', "\x00", $genrestring);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   542
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   543
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   544
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   545
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		if (strpos($genrestring, "\x00") === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			$genrestring = preg_replace('#\(([0-9]{1,3})\)#', '$1'."\x00", $genrestring);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
		}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   549
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
		$genre_elements = explode("\x00", $genrestring);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		foreach ($genre_elements as $element) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
			$element = trim($element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
			if ($element) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   554
				if (preg_match('#^[0-9]{1,3}$#', $element)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
					$clean_genres[] = getid3_id3v1::LookupGenreName($element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
					$clean_genres[] = str_replace('((', '(', $element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
		return $clean_genres;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   564
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   565
	 * @param array $parsedFrame
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   566
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   567
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   568
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
	public function ParseID3v2Frame(&$parsedFrame) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
		// shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
		$id3v2_majorversion = $info['id3v2']['majorversion'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
		$parsedFrame['framenamelong']  = $this->FrameNameLongLookup($parsedFrame['frame_name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
		if (empty($parsedFrame['framenamelong'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
			unset($parsedFrame['framenamelong']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
		$parsedFrame['framenameshort'] = $this->FrameNameShortLookup($parsedFrame['frame_name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
		if (empty($parsedFrame['framenameshort'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			unset($parsedFrame['framenameshort']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
		if ($id3v2_majorversion >= 3) { // frame flags are not part of the ID3v2.2 standard
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
			if ($id3v2_majorversion == 3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
				//    Frame Header Flags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				//    %abc00000 %ijk00000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
				$parsedFrame['flags']['TagAlterPreservation']  = (bool) ($parsedFrame['frame_flags_raw'] & 0x8000); // a - Tag alter preservation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
				$parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // b - File alter preservation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
				$parsedFrame['flags']['ReadOnly']              = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // c - Read only
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
				$parsedFrame['flags']['compression']           = (bool) ($parsedFrame['frame_flags_raw'] & 0x0080); // i - Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
				$parsedFrame['flags']['Encryption']            = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // j - Encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
				$parsedFrame['flags']['GroupingIdentity']      = (bool) ($parsedFrame['frame_flags_raw'] & 0x0020); // k - Grouping identity
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
			} elseif ($id3v2_majorversion == 4) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
				//    Frame Header Flags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
				//    %0abc0000 %0h00kmnp
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
				$parsedFrame['flags']['TagAlterPreservation']  = (bool) ($parsedFrame['frame_flags_raw'] & 0x4000); // a - Tag alter preservation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
				$parsedFrame['flags']['FileAlterPreservation'] = (bool) ($parsedFrame['frame_flags_raw'] & 0x2000); // b - File alter preservation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
				$parsedFrame['flags']['ReadOnly']              = (bool) ($parsedFrame['frame_flags_raw'] & 0x1000); // c - Read only
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
				$parsedFrame['flags']['GroupingIdentity']      = (bool) ($parsedFrame['frame_flags_raw'] & 0x0040); // h - Grouping identity
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
				$parsedFrame['flags']['compression']           = (bool) ($parsedFrame['frame_flags_raw'] & 0x0008); // k - Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
				$parsedFrame['flags']['Encryption']            = (bool) ($parsedFrame['frame_flags_raw'] & 0x0004); // m - Encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
				$parsedFrame['flags']['Unsynchronisation']     = (bool) ($parsedFrame['frame_flags_raw'] & 0x0002); // n - Unsynchronisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
				$parsedFrame['flags']['DataLengthIndicator']   = (bool) ($parsedFrame['frame_flags_raw'] & 0x0001); // p - Data length indicator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
				// Frame-level de-unsynchronisation - ID3v2.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
				if ($parsedFrame['flags']['Unsynchronisation']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
					$parsedFrame['data'] = $this->DeUnsynchronise($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
				if ($parsedFrame['flags']['DataLengthIndicator']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
					$parsedFrame['data_length_indicator'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4), 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
					$parsedFrame['data']                  =                           substr($parsedFrame['data'], 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
			//    Frame-level de-compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
			if ($parsedFrame['flags']['compression']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
				$parsedFrame['decompressed_size'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
				if (!function_exists('gzuncompress')) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   622
					$this->warning('gzuncompress() support required to decompress ID3v2 frame "'.$parsedFrame['frame_name'].'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
					if ($decompresseddata = @gzuncompress(substr($parsedFrame['data'], 4))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
					//if ($decompresseddata = @gzuncompress($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
						$parsedFrame['data'] = $decompresseddata;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
						unset($decompresseddata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
					} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   629
						$this->warning('gzuncompress() failed on compressed contents of ID3v2 frame "'.$parsedFrame['frame_name'].'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
		if (!empty($parsedFrame['flags']['DataLengthIndicator'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
			if ($parsedFrame['data_length_indicator'] != strlen($parsedFrame['data'])) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   637
				$this->warning('ID3v2 frame "'.$parsedFrame['frame_name'].'" should be '.$parsedFrame['data_length_indicator'].' bytes long according to DataLengthIndicator, but found '.strlen($parsedFrame['data']).' bytes of data');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
		if (isset($parsedFrame['datalength']) && ($parsedFrame['datalength'] == 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
			$warning = 'Frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset'].' has no data portion';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
			switch ($parsedFrame['frame_name']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
				case 'WCOM':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
					$warning .= ' (this is known to happen with files tagged by RioPort)';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   652
			$this->warning($warning);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'UFID')) || // 4.1   UFID Unique file identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
			(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'UFI'))) {  // 4.1   UFI  Unique file identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
			//   There may be more than one 'UFID' frame in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
			//   but only one with the same 'Owner identifier'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
			// <Header for 'Unique file identifier', ID: 'UFID'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
			// Owner identifier        <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
			// Identifier              <up to 64 bytes binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
			$exploded = explode("\x00", $parsedFrame['data'], 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
			$parsedFrame['ownerid'] = (isset($exploded[0]) ? $exploded[0] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
			$parsedFrame['data']    = (isset($exploded[1]) ? $exploded[1] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'TXXX')) || // 4.2.2 TXXX User defined text information frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'TXX'))) {    // 4.2.2 TXX  User defined text information frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
			//   There may be more than one 'TXXX' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
			//   but only one with the same description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
			// <Header for 'User defined text information frame', ID: 'TXXX'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
			// Text encoding     $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
			// Description       <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
			// Value             <text string according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   676
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   678
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   679
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   681
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   682
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   685
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   686
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
			$parsedFrame['encodingid']  = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   690
			$parsedFrame['description'] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['description']));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   691
			$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   692
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $frame_textencoding_terminator);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   694
				$commentkey = ($parsedFrame['description'] ? $parsedFrame['description'] : (isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) ? count($info['id3v2']['comments'][$parsedFrame['framenameshort']]) : 0));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   695
				if (!isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) || !array_key_exists($commentkey, $info['id3v2']['comments'][$parsedFrame['framenameshort']])) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   696
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][$commentkey] = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   697
				} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   698
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][]            = trim(getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   699
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
			//unset($parsedFrame['data']); do not unset, may be needed elsewhere, e.g. for replaygain
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   704
		} elseif ($parsedFrame['frame_name'][0] == 'T') { // 4.2. T??[?] Text information frame
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
			//   There may only be one text information frame of its kind in an tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
			// <Header for 'Text information frame', ID: 'T000' - 'TZZZ',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
			// excluding 'TXXX' described in 4.2.6.>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
			// Text encoding                $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
			// Information                  <text string(s) according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   714
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
			$parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   718
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
			$parsedFrame['encodingid'] = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
				// ID3v2.3 specs say that TPE1 (and others) can contain multiple artist values separated with /
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
				// This of course breaks when an artist name contains slash character, e.g. "AC/DC"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
				// MP3tag (maybe others) implement alternative system where multiple artists are null-separated, which makes more sense
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
				// getID3 will split null-separated artists into multiple artists and leave slash-separated ones to the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
				switch ($parsedFrame['encoding']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
					case 'UTF-16':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
					case 'UTF-16BE':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
					case 'UTF-16LE':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
						$wordsize = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
					case 'ISO-8859-1':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
					case 'UTF-8':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
					default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
						$wordsize = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
				$Txxx_elements = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
				$Txxx_elements_start_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
				for ($i = 0; $i < strlen($parsedFrame['data']); $i += $wordsize) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
					if (substr($parsedFrame['data'], $i, $wordsize) == str_repeat("\x00", $wordsize)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
						$Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
						$Txxx_elements_start_offset = $i + $wordsize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
				$Txxx_elements[] = substr($parsedFrame['data'], $Txxx_elements_start_offset, $i - $Txxx_elements_start_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
				foreach ($Txxx_elements as $Txxx_element) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
					$string = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $Txxx_element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
					if (!empty($string)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
				unset($string, $wordsize, $i, $Txxx_elements, $Txxx_element, $Txxx_elements_start_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'WXXX')) || // 4.3.2 WXXX User defined URL link frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'WXX'))) {    // 4.3.2 WXX  User defined URL link frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
			//   There may be more than one 'WXXX' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
			//   but only one with the same description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
			// <Header for 'User defined URL link frame', ID: 'WXXX'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
			// Text encoding     $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
			// Description       <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
			// URL               <text string>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   768
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   770
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   771
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   773
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   774
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
			$parsedFrame['encodingid']  = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   779
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);           // according to the frame text encoding
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   780
			$parsedFrame['url']         = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator)); // always ISO-8859-1
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   781
			$parsedFrame['description'] = $this->RemoveStringTerminator($parsedFrame['description'], $frame_textencoding_terminator);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   782
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   783
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   785
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback('ISO-8859-1', $info['id3v2']['encoding'], $parsedFrame['url']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   790
		} elseif ($parsedFrame['frame_name'][0] == 'W') { // 4.3. W??? URL link frames
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
			//   There may only be one URL link frame of its kind in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
			//   except when stated otherwise in the frame description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
			// <Header for 'URL link frame', ID: 'W000' - 'WZZZ', excluding 'WXXX'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
			// described in 4.3.2.>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
			// URL              <text string>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   797
			$parsedFrame['url'] = trim($parsedFrame['data']); // always ISO-8859-1
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   799
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback('ISO-8859-1', $info['id3v2']['encoding'], $parsedFrame['url']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'IPLS')) || // 4.4  IPLS Involved people list (ID3v2.3 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'IPL'))) {     // 4.4  IPL  Involved people list (ID3v2.2 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
			// http://id3.org/id3v2.3.0#sec4.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
			//   There may only be one 'IPL' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
			// <Header for 'User defined URL link frame', ID: 'IPL'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
			// Text encoding     $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
			// People list strings    <textstrings>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   815
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
			$parsedFrame['encodingid'] = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($parsedFrame['encodingid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
			$parsedFrame['data_raw']   = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   821
			// https://www.getid3.org/phpBB3/viewtopic.php?t=1369
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
			// "this tag typically contains null terminated strings, which are associated in pairs"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
			// "there are users that use the tag incorrectly"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
			$IPLS_parts = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
			if (strpos($parsedFrame['data_raw'], "\x00") !== false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
				$IPLS_parts_unsorted = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
				if (((strlen($parsedFrame['data_raw']) % 2) == 0) && ((substr($parsedFrame['data_raw'], 0, 2) == "\xFF\xFE") || (substr($parsedFrame['data_raw'], 0, 2) == "\xFE\xFF"))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
					// UTF-16, be careful looking for null bytes since most 2-byte characters may contain one; you need to find twin null bytes, and on even padding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
					$thisILPS  = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
					for ($i = 0; $i < strlen($parsedFrame['data_raw']); $i += 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
						$twobytes = substr($parsedFrame['data_raw'], $i, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
						if ($twobytes === "\x00\x00") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
							$IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
							$thisILPS  = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
							$thisILPS .= $twobytes;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
					if (strlen($thisILPS) > 2) { // 2-byte BOM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
						$IPLS_parts_unsorted[] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $thisILPS);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
					// ISO-8859-1 or UTF-8 or other single-byte-null character set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
					$IPLS_parts_unsorted = explode("\x00", $parsedFrame['data_raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
				if (count($IPLS_parts_unsorted) == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
					// just a list of names, e.g. "Dino Baptiste, Jimmy Copley, John Gordon, Bernie Marsden, Sharon Watson"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
					foreach ($IPLS_parts_unsorted as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
						$IPLS_parts_sorted = preg_split('#[;,\\r\\n\\t]#', $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
						$position = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
						foreach ($IPLS_parts_sorted as $person) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
							$IPLS_parts[] = array('position'=>$position, 'person'=>$person);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
				} elseif ((count($IPLS_parts_unsorted) % 2) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
					$position = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
					$person   = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
					foreach ($IPLS_parts_unsorted as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
						if (($key % 2) == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
							$position = $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
							$person   = $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
							$IPLS_parts[] = array('position'=>$position, 'person'=>$person);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
							$position = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
							$person   = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
					foreach ($IPLS_parts_unsorted as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
						$IPLS_parts[] = array($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
				$IPLS_parts = preg_split('#[;,\\r\\n\\t]#', $parsedFrame['data_raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
			$parsedFrame['data'] = $IPLS_parts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MCDI')) || // 4.4   MCDI Music CD identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MCI'))) {     // 4.5   MCI  Music CD identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
			//   There may only be one 'MCDI' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
			// <Header for 'Music CD identifier', ID: 'MCDI'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
			// CD TOC                <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = $parsedFrame['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ETCO')) || // 4.5   ETCO Event timing codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ETC'))) {     // 4.6   ETC  Event timing codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
			//   There may only be one 'ETCO' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
			// <Header for 'Event timing codes', ID: 'ETCO'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
			// Time stamp format    $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
			//   Where time stamp format is:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
			// $01  (32-bit value) MPEG frames from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
			// $02  (32-bit value) milliseconds from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
			//   Followed by a list of key events in the following format:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
			// Type of event   $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
			// Time stamp      $xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
			//   The 'Time stamp' is set to zero if directly at the beginning of the sound
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
			//   or after the previous event. All events MUST be sorted in chronological order.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
			while ($frame_offset < strlen($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
				$parsedFrame['typeid']    = substr($parsedFrame['data'], $frame_offset++, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
				$parsedFrame['type']      = $this->ETCOEventLookup($parsedFrame['typeid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
				$parsedFrame['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
				$frame_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'MLLT')) || // 4.6   MLLT MPEG location lookup table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'MLL'))) {     // 4.7   MLL MPEG location lookup table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
			//   There may only be one 'MLLT' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
			// <Header for 'Location lookup table', ID: 'MLLT'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
			// MPEG frames between reference  $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
			// Bytes between reference        $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
			// Milliseconds between reference $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
			// Bits for bytes deviation       $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
			// Bits for milliseconds dev.     $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
			//   Then for every reference the following data is included;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
			// Deviation in bytes         %xxx....
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
			// Deviation in milliseconds  %xxx....
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
			$parsedFrame['framesbetweenreferences'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
			$parsedFrame['bytesbetweenreferences']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 2, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
			$parsedFrame['msbetweenreferences']     = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 5, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
			$parsedFrame['bitsforbytesdeviation']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 8, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
			$parsedFrame['bitsformsdeviation']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], 9, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
			$parsedFrame['data'] = substr($parsedFrame['data'], 10);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   941
			$deviationbitstream = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
			while ($frame_offset < strlen($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
				$deviationbitstream .= getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
			$reference_counter = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
			while (strlen($deviationbitstream) > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
				$parsedFrame[$reference_counter]['bytedeviation'] = bindec(substr($deviationbitstream, 0, $parsedFrame['bitsforbytesdeviation']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
				$parsedFrame[$reference_counter]['msdeviation']   = bindec(substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'], $parsedFrame['bitsformsdeviation']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
				$deviationbitstream = substr($deviationbitstream, $parsedFrame['bitsforbytesdeviation'] + $parsedFrame['bitsformsdeviation']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
				$reference_counter++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYTC')) || // 4.7   SYTC Synchronised tempo codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
				  (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'STC'))) {  // 4.8   STC  Synchronised tempo codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
			//   There may only be one 'SYTC' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
			// <Header for 'Synchronised tempo codes', ID: 'SYTC'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
			// Time stamp format   $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
			// Tempo data          <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
			//   Where time stamp format is:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
			// $01  (32-bit value) MPEG frames from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
			// $02  (32-bit value) milliseconds from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
			$timestamp_counter = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
			while ($frame_offset < strlen($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
				$parsedFrame[$timestamp_counter]['tempo'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
				if ($parsedFrame[$timestamp_counter]['tempo'] == 255) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
					$parsedFrame[$timestamp_counter]['tempo'] += ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
				$parsedFrame[$timestamp_counter]['timestamp'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
				$frame_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
				$timestamp_counter++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USLT')) || // 4.8   USLT Unsynchronised lyric/text transcription
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   981
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'ULT'))) {    // 4.9   ULT  Unsynchronised lyric/text transcription
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
			//   There may be more than one 'Unsynchronised lyrics/text transcription' frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
			//   in each tag, but only one with the same language and content descriptor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
			// <Header for 'Unsynchronised lyrics/text transcription', ID: 'USLT'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
			// Text encoding        $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
			// Language             $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
			// Content descriptor   <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
			// Lyrics/text          <full text string according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   992
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   994
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   995
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
			}
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   997
			if (strlen($parsedFrame['data']) >= (4 + strlen($frame_textencoding_terminator))) {  // shouldn't be an issue but badly-written files have been spotted in the wild with not only no contents but also missing the required language field, see https://github.com/JamesHeinrich/getID3/issues/315
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   998
				$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   999
				$frame_offset += 3;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1000
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1001
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1002
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1003
				}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1004
				$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1005
				$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1006
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1007
				$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $frame_textencoding_terminator);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1008
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1009
				$parsedFrame['encodingid']   = $frame_textencoding;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1010
				$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1011
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1012
				$parsedFrame['language']     = $frame_language;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1013
				$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1014
				if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1015
					$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1016
				}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1017
			} else {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1018
				$this->warning('Invalid data in frame "'.$parsedFrame['frame_name'].'" at offset '.$parsedFrame['dataoffset']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'SYLT')) || // 4.9   SYLT Synchronised lyric/text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'SLT'))) {     // 4.10  SLT  Synchronised lyric/text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
			//   There may be more than one 'SYLT' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
			//   but only one with the same language and content descriptor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
			// <Header for 'Synchronised lyrics/text', ID: 'SYLT'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
			// Text encoding        $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
			// Language             $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
			// Time stamp format    $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
			//   $01  (32-bit value) MPEG frames from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
			//   $02  (32-bit value) milliseconds from beginning of file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
			// Content type         $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
			// Content descriptor   <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
			//   Terminated text to be synced (typically a syllable)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
			//   Sync identifier (terminator to above string)   $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
			//   Time stamp                                     $xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1041
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1043
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1044
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
			$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
			$frame_offset += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
			$parsedFrame['contenttypeid']   = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
			$parsedFrame['contenttype']     = $this->SYTLContentTypeLookup($parsedFrame['contenttypeid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
			$parsedFrame['encodingid']      = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
			$parsedFrame['encoding']        = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
			$parsedFrame['language']        = $frame_language;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
			$parsedFrame['languagename']    = $this->LanguageLookup($frame_language, false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
			$timestampindex = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
			$frame_remainingdata = substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
			while (strlen($frame_remainingdata)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
				$frame_offset = 0;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1061
				$frame_terminatorpos = strpos($frame_remainingdata, $frame_textencoding_terminator);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
				if ($frame_terminatorpos === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
					$frame_remainingdata = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
				} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1065
					if (ord(substr($frame_remainingdata, $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
						$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
					$parsedFrame['lyrics'][$timestampindex]['data'] = substr($frame_remainingdata, $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1070
					$frame_remainingdata = substr($frame_remainingdata, $frame_terminatorpos + strlen($frame_textencoding_terminator));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1071
					if (($timestampindex == 0) && (ord($frame_remainingdata[0]) != 0)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
						// timestamp probably omitted for first data item
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
						$parsedFrame['lyrics'][$timestampindex]['timestamp'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
						$frame_remainingdata = substr($frame_remainingdata, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
					$timestampindex++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMM')) || // 4.10  COMM Comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'COM'))) {     // 4.11  COM  Comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
			//   There may be more than one comment frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
			//   but only one with the same language and content descriptor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
			// <Header for 'Comment', ID: 'COMM'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
			// Text encoding          $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
			// Language               $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
			// Short content descrip. <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
			// The actual text        <full text string according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
			if (strlen($parsedFrame['data']) < 5) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1095
				$this->warning('Invalid data (too short) for "'.$parsedFrame['frame_name'].'" frame at offset '.$parsedFrame['dataoffset']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
				$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
				$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1101
				$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
				if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1103
					$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1104
					$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
				$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
				$frame_offset += 3;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1108
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1109
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
				}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1112
				$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1113
				$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1114
				$frame_text = (string) substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1115
				$frame_text = $this->RemoveStringTerminator($frame_text, $frame_textencoding_terminator);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
				$parsedFrame['encodingid']   = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
				$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
				$parsedFrame['language']     = $frame_language;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
				$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
				$parsedFrame['data']         = $frame_text;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
				if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1124
					$commentkey = ($parsedFrame['description'] ? $parsedFrame['description'] : (!empty($info['id3v2']['comments'][$parsedFrame['framenameshort']]) ? count($info['id3v2']['comments'][$parsedFrame['framenameshort']]) : 0));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1125
					if (!isset($info['id3v2']['comments'][$parsedFrame['framenameshort']]) || !array_key_exists($commentkey, $info['id3v2']['comments'][$parsedFrame['framenameshort']])) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1126
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][$commentkey] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1127
					} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1128
						$info['id3v2']['comments'][$parsedFrame['framenameshort']][]            = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1129
					}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'RVA2')) { // 4.11  RVA2 Relative volume adjustment (2) (ID3v2.4+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
			//   There may be more than one 'RVA2' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
			//   but only one with the same identification string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
			// <Header for 'Relative volume adjustment (2)', ID: 'RVA2'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
			// Identification          <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
			//   The 'identification' string is used to identify the situation and/or
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
			//   device where this adjustment should apply. The following is then
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
			//   repeated for every channel:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
			// Type of channel         $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
			// Volume adjustment       $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
			// Bits representing peak  $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
			// Peak volume             $xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
			$frame_idstring = substr($parsedFrame['data'], 0, $frame_terminatorpos);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
			if (ord($frame_idstring) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
				$frame_idstring = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
			$frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00"));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
			$parsedFrame['description'] = $frame_idstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
			$RVA2channelcounter = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
			while (strlen($frame_remainingdata) >= 5) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
				$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
				$frame_channeltypeid = ord(substr($frame_remainingdata, $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
				$parsedFrame[$RVA2channelcounter]['channeltypeid']  = $frame_channeltypeid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
				$parsedFrame[$RVA2channelcounter]['channeltype']    = $this->RVA2ChannelTypeLookup($frame_channeltypeid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
				$parsedFrame[$RVA2channelcounter]['volumeadjust']   = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, 2), false, true); // 16-bit signed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
				$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
				$parsedFrame[$RVA2channelcounter]['bitspeakvolume'] = ord(substr($frame_remainingdata, $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
				if (($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] < 1) || ($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] > 4)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1164
					$this->warning('ID3v2::RVA2 frame['.$RVA2channelcounter.'] contains invalid '.$parsedFrame[$RVA2channelcounter]['bitspeakvolume'].'-byte bits-representing-peak value');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
				$frame_bytespeakvolume = ceil($parsedFrame[$RVA2channelcounter]['bitspeakvolume'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
				$parsedFrame[$RVA2channelcounter]['peakvolume']     = getid3_lib::BigEndian2Int(substr($frame_remainingdata, $frame_offset, $frame_bytespeakvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
				$frame_remainingdata = substr($frame_remainingdata, $frame_offset + $frame_bytespeakvolume);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
				$RVA2channelcounter++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'RVAD')) || // 4.12  RVAD Relative volume adjustment (ID3v2.3 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
				  (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'RVA'))) {  // 4.12  RVA  Relative volume adjustment (ID3v2.2 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
			//   There may only be one 'RVA' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
			// <Header for 'Relative volume adjustment', ID: 'RVA'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
			// ID3v2.2 => Increment/decrement     %000000ba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
			// ID3v2.3 => Increment/decrement     %00fedcba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
			// Bits used for volume descr.        $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
			// Relative volume change, right      $xx xx (xx ...) // a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
			// Relative volume change, left       $xx xx (xx ...) // b
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
			// Peak volume right                  $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
			// Peak volume left                   $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
			//   ID3v2.3 only, optional (not present in ID3v2.2):
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
			// Relative volume change, right back $xx xx (xx ...) // c
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
			// Relative volume change, left back  $xx xx (xx ...) // d
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
			// Peak volume right back             $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
			// Peak volume left back              $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
			//   ID3v2.3 only, optional (not present in ID3v2.2):
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
			// Relative volume change, center     $xx xx (xx ...) // e
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
			// Peak volume center                 $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
			//   ID3v2.3 only, optional (not present in ID3v2.2):
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
			// Relative volume change, bass       $xx xx (xx ...) // f
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
			// Peak volume bass                   $xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
			$frame_incrdecrflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
			$parsedFrame['incdec']['right'] = (bool) substr($frame_incrdecrflags, 6, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
			$parsedFrame['incdec']['left']  = (bool) substr($frame_incrdecrflags, 7, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
			$parsedFrame['bitsvolume'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
			$frame_bytesvolume = ceil($parsedFrame['bitsvolume'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
			$parsedFrame['volumechange']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
			if ($parsedFrame['incdec']['right'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
				$parsedFrame['volumechange']['right'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
			$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
			$parsedFrame['volumechange']['left'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
			if ($parsedFrame['incdec']['left'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
				$parsedFrame['volumechange']['left'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
			$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
			$parsedFrame['peakvolume']['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
			$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
			$parsedFrame['peakvolume']['left']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
			$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
			if ($id3v2_majorversion == 3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
				if (strlen($parsedFrame['data']) > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
					$parsedFrame['incdec']['rightrear'] = (bool) substr($frame_incrdecrflags, 4, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
					$parsedFrame['incdec']['leftrear']  = (bool) substr($frame_incrdecrflags, 5, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
					$parsedFrame['volumechange']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
					if ($parsedFrame['incdec']['rightrear'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
						$parsedFrame['volumechange']['rightrear'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
					$parsedFrame['volumechange']['leftrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
					if ($parsedFrame['incdec']['leftrear'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
						$parsedFrame['volumechange']['leftrear'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
					$parsedFrame['peakvolume']['rightrear'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
					$parsedFrame['peakvolume']['leftrear']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
				if (strlen($parsedFrame['data']) > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
					$parsedFrame['incdec']['center'] = (bool) substr($frame_incrdecrflags, 3, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
					$parsedFrame['volumechange']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
					if ($parsedFrame['incdec']['center'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
						$parsedFrame['volumechange']['center'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
					$parsedFrame['peakvolume']['center'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
				$parsedFrame['data'] = substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
				if (strlen($parsedFrame['data']) > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
					$parsedFrame['incdec']['bass'] = (bool) substr($frame_incrdecrflags, 2, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
					$parsedFrame['volumechange']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
					if ($parsedFrame['incdec']['bass'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
						$parsedFrame['volumechange']['bass'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
					$parsedFrame['peakvolume']['bass'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesvolume));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
					$frame_offset += $frame_bytesvolume;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'EQU2')) { // 4.12  EQU2 Equalisation (2) (ID3v2.4+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
			//   There may be more than one 'EQU2' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
			//   but only one with the same identification string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
			// <Header of 'Equalisation (2)', ID: 'EQU2'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
			// Interpolation method  $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
			//   $00  Band
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
			//   $01  Linear
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
			// Identification        <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
			//   The following is then repeated for every adjustment point
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
			// Frequency          $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
			// Volume adjustment  $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
			$frame_interpolationmethod = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
			$frame_idstring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
			if (ord($frame_idstring) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
				$frame_idstring = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
			$parsedFrame['description'] = $frame_idstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
			$frame_remainingdata = substr($parsedFrame['data'], $frame_terminatorpos + strlen("\x00"));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
			while (strlen($frame_remainingdata)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
				$frame_frequency = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 0, 2)) / 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
				$parsedFrame['data'][$frame_frequency] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, 2), false, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
				$frame_remainingdata = substr($frame_remainingdata, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
			$parsedFrame['interpolationmethod'] = $frame_interpolationmethod;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
		} elseif ((($id3v2_majorversion == 3) && ($parsedFrame['frame_name'] == 'EQUA')) || // 4.12  EQUA Equalisation (ID3v2.3 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'EQU'))) {     // 4.13  EQU  Equalisation (ID3v2.2 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
			//   There may only be one 'EQUA' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
			// <Header for 'Relative volume adjustment', ID: 'EQU'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
			// Adjustment bits    $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
			//   This is followed by 2 bytes + ('adjustment bits' rounded up to the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
			//   nearest byte) for every equalisation band in the following format,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
			//   giving a frequency range of 0 - 32767Hz:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
			// Increment/decrement   %x (MSB of the Frequency)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
			// Frequency             (lower 15 bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
			// Adjustment            $xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
			$parsedFrame['adjustmentbits'] = substr($parsedFrame['data'], $frame_offset++, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
			$frame_adjustmentbytes = ceil($parsedFrame['adjustmentbits'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
			$frame_remainingdata = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
			while (strlen($frame_remainingdata) > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
				$frame_frequencystr = getid3_lib::BigEndian2Bin(substr($frame_remainingdata, 0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
				$frame_incdec    = (bool) substr($frame_frequencystr, 0, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
				$frame_frequency = bindec(substr($frame_frequencystr, 1, 15));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
				$parsedFrame[$frame_frequency]['incdec'] = $frame_incdec;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
				$parsedFrame[$frame_frequency]['adjustment'] = getid3_lib::BigEndian2Int(substr($frame_remainingdata, 2, $frame_adjustmentbytes));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
				if ($parsedFrame[$frame_frequency]['incdec'] === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
					$parsedFrame[$frame_frequency]['adjustment'] *= -1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
				$frame_remainingdata = substr($frame_remainingdata, 2 + $frame_adjustmentbytes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RVRB')) || // 4.13  RVRB Reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'REV'))) {     // 4.14  REV  Reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
			//   There may only be one 'RVRB' frame in each tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
			// <Header for 'Reverb', ID: 'RVRB'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
			// Reverb left (ms)                 $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
			// Reverb right (ms)                $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
			// Reverb bounces, left             $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
			// Reverb bounces, right            $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
			// Reverb feedback, left to left    $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
			// Reverb feedback, left to right   $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
			// Reverb feedback, right to right  $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
			// Reverb feedback, right to left   $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
			// Premix left to right             $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
			// Premix right to left             $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
			$parsedFrame['left']  = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
			$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
			$parsedFrame['right'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
			$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
			$parsedFrame['bouncesL']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
			$parsedFrame['bouncesR']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
			$parsedFrame['feedbackLL']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
			$parsedFrame['feedbackLR']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
			$parsedFrame['feedbackRR']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
			$parsedFrame['feedbackRL']    = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
			$parsedFrame['premixLR']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
			$parsedFrame['premixRL']      = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'APIC')) || // 4.14  APIC Attached picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'PIC'))) {     // 4.15  PIC  Attached picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
			//   There may be several pictures attached to one file,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
			//   each in their individual 'APIC' frame, but only one
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
			//   with the same content descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
			// <Header for 'Attached picture', ID: 'APIC'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
			// Text encoding      $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
			// ID3v2.3+ => MIME type          <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
			// ID3v2.2  => Image format       $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
			// Picture type       $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
			// Description        <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
			// Picture data       <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1371
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1373
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1374
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1377
			$frame_imagetype = null;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1378
			$frame_mimetype = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
			if ($id3v2_majorversion == 2 && strlen($parsedFrame['data']) > $frame_offset) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
				$frame_imagetype = substr($parsedFrame['data'], $frame_offset, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
				if (strtolower($frame_imagetype) == 'ima') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
					// complete hack for mp3Rage (www.chaoticsoftware.com) that puts ID3v2.3-formatted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
					// MIME type instead of 3-char ID3v2.2-format image type  (thanks xbhoffØpacbell*net)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
					$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
					$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
					if (ord($frame_mimetype) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
						$frame_mimetype = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
					$frame_imagetype = strtoupper(str_replace('image/', '', strtolower($frame_mimetype)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
					if ($frame_imagetype == 'JPEG') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
						$frame_imagetype = 'JPG';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
					$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
					$frame_offset += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
			if ($id3v2_majorversion > 2 && strlen($parsedFrame['data']) > $frame_offset) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
				$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
				$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
				if (ord($frame_mimetype) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
					$frame_mimetype = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
				$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
			$frame_picturetype = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
			if ($frame_offset >= $parsedFrame['datalength']) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1410
				$this->warning('data portion of APIC frame is missing at offset '.($parsedFrame['dataoffset'] + 8 + $frame_offset));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
			} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1412
				$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1413
				if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
					$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
				}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1416
				$parsedFrame['description']   = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1417
				$parsedFrame['description']   = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1418
				$parsedFrame['encodingid']    = $frame_textencoding;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1419
				$parsedFrame['encoding']      = $this->TextEncodingNameLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
				if ($id3v2_majorversion == 2) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1422
					$parsedFrame['imagetype'] = isset($frame_imagetype) ? $frame_imagetype : null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
				} else {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1424
					$parsedFrame['mime']      = isset($frame_mimetype) ? $frame_mimetype : null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
				}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1426
				$parsedFrame['picturetypeid'] = $frame_picturetype;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1427
				$parsedFrame['picturetype']   = $this->APICPictureTypeLookup($frame_picturetype);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1428
				$parsedFrame['data']          = substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1429
				$parsedFrame['datalength']    = strlen($parsedFrame['data']);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1430
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1431
				$parsedFrame['image_mime']    = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
				$imageinfo = array();
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1433
				if ($imagechunkcheck = getid3_lib::GetDataImageSize($parsedFrame['data'], $imageinfo)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1434
					if (($imagechunkcheck[2] >= 1) && ($imagechunkcheck[2] <= 3)) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1435
						$parsedFrame['image_mime']       = image_type_to_mime_type($imagechunkcheck[2]);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1436
						if ($imagechunkcheck[0]) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1437
							$parsedFrame['image_width']  = $imagechunkcheck[0];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1438
						}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1439
						if ($imagechunkcheck[1]) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1440
							$parsedFrame['image_height'] = $imagechunkcheck[1];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1441
						}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
				do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
					if ($this->getid3->option_save_attachments === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
						// skip entirely
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
						unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
					}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1451
					$dir = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
					if ($this->getid3->option_save_attachments === true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
						// great
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
					} elseif (is_int($this->getid3->option_save_attachments)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
						if ($this->getid3->option_save_attachments < $parsedFrame['data_length']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
							// too big, skip
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1458
							$this->warning('attachment at '.$frame_offset.' is too large to process inline ('.number_format($parsedFrame['data_length']).' bytes)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
							unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
					} elseif (is_string($this->getid3->option_save_attachments)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
						$dir = rtrim(str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $this->getid3->option_save_attachments), DIRECTORY_SEPARATOR);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1465
						if (!is_dir($dir) || !getID3::is_writable($dir)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
							// cannot write, skip
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1467
							$this->warning('attachment at '.$frame_offset.' cannot be saved to "'.$dir.'" (not writable)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
							unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
					// if we get this far, must be OK
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
					if (is_string($this->getid3->option_save_attachments)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
						$destination_filename = $dir.DIRECTORY_SEPARATOR.md5($info['filenamepath']).'_'.$frame_offset;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1475
						if (!file_exists($destination_filename) || getID3::is_writable($destination_filename)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
							file_put_contents($destination_filename, $parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
						} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1478
							$this->warning('attachment at '.$frame_offset.' cannot be saved to "'.$destination_filename.'" (not writable)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
						$parsedFrame['data_filename'] = $destination_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
						unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
						if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
							if (!isset($info['id3v2']['comments']['picture'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
								$info['id3v2']['comments']['picture'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
							}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1487
							$comments_picture_data = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1488
							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
  1489
								if (isset($parsedFrame[$picture_key])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1490
									$comments_picture_data[$picture_key] = $parsedFrame[$picture_key];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1491
								}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1492
							}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1493
							$info['id3v2']['comments']['picture'][] = $comments_picture_data;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1494
							unset($comments_picture_data);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
					}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1497
				} while (false); // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GEOB')) || // 4.15  GEOB General encapsulated object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'GEO'))) {     // 4.16  GEO  General encapsulated object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
			//   There may be more than one 'GEOB' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
			//   but only one with the same content descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
			// <Header for 'General encapsulated object', ID: 'GEOB'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
			// Text encoding          $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
			// MIME type              <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
			// Filename               <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
			// Content description    <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
			// Encapsulated object    <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1513
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1515
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1516
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
			$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
			if (ord($frame_mimetype) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
				$frame_mimetype = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1525
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1526
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
			$frame_filename = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
			if (ord($frame_filename) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
				$frame_filename = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1533
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1534
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1535
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1536
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1539
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1540
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1541
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
			$parsedFrame['objectdata']  = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
			$parsedFrame['encodingid']  = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
			$parsedFrame['encoding']    = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
			$parsedFrame['mime']        = $frame_mimetype;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
			$parsedFrame['filename']    = $frame_filename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PCNT')) || // 4.16  PCNT Play counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CNT'))) {     // 4.17  CNT  Play counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
			//   There may only be one 'PCNT' frame in each tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
			//   When the counter reaches all one's, one byte is inserted in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
			//   front of the counter thus making the counter eight bits bigger
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
			// <Header for 'Play counter', ID: 'PCNT'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
			// Counter        $xx xx xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
			$parsedFrame['data']          = getid3_lib::BigEndian2Int($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POPM')) || // 4.17  POPM Popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'POP'))) {    // 4.18  POP  Popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
			//   There may be more than one 'POPM' frame in each tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
			//   but only one with the same email address
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
			// <Header for 'Popularimeter', ID: 'POPM'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
			// Email to user   <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
			// Rating          $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
			// Counter         $xx xx xx xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
			$frame_emailaddress = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
			if (ord($frame_emailaddress) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
				$frame_emailaddress = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
			$frame_rating = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
			$parsedFrame['counter'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
			$parsedFrame['email']   = $frame_emailaddress;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
			$parsedFrame['rating']  = $frame_rating;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RBUF')) || // 4.18  RBUF Recommended buffer size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'BUF'))) {     // 4.19  BUF  Recommended buffer size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
			//   There may only be one 'RBUF' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
			// <Header for 'Recommended buffer size', ID: 'RBUF'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
			// Buffer size               $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
			// Embedded info flag        %0000000x
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
			// Offset to next tag        $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
			$parsedFrame['buffersize'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
			$frame_offset += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
			$frame_embeddedinfoflags = getid3_lib::BigEndian2Bin(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
			$parsedFrame['flags']['embededinfo'] = (bool) substr($frame_embeddedinfoflags, 7, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
			$parsedFrame['nexttagoffset'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
		} elseif (($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRM')) { // 4.20  Encrypted meta frame (ID3v2.2 only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
			//   There may be more than one 'CRM' frame in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
			//   but only one with the same 'owner identifier'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
			// <Header for 'Encrypted meta frame', ID: 'CRM'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
			// Owner identifier      <textstring> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
			// Content/explanation   <textstring> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
			// Encrypted datablock   <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1618
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1619
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
			$parsedFrame['ownerid']     = $frame_ownerid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
			$parsedFrame['data']        = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'AENC')) || // 4.19  AENC Audio encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'CRA'))) {     // 4.21  CRA  Audio encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
			//   There may be more than one 'AENC' frames in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
			//   but only one with the same 'Owner identifier'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
			// <Header for 'Audio encryption', ID: 'AENC'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
			// Owner identifier   <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
			// Preview start      $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
			// Preview length     $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
			// Encryption info    <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
			if (ord($frame_ownerid) === 0) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1641
				$frame_ownerid = '';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
			$parsedFrame['ownerid'] = $frame_ownerid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
			$parsedFrame['previewstart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
			$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
			$parsedFrame['previewlength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
			$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
			$parsedFrame['encryptioninfo'] = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
		} elseif ((($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'LINK')) || // 4.20  LINK Linked information
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1654
				(($id3v2_majorversion == 2) && ($parsedFrame['frame_name'] == 'LNK'))) {    // 4.22  LNK  Linked information
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
			//   There may be more than one 'LINK' frame in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
			//   but only one with the same contents
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
			// <Header for 'Linked information', ID: 'LINK'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
			// ID3v2.3+ => Frame identifier   $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
			// ID3v2.2  => Frame identifier   $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
			// URL                            <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
			// ID and additional data         <text string(s)>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
			if ($id3v2_majorversion == 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
				$parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
				$frame_offset += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
				$parsedFrame['frameid'] = substr($parsedFrame['data'], $frame_offset, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
				$frame_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
			$frame_url = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
			if (ord($frame_url) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
				$frame_url = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
			$parsedFrame['url'] = $frame_url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
			$parsedFrame['additionaldata'] = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
			if (!empty($parsedFrame['framenameshort']) && $parsedFrame['url']) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1682
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback_iso88591_utf8($parsedFrame['url']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'POSS')) { // 4.21  POSS Position synchronisation frame (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
			//   There may only be one 'POSS' frame in each tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
			// <Head for 'Position synchronisation', ID: 'POSS'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
			// Time stamp format         $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
			// Position                  $xx (xx ...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
			$parsedFrame['timestampformat'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
			$parsedFrame['position']        = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'USER')) { // 4.22  USER Terms of use (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
			//   There may be more than one 'Terms of use' frame in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
			//   but only one with the same 'Language'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
			// <Header for 'Terms of use frame', ID: 'USER'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			// Text encoding        $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
			// Language             $xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
			// The actual text      <text string according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1710
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
			$frame_language = substr($parsedFrame['data'], $frame_offset, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
			$frame_offset += 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
			$parsedFrame['language']     = $frame_language;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
			$parsedFrame['languagename'] = $this->LanguageLookup($frame_language, false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
			$parsedFrame['encodingid']   = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
			$parsedFrame['encoding']     = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1719
			$parsedFrame['data'] = (string) substr($parsedFrame['data'], $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1720
			$parsedFrame['data'] = $this->RemoveStringTerminator($parsedFrame['data'], $this->TextEncodingTerminatorLookup($frame_textencoding));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
			if (!empty($parsedFrame['framenameshort']) && !empty($parsedFrame['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
				$info['id3v2']['comments'][$parsedFrame['framenameshort']][] = getid3_lib::iconv_fallback($parsedFrame['encoding'], $info['id3v2']['encoding'], $parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'OWNE')) { // 4.23  OWNE Ownership frame (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
			//   There may only be one 'OWNE' frame in a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
			// <Header for 'Ownership frame', ID: 'OWNE'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
			// Text encoding     $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
			// Price paid        <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
			// Date of purch.    <text string>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
			// Seller            <text string according to encoding>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1738
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
			$parsedFrame['encodingid'] = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
			$parsedFrame['encoding']   = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
			$frame_pricepaid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
			$parsedFrame['pricepaid']['currencyid'] = substr($frame_pricepaid, 0, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
			$parsedFrame['pricepaid']['currency']   = $this->LookupCurrencyUnits($parsedFrame['pricepaid']['currencyid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
			$parsedFrame['pricepaid']['value']      = substr($frame_pricepaid, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
			$parsedFrame['purchasedate'] = substr($parsedFrame['data'], $frame_offset, 8);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1752
			if ($this->IsValidDateStampString($parsedFrame['purchasedate'])) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
				$parsedFrame['purchasedateunix'] = mktime (0, 0, 0, substr($parsedFrame['purchasedate'], 4, 2), substr($parsedFrame['purchasedate'], 6, 2), substr($parsedFrame['purchasedate'], 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
			$frame_offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
			$parsedFrame['seller'] = (string) substr($parsedFrame['data'], $frame_offset);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1758
			$parsedFrame['seller'] = $this->RemoveStringTerminator($parsedFrame['seller'], $this->TextEncodingTerminatorLookup($frame_textencoding));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'COMR')) { // 4.24  COMR Commercial frame (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
			//   There may be more than one 'commercial frame' in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
			//   but no two may be identical
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
			// <Header for 'Commercial frame', ID: 'COMR'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
			// Text encoding      $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
			// Price string       <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
			// Valid until        <text string>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
			// Contact URL        <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
			// Received as        $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
			// Name of seller     <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
			// Description        <text string according to encoding> $00 (00)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
			// Picture MIME type  <string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
			// Seller logo        <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
			$frame_textencoding = ord(substr($parsedFrame['data'], $frame_offset++, 1));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1778
			$frame_textencoding_terminator = $this->TextEncodingTerminatorLookup($frame_textencoding);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
			if ((($id3v2_majorversion <= 3) && ($frame_textencoding > 1)) || (($id3v2_majorversion == 4) && ($frame_textencoding > 3))) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1780
				$this->warning('Invalid text encoding byte ('.$frame_textencoding.') in frame "'.$parsedFrame['frame_name'].'" - defaulting to ISO-8859-1 encoding');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1781
				$frame_textencoding_terminator = "\x00";
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
			$frame_pricestring = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
			$frame_rawpricearray = explode('/', $frame_pricestring);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
			foreach ($frame_rawpricearray as $key => $val) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
				$frame_currencyid = substr($val, 0, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
				$parsedFrame['price'][$frame_currencyid]['currency'] = $this->LookupCurrencyUnits($frame_currencyid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
				$parsedFrame['price'][$frame_currencyid]['value']    = substr($val, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
			$frame_datestring = substr($parsedFrame['data'], $frame_offset, 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
			$frame_offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
			$frame_contacturl = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
			$frame_receivedasid = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1803
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1804
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
			$frame_sellername = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
			if (ord($frame_sellername) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
				$frame_sellername = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
			}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1811
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1812
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1813
			$frame_terminatorpos = strpos($parsedFrame['data'], $frame_textencoding_terminator, $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1814
			if (ord(substr($parsedFrame['data'], $frame_terminatorpos + strlen($frame_textencoding_terminator), 1)) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
				$frame_terminatorpos++; // strpos() fooled because 2nd byte of Unicode chars are often 0x00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1817
			$parsedFrame['description'] = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1818
			$parsedFrame['description'] = $this->MakeUTF16emptyStringEmpty($parsedFrame['description']);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1819
			$frame_offset = $frame_terminatorpos + strlen($frame_textencoding_terminator);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
			$frame_mimetype = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
			$frame_sellerlogo = substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
			$parsedFrame['encodingid']        = $frame_textencoding;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
			$parsedFrame['encoding']          = $this->TextEncodingNameLookup($frame_textencoding);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
			$parsedFrame['pricevaliduntil']   = $frame_datestring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
			$parsedFrame['contacturl']        = $frame_contacturl;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
			$parsedFrame['receivedasid']      = $frame_receivedasid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
			$parsedFrame['receivedas']        = $this->COMRReceivedAsLookup($frame_receivedasid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
			$parsedFrame['sellername']        = $frame_sellername;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
			$parsedFrame['mime']              = $frame_mimetype;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
			$parsedFrame['logo']              = $frame_sellerlogo;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'ENCR')) { // 4.25  ENCR Encryption method registration (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
			//   There may be several 'ENCR' frames in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
			//   but only one containing the same symbol
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
			//   and only one containing the same owner identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
			// <Header for 'Encryption method registration', ID: 'ENCR'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
			// Owner identifier    <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
			// Method symbol       $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
			// Encryption data     <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
			if (ord($frame_ownerid) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
				$frame_ownerid = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
			$parsedFrame['ownerid']      = $frame_ownerid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
			$parsedFrame['methodsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
			$parsedFrame['data']         = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'GRID')) { // 4.26  GRID Group identification registration (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
			//   There may be several 'GRID' frames in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
			//   but only one containing the same symbol
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
			//   and only one containing the same owner identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
			// <Header for 'Group ID registration', ID: 'GRID'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
			// Owner identifier      <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
			// Group symbol          $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
			// Group dependent data  <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
			if (ord($frame_ownerid) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
				$frame_ownerid = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
			$parsedFrame['ownerid']       = $frame_ownerid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
			$parsedFrame['groupsymbol']   = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
			$parsedFrame['data']          = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'PRIV')) { // 4.27  PRIV Private frame (ID3v2.3+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
			//   The tag may contain more than one 'PRIV' frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
			//   but only with different contents
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
			// <Header for 'Private frame', ID: 'PRIV'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
			// Owner identifier      <text string> $00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
			// The private data      <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
			$frame_terminatorpos = strpos($parsedFrame['data'], "\x00", $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
			$frame_ownerid = substr($parsedFrame['data'], $frame_offset, $frame_terminatorpos - $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
			if (ord($frame_ownerid) === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
				$frame_ownerid = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
			$frame_offset = $frame_terminatorpos + strlen("\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
			$parsedFrame['ownerid'] = $frame_ownerid;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
			$parsedFrame['data']    = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SIGN')) { // 4.28  SIGN Signature frame (ID3v2.4+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
			//   There may be more than one 'signature frame' in a tag,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
			//   but no two may be identical
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
			// <Header for 'Signature frame', ID: 'SIGN'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
			// Group symbol      $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
			// Signature         <binary data>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
			$parsedFrame['groupsymbol'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
			$parsedFrame['data']        = (string) substr($parsedFrame['data'], $frame_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'SEEK')) { // 4.29  SEEK Seek frame (ID3v2.4+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
			//   There may only be one 'seek frame' in a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
			// <Header for 'Seek frame', ID: 'SEEK'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
			// Minimum offset to next tag       $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
			$parsedFrame['data']          = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
		} elseif (($id3v2_majorversion >= 4) && ($parsedFrame['frame_name'] == 'ASPI')) { // 4.30  ASPI Audio seek point index (ID3v2.4+ only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
			//   There may only be one 'audio seek point index' frame in a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
			// <Header for 'Seek Point Index', ID: 'ASPI'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
			// Indexed data start (S)         $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
			// Indexed data length (L)        $xx xx xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
			// Number of index points (N)     $xx xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
			// Bits per index point (b)       $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
			//   Then for every index point the following data is included:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
			// Fraction at index (Fi)          $xx (xx)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
			$parsedFrame['datastart'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
			$frame_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
			$parsedFrame['indexeddatalength'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
			$frame_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
			$parsedFrame['indexpoints'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
			$frame_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
			$parsedFrame['bitsperpoint'] = ord(substr($parsedFrame['data'], $frame_offset++, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
			$frame_bytesperpoint = ceil($parsedFrame['bitsperpoint'] / 8);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1944
			for ($i = 0; $i < $parsedFrame['indexpoints']; $i++) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
				$parsedFrame['indexes'][$i] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, $frame_bytesperpoint));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
				$frame_offset += $frame_bytesperpoint;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'RGAD')) { // Replay Gain Adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
			// http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
			//   There may only be one 'RGAD' frame in a tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
			// <Header for 'Replay Gain Adjustment', ID: 'RGAD'>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
			// Peak Amplitude                      $xx $xx $xx $xx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
			// Radio Replay Gain Adjustment        %aaabbbcd %dddddddd
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
			// Audiophile Replay Gain Adjustment   %aaabbbcd %dddddddd
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
			//   a - name code
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
			//   b - originator code
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
			//   c - sign bit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
			//   d - replay gain adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
			$frame_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
			$parsedFrame['peakamplitude'] = getid3_lib::BigEndian2Float(substr($parsedFrame['data'], $frame_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
			$frame_offset += 4;
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1965
			foreach (array('track','album') as $rgad_entry_type) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1966
				$rg_adjustment_word = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1967
				$frame_offset += 2;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1968
				$parsedFrame['raw'][$rgad_entry_type]['name']       = ($rg_adjustment_word & 0xE000) >> 13;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1969
				$parsedFrame['raw'][$rgad_entry_type]['originator'] = ($rg_adjustment_word & 0x1C00) >> 10;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1970
				$parsedFrame['raw'][$rgad_entry_type]['signbit']    = ($rg_adjustment_word & 0x0200) >>  9;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1971
				$parsedFrame['raw'][$rgad_entry_type]['adjustment'] = ($rg_adjustment_word & 0x0100);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1972
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
			$parsedFrame['track']['name']       = getid3_lib::RGADnameLookup($parsedFrame['raw']['track']['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
			$parsedFrame['track']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['track']['originator']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
			$parsedFrame['track']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['track']['adjustment'], $parsedFrame['raw']['track']['signbit']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
			$parsedFrame['album']['name']       = getid3_lib::RGADnameLookup($parsedFrame['raw']['album']['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
			$parsedFrame['album']['originator'] = getid3_lib::RGADoriginatorLookup($parsedFrame['raw']['album']['originator']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
			$parsedFrame['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($parsedFrame['raw']['album']['adjustment'], $parsedFrame['raw']['album']['signbit']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
			$info['replay_gain']['track']['peak']       = $parsedFrame['peakamplitude'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
			$info['replay_gain']['track']['originator'] = $parsedFrame['track']['originator'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
			$info['replay_gain']['track']['adjustment'] = $parsedFrame['track']['adjustment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
			$info['replay_gain']['album']['originator'] = $parsedFrame['album']['originator'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
			$info['replay_gain']['album']['adjustment'] = $parsedFrame['album']['adjustment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
			unset($parsedFrame['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1988
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'CHAP')) { // CHAP Chapters frame (ID3v2.3+ only)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1989
			// http://id3.org/id3v2-chapters-1.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1990
			// <ID3v2.3 or ID3v2.4 frame header, ID: "CHAP">           (10 bytes)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1991
			// Element ID      <text string> $00
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1992
			// Start time      $xx xx xx xx
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1993
			// End time        $xx xx xx xx
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1994
			// Start offset    $xx xx xx xx
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1995
			// End offset      $xx xx xx xx
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1996
			// <Optional embedded sub-frames>
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1997
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1998
			$frame_offset = 0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1999
			@list($parsedFrame['element_id']) = explode("\x00", $parsedFrame['data'], 2);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2000
			$frame_offset += strlen($parsedFrame['element_id']."\x00");
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2001
			$parsedFrame['time_begin'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2002
			$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2003
			$parsedFrame['time_end']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2004
			$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2005
			if (substr($parsedFrame['data'], $frame_offset, 4) != "\xFF\xFF\xFF\xFF") {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2006
				// "If these bytes are all set to 0xFF then the value should be ignored and the start time value should be utilized."
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2007
				$parsedFrame['offset_begin'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2008
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2009
			$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2010
			if (substr($parsedFrame['data'], $frame_offset, 4) != "\xFF\xFF\xFF\xFF") {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2011
				// "If these bytes are all set to 0xFF then the value should be ignored and the start time value should be utilized."
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2012
				$parsedFrame['offset_end']   = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2013
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2014
			$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2015
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2016
			if ($frame_offset < strlen($parsedFrame['data'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2017
				$parsedFrame['subframes'] = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2018
				while ($frame_offset < strlen($parsedFrame['data'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2019
					// <Optional embedded sub-frames>
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2020
					$subframe = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2021
					$subframe['name']      =                           substr($parsedFrame['data'], $frame_offset, 4);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2022
					$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2023
					$subframe['size']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2024
					$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2025
					$subframe['flags_raw'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2026
					$frame_offset += 2;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2027
					if ($subframe['size'] > (strlen($parsedFrame['data']) - $frame_offset)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2028
						$this->warning('CHAP subframe "'.$subframe['name'].'" at frame offset '.$frame_offset.' claims to be "'.$subframe['size'].'" bytes, which is more than the available data ('.(strlen($parsedFrame['data']) - $frame_offset).' bytes)');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2029
						break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2030
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2031
					$subframe_rawdata = substr($parsedFrame['data'], $frame_offset, $subframe['size']);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2032
					$frame_offset += $subframe['size'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2033
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2034
					$subframe['encodingid'] = ord(substr($subframe_rawdata, 0, 1));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2035
					$subframe['text']       =     substr($subframe_rawdata, 1);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2036
					$subframe['encoding']   = $this->TextEncodingNameLookup($subframe['encodingid']);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2037
					$encoding_converted_text = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe['text']));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2038
					switch (substr($encoding_converted_text, 0, 2)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2039
						case "\xFF\xFE":
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2040
						case "\xFE\xFF":
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2041
							switch (strtoupper($info['id3v2']['encoding'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2042
								case 'ISO-8859-1':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2043
								case 'UTF-8':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2044
									$encoding_converted_text = substr($encoding_converted_text, 2);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2045
									// remove unwanted byte-order-marks
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2046
									break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2047
								default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2048
									// ignore
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2049
									break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2050
							}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2051
							break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2052
						default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2053
							// do not remove BOM
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2054
							break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2055
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2056
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2057
					switch ($subframe['name']) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2058
						case 'TIT2':
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2059
							$parsedFrame['chapter_name']        = $encoding_converted_text;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2060
							$parsedFrame['subframes'][] = $subframe;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2061
							break;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2062
						case 'TIT3':
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2063
							$parsedFrame['chapter_description'] = $encoding_converted_text;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2064
							$parsedFrame['subframes'][] = $subframe;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2065
							break;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2066
						case 'WXXX':
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  2067
							@list($subframe['chapter_url_description'], $subframe['chapter_url']) = explode("\x00", $encoding_converted_text, 2);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2068
							$parsedFrame['chapter_url'][$subframe['chapter_url_description']] = $subframe['chapter_url'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2069
							$parsedFrame['subframes'][] = $subframe;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2070
							break;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2071
						case 'APIC':
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2072
							if (preg_match('#^([^\\x00]+)*\\x00(.)([^\\x00]+)*\\x00(.+)$#s', $subframe['text'], $matches)) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2073
								list($dummy, $subframe_apic_mime, $subframe_apic_picturetype, $subframe_apic_description, $subframe_apic_picturedata) = $matches;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2074
								$subframe['image_mime']   = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe_apic_mime));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2075
								$subframe['picture_type'] = $this->APICPictureTypeLookup($subframe_apic_picturetype);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2076
								$subframe['description']  = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe_apic_description));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2077
								if (strlen($this->TextEncodingTerminatorLookup($subframe['encoding'])) == 2) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2078
									// the null terminator between "description" and "picture data" could be either 1 byte (ISO-8859-1, UTF-8) or two bytes (UTF-16)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2079
									// the above regex assumes one byte, if it's actually two then strip the second one here
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2080
									$subframe_apic_picturedata = substr($subframe_apic_picturedata, 1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2081
								}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2082
								$subframe['data'] = $subframe_apic_picturedata;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2083
								unset($dummy, $subframe_apic_mime, $subframe_apic_picturetype, $subframe_apic_description, $subframe_apic_picturedata);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2084
								unset($subframe['text'], $parsedFrame['text']);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2085
								$parsedFrame['subframes'][] = $subframe;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2086
								$parsedFrame['picture_present'] = true;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2087
							} else {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2088
								$this->warning('ID3v2.CHAP subframe #'.(count($parsedFrame['subframes']) + 1).' "'.$subframe['name'].'" not in expected format');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2089
							}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2090
							break;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2091
						default:
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2092
							$this->warning('ID3v2.CHAP subframe "'.$subframe['name'].'" not handled (supported: TIT2, TIT3, WXXX, APIC)');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2093
							break;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2094
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2095
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2096
				unset($subframe_rawdata, $subframe, $encoding_converted_text);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2097
				unset($parsedFrame['data']); // debatable whether this this be here, without it the returned structure may contain a large amount of duplicate data if chapters contain APIC
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2098
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2099
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2100
			$id3v2_chapter_entry = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2101
			foreach (array('id', 'time_begin', 'time_end', 'offset_begin', 'offset_end', 'chapter_name', 'chapter_description', 'chapter_url', 'picture_present') as $id3v2_chapter_key) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2102
				if (isset($parsedFrame[$id3v2_chapter_key])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2103
					$id3v2_chapter_entry[$id3v2_chapter_key] = $parsedFrame[$id3v2_chapter_key];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2104
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2105
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2106
			if (!isset($info['id3v2']['chapters'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2107
				$info['id3v2']['chapters'] = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2108
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2109
			$info['id3v2']['chapters'][] = $id3v2_chapter_entry;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2110
			unset($id3v2_chapter_entry, $id3v2_chapter_key);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2111
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2112
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2113
		} elseif (($id3v2_majorversion >= 3) && ($parsedFrame['frame_name'] == 'CTOC')) { // CTOC Chapters Table Of Contents frame (ID3v2.3+ only)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2114
			// http://id3.org/id3v2-chapters-1.0
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2115
			// <ID3v2.3 or ID3v2.4 frame header, ID: "CTOC">           (10 bytes)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2116
			// Element ID      <text string> $00
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2117
			// CTOC flags        %xx
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2118
			// Entry count       $xx
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2119
			// Child Element ID  <string>$00   /* zero or more child CHAP or CTOC entries */
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2120
			// <Optional embedded sub-frames>
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2121
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2122
			$frame_offset = 0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2123
			@list($parsedFrame['element_id']) = explode("\x00", $parsedFrame['data'], 2);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2124
			$frame_offset += strlen($parsedFrame['element_id']."\x00");
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2125
			$ctoc_flags_raw = ord(substr($parsedFrame['data'], $frame_offset, 1));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2126
			$frame_offset += 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2127
			$parsedFrame['entry_count'] = ord(substr($parsedFrame['data'], $frame_offset, 1));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2128
			$frame_offset += 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2129
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2130
			$terminator_position = null;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2131
			for ($i = 0; $i < $parsedFrame['entry_count']; $i++) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2132
				$terminator_position = strpos($parsedFrame['data'], "\x00", $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2133
				$parsedFrame['child_element_ids'][$i] = substr($parsedFrame['data'], $frame_offset, $terminator_position - $frame_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2134
				$frame_offset = $terminator_position + 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2135
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2136
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2137
			$parsedFrame['ctoc_flags']['ordered']   = (bool) ($ctoc_flags_raw & 0x01);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2138
			$parsedFrame['ctoc_flags']['top_level'] = (bool) ($ctoc_flags_raw & 0x03);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2139
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2140
			unset($ctoc_flags_raw, $terminator_position);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2141
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2142
			if ($frame_offset < strlen($parsedFrame['data'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2143
				$parsedFrame['subframes'] = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2144
				while ($frame_offset < strlen($parsedFrame['data'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2145
					// <Optional embedded sub-frames>
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2146
					$subframe = array();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2147
					$subframe['name']      =                           substr($parsedFrame['data'], $frame_offset, 4);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2148
					$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2149
					$subframe['size']      = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2150
					$frame_offset += 4;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2151
					$subframe['flags_raw'] = getid3_lib::BigEndian2Int(substr($parsedFrame['data'], $frame_offset, 2));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2152
					$frame_offset += 2;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2153
					if ($subframe['size'] > (strlen($parsedFrame['data']) - $frame_offset)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2154
						$this->warning('CTOS subframe "'.$subframe['name'].'" at frame offset '.$frame_offset.' claims to be "'.$subframe['size'].'" bytes, which is more than the available data ('.(strlen($parsedFrame['data']) - $frame_offset).' bytes)');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2155
						break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2156
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2157
					$subframe_rawdata = substr($parsedFrame['data'], $frame_offset, $subframe['size']);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2158
					$frame_offset += $subframe['size'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2159
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2160
					$subframe['encodingid'] = ord(substr($subframe_rawdata, 0, 1));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2161
					$subframe['text']       =     substr($subframe_rawdata, 1);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2162
					$subframe['encoding']   = $this->TextEncodingNameLookup($subframe['encodingid']);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2163
					$encoding_converted_text = trim(getid3_lib::iconv_fallback($subframe['encoding'], $info['encoding'], $subframe['text']));;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2164
					switch (substr($encoding_converted_text, 0, 2)) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2165
						case "\xFF\xFE":
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2166
						case "\xFE\xFF":
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2167
							switch (strtoupper($info['id3v2']['encoding'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2168
								case 'ISO-8859-1':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2169
								case 'UTF-8':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2170
									$encoding_converted_text = substr($encoding_converted_text, 2);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2171
									// remove unwanted byte-order-marks
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2172
									break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2173
								default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2174
									// ignore
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2175
									break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2176
							}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2177
							break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2178
						default:
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2179
							// do not remove BOM
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2180
							break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2181
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2182
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2183
					if (($subframe['name'] == 'TIT2') || ($subframe['name'] == 'TIT3')) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2184
						if ($subframe['name'] == 'TIT2') {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2185
							$parsedFrame['toc_name']        = $encoding_converted_text;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2186
						} elseif ($subframe['name'] == 'TIT3') {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2187
							$parsedFrame['toc_description'] = $encoding_converted_text;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2188
						}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2189
						$parsedFrame['subframes'][] = $subframe;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2190
					} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2191
						$this->warning('ID3v2.CTOC subframe "'.$subframe['name'].'" not handled (only TIT2 and TIT3)');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2192
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2193
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2194
				unset($subframe_rawdata, $subframe, $encoding_converted_text);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2195
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2196
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2202
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2203
	 * @param string $data
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2204
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2205
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2206
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
	public function DeUnsynchronise($data) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
		return str_replace("\xFF\x00", "\xFF", $data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2211
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2212
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2213
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2214
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2215
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
	public function LookupExtendedHeaderRestrictionsTagSizeLimits($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
		static $LookupExtendedHeaderRestrictionsTagSizeLimits = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
			0x00 => 'No more than 128 frames and 1 MB total tag size',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
			0x01 => 'No more than 64 frames and 128 KB total tag size',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
			0x02 => 'No more than 32 frames and 40 KB total tag size',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
			0x03 => 'No more than 32 frames and 4 KB total tag size',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
		return (isset($LookupExtendedHeaderRestrictionsTagSizeLimits[$index]) ? $LookupExtendedHeaderRestrictionsTagSizeLimits[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2226
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2227
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2228
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2229
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2230
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
	public function LookupExtendedHeaderRestrictionsTextEncodings($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
		static $LookupExtendedHeaderRestrictionsTextEncodings = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
			0x00 => 'No restrictions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
			0x01 => 'Strings are only encoded with ISO-8859-1 or UTF-8',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
		return (isset($LookupExtendedHeaderRestrictionsTextEncodings[$index]) ? $LookupExtendedHeaderRestrictionsTextEncodings[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2239
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2240
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2241
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2242
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2243
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
	public function LookupExtendedHeaderRestrictionsTextFieldSize($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
		static $LookupExtendedHeaderRestrictionsTextFieldSize = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
			0x00 => 'No restrictions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
			0x01 => 'No string is longer than 1024 characters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
			0x02 => 'No string is longer than 128 characters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
			0x03 => 'No string is longer than 30 characters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
		return (isset($LookupExtendedHeaderRestrictionsTextFieldSize[$index]) ? $LookupExtendedHeaderRestrictionsTextFieldSize[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2254
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2255
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2256
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2257
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2258
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
	public function LookupExtendedHeaderRestrictionsImageEncoding($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
		static $LookupExtendedHeaderRestrictionsImageEncoding = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
			0x00 => 'No restrictions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
			0x01 => 'Images are encoded only with PNG or JPEG',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
		return (isset($LookupExtendedHeaderRestrictionsImageEncoding[$index]) ? $LookupExtendedHeaderRestrictionsImageEncoding[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2267
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2268
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2269
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2270
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2271
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
	public function LookupExtendedHeaderRestrictionsImageSizeSize($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
		static $LookupExtendedHeaderRestrictionsImageSizeSize = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
			0x00 => 'No restrictions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
			0x01 => 'All images are 256x256 pixels or smaller',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
			0x02 => 'All images are 64x64 pixels or smaller',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
			0x03 => 'All images are exactly 64x64 pixels, unless required otherwise',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
		return (isset($LookupExtendedHeaderRestrictionsImageSizeSize[$index]) ? $LookupExtendedHeaderRestrictionsImageSizeSize[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2282
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2283
	 * @param string $currencyid
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2284
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2285
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2286
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
	public function LookupCurrencyUnits($currencyid) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
			AED	Dirhams
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
			AFA	Afghanis
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
			ALL	Leke
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
			AMD	Drams
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
			ANG	Guilders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
			AOA	Kwanza
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
			ARS	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
			ATS	Schillings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
			AUD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
			AWG	Guilders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
			AZM	Manats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
			BAM	Convertible Marka
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
			BBD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
			BDT	Taka
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
			BEF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
			BGL	Leva
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
			BHD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
			BIF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
			BMD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
			BND	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
			BOB	Bolivianos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
			BRL	Brazil Real
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
			BSD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
			BTN	Ngultrum
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
			BWP	Pulas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
			BYR	Rubles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
			BZD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
			CAD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
			CDF	Congolese Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
			CHF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
			CLP	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
			CNY	Yuan Renminbi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
			COP	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
			CRC	Colones
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
			CUP	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
			CVE	Escudos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
			CYP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
			CZK	Koruny
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
			DEM	Deutsche Marks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
			DJF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
			DKK	Kroner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
			DOP	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
			DZD	Algeria Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
			EEK	Krooni
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
			EGP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
			ERN	Nakfa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
			ESP	Pesetas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
			ETB	Birr
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
			EUR	Euro
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
			FIM	Markkaa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
			FJD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
			FKP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
			FRF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
			GBP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
			GEL	Lari
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
			GGP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
			GHC	Cedis
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
			GIP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
			GMD	Dalasi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
			GNF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
			GRD	Drachmae
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
			GTQ	Quetzales
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
			GYD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
			HKD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
			HNL	Lempiras
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
			HRK	Kuna
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
			HTG	Gourdes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
			HUF	Forints
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
			IDR	Rupiahs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
			IEP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
			ILS	New Shekels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
			IMP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
			INR	Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
			IQD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
			IRR	Rials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
			ISK	Kronur
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
			ITL	Lire
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
			JEP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
			JMD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
			JOD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
			JPY	Yen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
			KES	Shillings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
			KGS	Soms
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
			KHR	Riels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
			KMF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
			KPW	Won
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
			KWD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
			KYD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
			KZT	Tenge
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
			LAK	Kips
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
			LBP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
			LKR	Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
			LRD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
			LSL	Maloti
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
			LTL	Litai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
			LUF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
			LVL	Lati
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
			LYD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
			MAD	Dirhams
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
			MDL	Lei
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2394
			MGF	Malagasy Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
			MKD	Denars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
			MMK	Kyats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
			MNT	Tugriks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
			MOP	Patacas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
			MRO	Ouguiyas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
			MTL	Liri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
			MUR	Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
			MVR	Rufiyaa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
			MWK	Kwachas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
			MXN	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
			MYR	Ringgits
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
			MZM	Meticais
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
			NAD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
			NGN	Nairas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
			NIO	Gold Cordobas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
			NLG	Guilders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
			NOK	Krone
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
			NPR	Nepal Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
			NZD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
			OMR	Rials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
			PAB	Balboa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
			PEN	Nuevos Soles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
			PGK	Kina
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
			PHP	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
			PKR	Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
			PLN	Zlotych
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
			PTE	Escudos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
			PYG	Guarani
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
			QAR	Rials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
			ROL	Lei
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
			RUR	Rubles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
			RWF	Rwanda Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
			SAR	Riyals
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
			SBD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
			SCR	Rupees
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
			SDD	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
			SEK	Kronor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
			SGD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
			SHP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
			SIT	Tolars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
			SKK	Koruny
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
			SLL	Leones
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
			SOS	Shillings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
			SPL	Luigini
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
			SRG	Guilders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
			STD	Dobras
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
			SVC	Colones
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
			SYP	Pounds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
			SZL	Emalangeni
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
			THB	Baht
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
			TJR	Rubles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
			TMM	Manats
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
			TND	Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
			TOP	Pa'anga
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  2449
			TRL	Liras (old)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  2450
			TRY	Liras
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
			TTD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
			TVD	Tuvalu Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
			TWD	New Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
			TZS	Shillings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
			UAH	Hryvnia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
			UGX	Shillings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
			USD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
			UYU	Pesos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
			UZS	Sums
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
			VAL	Lire
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
			VEB	Bolivares
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
			VND	Dong
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
			VUV	Vatu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
			WST	Tala
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
			XAF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
			XAG	Ounces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
			XAU	Ounces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
			XCD	Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
			XDR	Special Drawing Rights
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
			XPD	Ounces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
			XPF	Francs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
			XPT	Ounces
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
			YER	Rials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
			YUM	New Dinars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
			ZAR	Rand
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
			ZMK	Kwacha
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
			ZWD	Zimbabwe Dollars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
		return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-units');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2484
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2485
	 * @param string $currencyid
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2486
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2487
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2488
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
	public function LookupCurrencyCountry($currencyid) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
			AED	United Arab Emirates
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
			AFA	Afghanistan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
			ALL	Albania
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
			AMD	Armenia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
			ANG	Netherlands Antilles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
			AOA	Angola
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
			ARS	Argentina
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
			ATS	Austria
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
			AUD	Australia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
			AWG	Aruba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
			AZM	Azerbaijan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
			BAM	Bosnia and Herzegovina
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
			BBD	Barbados
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
			BDT	Bangladesh
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
			BEF	Belgium
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
			BGL	Bulgaria
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
			BHD	Bahrain
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
			BIF	Burundi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
			BMD	Bermuda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
			BND	Brunei Darussalam
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
			BOB	Bolivia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
			BRL	Brazil
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
			BSD	Bahamas
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
			BTN	Bhutan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
			BWP	Botswana
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
			BYR	Belarus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
			BZD	Belize
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
			CAD	Canada
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
			CDF	Congo/Kinshasa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
			CHF	Switzerland
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
			CLP	Chile
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
			CNY	China
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
			COP	Colombia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
			CRC	Costa Rica
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
			CUP	Cuba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
			CVE	Cape Verde
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
			CYP	Cyprus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
			CZK	Czech Republic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
			DEM	Germany
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
			DJF	Djibouti
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
			DKK	Denmark
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
			DOP	Dominican Republic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
			DZD	Algeria
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
			EEK	Estonia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
			EGP	Egypt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
			ERN	Eritrea
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
			ESP	Spain
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
			ETB	Ethiopia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
			EUR	Euro Member Countries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
			FIM	Finland
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
			FJD	Fiji
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
			FKP	Falkland Islands (Malvinas)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
			FRF	France
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
			GBP	United Kingdom
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
			GEL	Georgia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
			GGP	Guernsey
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
			GHC	Ghana
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
			GIP	Gibraltar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
			GMD	Gambia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
			GNF	Guinea
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
			GRD	Greece
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
			GTQ	Guatemala
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
			GYD	Guyana
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
			HKD	Hong Kong
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
			HNL	Honduras
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
			HRK	Croatia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
			HTG	Haiti
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
			HUF	Hungary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
			IDR	Indonesia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
			IEP	Ireland (Eire)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
			ILS	Israel
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
			IMP	Isle of Man
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
			INR	India
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
			IQD	Iraq
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
			IRR	Iran
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
			ISK	Iceland
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
			ITL	Italy
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
			JEP	Jersey
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
			JMD	Jamaica
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
			JOD	Jordan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
			JPY	Japan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
			KES	Kenya
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
			KGS	Kyrgyzstan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
			KHR	Cambodia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
			KMF	Comoros
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
			KPW	Korea
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
			KWD	Kuwait
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
			KYD	Cayman Islands
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
			KZT	Kazakstan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
			LAK	Laos
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
			LBP	Lebanon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
			LKR	Sri Lanka
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
			LRD	Liberia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
			LSL	Lesotho
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
			LTL	Lithuania
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
			LUF	Luxembourg
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
			LVL	Latvia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
			LYD	Libya
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
			MAD	Morocco
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
			MDL	Moldova
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
			MGF	Madagascar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
			MKD	Macedonia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
			MMK	Myanmar (Burma)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
			MNT	Mongolia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
			MOP	Macau
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
			MRO	Mauritania
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
			MTL	Malta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
			MUR	Mauritius
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
			MVR	Maldives (Maldive Islands)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
			MWK	Malawi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
			MXN	Mexico
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
			MYR	Malaysia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
			MZM	Mozambique
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
			NAD	Namibia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
			NGN	Nigeria
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
			NIO	Nicaragua
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
			NLG	Netherlands (Holland)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
			NOK	Norway
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
			NPR	Nepal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
			NZD	New Zealand
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
			OMR	Oman
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
			PAB	Panama
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
			PEN	Peru
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
			PGK	Papua New Guinea
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
			PHP	Philippines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
			PKR	Pakistan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
			PLN	Poland
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
			PTE	Portugal
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
			PYG	Paraguay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
			QAR	Qatar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
			ROL	Romania
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
			RUR	Russia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
			RWF	Rwanda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
			SAR	Saudi Arabia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
			SBD	Solomon Islands
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
			SCR	Seychelles
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
			SDD	Sudan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
			SEK	Sweden
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
			SGD	Singapore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
			SHP	Saint Helena
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
			SIT	Slovenia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
			SKK	Slovakia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
			SLL	Sierra Leone
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
			SOS	Somalia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
			SPL	Seborga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
			SRG	Suriname
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
			STD	São Tome and Principe
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
			SVC	El Salvador
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
			SYP	Syria
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
			SZL	Swaziland
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
			THB	Thailand
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
			TJR	Tajikistan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
			TMM	Turkmenistan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
			TND	Tunisia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
			TOP	Tonga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
			TRL	Turkey
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  2651
			TRY	Turkey
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
			TTD	Trinidad and Tobago
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
			TVD	Tuvalu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
			TWD	Taiwan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
			TZS	Tanzania
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
			UAH	Ukraine
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
			UGX	Uganda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
			USD	United States of America
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
			UYU	Uruguay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
			UZS	Uzbekistan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
			VAL	Vatican City
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
			VEB	Venezuela
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
			VND	Viet Nam
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
			VUV	Vanuatu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
			WST	Samoa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
			XAF	Communauté Financière Africaine
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
			XAG	Silver
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
			XAU	Gold
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
			XCD	East Caribbean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
			XDR	International Monetary Fund
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
			XPD	Palladium
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
			XPF	Comptoirs Français du Pacifique
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
			XPT	Platinum
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
			YER	Yemen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
			YUM	Yugoslavia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
			ZAR	South Africa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
			ZMK	Zambia
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
			ZWD	Zimbabwe
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
		return getid3_lib::EmbeddedLookup($currencyid, $begin, __LINE__, __FILE__, 'id3v2-currency-country');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2685
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2686
	 * @param string $languagecode
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2687
	 * @param bool   $casesensitive
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2688
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2689
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2690
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
	public static function LanguageLookup($languagecode, $casesensitive=false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
		if (!$casesensitive) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
			$languagecode = strtolower($languagecode);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
		// http://www.id3.org/id3v2.4.0-structure.txt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
		// [4.   ID3v2 frame overview]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
		// The three byte language field, present in several frames, is used to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
		// describe the language of the frame's content, according to ISO-639-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
		// [ISO-639-2]. The language should be represented in lower case. If the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
		// language is not known the string "XXX" should be used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
		// ISO 639-2 - http://www.id3.org/iso639-2.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
			XXX	unknown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
			xxx	unknown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
			aar	Afar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
			abk	Abkhazian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
			ace	Achinese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
			ach	Acoli
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
			ada	Adangme
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
			afa	Afro-Asiatic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
			afh	Afrihili
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
			afr	Afrikaans
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
			aka	Akan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
			akk	Akkadian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
			alb	Albanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
			ale	Aleut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
			alg	Algonquian Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
			amh	Amharic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
			ang	English, Old (ca. 450-1100)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
			apa	Apache Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
			ara	Arabic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
			arc	Aramaic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
			arm	Armenian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
			arn	Araucanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
			arp	Arapaho
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
			art	Artificial (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
			arw	Arawak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
			asm	Assamese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
			ath	Athapascan Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
			ava	Avaric
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
			ave	Avestan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
			awa	Awadhi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
			aym	Aymara
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
			aze	Azerbaijani
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
			bad	Banda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
			bai	Bamileke Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
			bak	Bashkir
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
			bal	Baluchi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
			bam	Bambara
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
			ban	Balinese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
			baq	Basque
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
			bas	Basa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
			bat	Baltic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
			bej	Beja
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
			bel	Byelorussian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
			bem	Bemba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
			ben	Bengali
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
			ber	Berber (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
			bho	Bhojpuri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
			bih	Bihari
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
			bik	Bikol
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
			bin	Bini
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
			bis	Bislama
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
			bla	Siksika
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
			bnt	Bantu (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
			bod	Tibetan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
			bra	Braj
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
			bre	Breton
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
			bua	Buriat
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
			bug	Buginese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
			bul	Bulgarian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
			bur	Burmese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
			cad	Caddo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
			cai	Central American Indian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
			car	Carib
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
			cat	Catalan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
			cau	Caucasian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
			ceb	Cebuano
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
			cel	Celtic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
			ces	Czech
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
			cha	Chamorro
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
			chb	Chibcha
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
			che	Chechen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
			chg	Chagatai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
			chi	Chinese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
			chm	Mari
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
			chn	Chinook jargon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
			cho	Choctaw
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
			chr	Cherokee
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
			chu	Church Slavic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
			chv	Chuvash
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
			chy	Cheyenne
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
			cop	Coptic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
			cor	Cornish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
			cos	Corsican
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
			cpe	Creoles and Pidgins, English-based (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
			cpf	Creoles and Pidgins, French-based (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
			cpp	Creoles and Pidgins, Portuguese-based (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
			cre	Cree
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
			crp	Creoles and Pidgins (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
			cus	Cushitic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
			cym	Welsh
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
			cze	Czech
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
			dak	Dakota
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
			dan	Danish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
			del	Delaware
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
			deu	German
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
			din	Dinka
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
			div	Divehi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
			doi	Dogri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
			dra	Dravidian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
			dua	Duala
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
			dum	Dutch, Middle (ca. 1050-1350)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
			dut	Dutch
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
			dyu	Dyula
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
			dzo	Dzongkha
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
			efi	Efik
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
			egy	Egyptian (Ancient)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
			eka	Ekajuk
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
			ell	Greek, Modern (1453-)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
			elx	Elamite
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
			eng	English
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
			enm	English, Middle (ca. 1100-1500)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
			epo	Esperanto
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
			esk	Eskimo (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
			esl	Spanish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
			est	Estonian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
			eus	Basque
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
			ewe	Ewe
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
			ewo	Ewondo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
			fan	Fang
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
			fao	Faroese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
			fas	Persian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
			fat	Fanti
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
			fij	Fijian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
			fin	Finnish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
			fiu	Finno-Ugrian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
			fon	Fon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
			fra	French
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
			fre	French
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
			frm	French, Middle (ca. 1400-1600)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
			fro	French, Old (842- ca. 1400)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
			fry	Frisian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
			ful	Fulah
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
			gaa	Ga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
			gae	Gaelic (Scots)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
			gai	Irish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
			gay	Gayo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
			gdh	Gaelic (Scots)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
			gem	Germanic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
			geo	Georgian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
			ger	German
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
			gez	Geez
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
			gil	Gilbertese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
			glg	Gallegan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
			gmh	German, Middle High (ca. 1050-1500)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
			goh	German, Old High (ca. 750-1050)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2856
			gon	Gondi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2857
			got	Gothic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2858
			grb	Grebo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2859
			grc	Greek, Ancient (to 1453)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
			gre	Greek, Modern (1453-)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
			grn	Guarani
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
			guj	Gujarati
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
			hai	Haida
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
			hau	Hausa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
			haw	Hawaiian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
			heb	Hebrew
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
			her	Herero
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
			hil	Hiligaynon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
			him	Himachali
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
			hin	Hindi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
			hmo	Hiri Motu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2872
			hun	Hungarian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
			hup	Hupa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
			hye	Armenian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
			iba	Iban
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
			ibo	Igbo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
			ice	Icelandic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2878
			ijo	Ijo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
			iku	Inuktitut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
			ilo	Iloko
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
			ina	Interlingua (International Auxiliary language Association)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
			inc	Indic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
			ind	Indonesian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
			ine	Indo-European (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
			ine	Interlingue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
			ipk	Inupiak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2887
			ira	Iranian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2888
			iri	Irish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2889
			iro	Iroquoian uages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
			isl	Icelandic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
			ita	Italian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2892
			jav	Javanese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2893
			jaw	Javanese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2894
			jpn	Japanese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2895
			jpr	Judeo-Persian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2896
			jrb	Judeo-Arabic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
			kaa	Kara-Kalpak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
			kab	Kabyle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
			kac	Kachin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
			kal	Greenlandic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
			kam	Kamba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
			kan	Kannada
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
			kar	Karen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
			kas	Kashmiri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
			kat	Georgian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
			kau	Kanuri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
			kaw	Kawi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
			kaz	Kazakh
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
			kha	Khasi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
			khi	Khoisan (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
			khm	Khmer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
			kho	Khotanese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
			kik	Kikuyu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
			kin	Kinyarwanda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
			kir	Kirghiz
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2916
			kok	Konkani
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2917
			kom	Komi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
			kon	Kongo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2919
			kor	Korean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2920
			kpe	Kpelle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
			kro	Kru
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
			kru	Kurukh
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
			kua	Kuanyama
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
			kum	Kumyk
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
			kur	Kurdish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
			kus	Kusaie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
			kut	Kutenai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
			lad	Ladino
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
			lah	Lahnda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
			lam	Lamba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
			lao	Lao
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
			lat	Latin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
			lav	Latvian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
			lez	Lezghian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
			lin	Lingala
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
			lit	Lithuanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
			lol	Mongo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
			loz	Lozi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
			ltz	Letzeburgesch
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
			lub	Luba-Katanga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
			lug	Ganda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
			lui	Luiseno
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
			lun	Lunda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2944
			luo	Luo (Kenya and Tanzania)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
			mac	Macedonian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
			mad	Madurese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
			mag	Magahi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
			mah	Marshall
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2949
			mai	Maithili
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
			mak	Macedonian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
			mak	Makasar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
			mal	Malayalam
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
			man	Mandingo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
			mao	Maori
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
			map	Austronesian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
			mar	Marathi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
			mas	Masai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
			max	Manx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
			may	Malay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
			men	Mende
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
			mga	Irish, Middle (900 - 1200)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
			mic	Micmac
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
			min	Minangkabau
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
			mis	Miscellaneous (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
			mkh	Mon-Kmer (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
			mlg	Malagasy
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
			mlt	Maltese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
			mni	Manipuri
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
			mno	Manobo Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2970
			moh	Mohawk
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
			mol	Moldavian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
			mon	Mongolian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
			mos	Mossi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
			mri	Maori
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
			msa	Malay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2976
			mul	Multiple Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
			mun	Munda Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2978
			mus	Creek
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
			mwr	Marwari
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
			mya	Burmese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2981
			myn	Mayan Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2982
			nah	Aztec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2983
			nai	North American Indian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2984
			nau	Nauru
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
			nav	Navajo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
			nbl	Ndebele, South
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
			nde	Ndebele, North
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
			ndo	Ndongo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
			nep	Nepali
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2990
			new	Newari
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
			nic	Niger-Kordofanian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2992
			niu	Niuean
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2993
			nla	Dutch
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
			nno	Norwegian (Nynorsk)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
			non	Norse, Old
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
			nor	Norwegian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
			nso	Sotho, Northern
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
			nub	Nubian Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
			nya	Nyanja
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
			nym	Nyamwezi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
			nyn	Nyankole
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
			nyo	Nyoro
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
			nzi	Nzima
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
			oci	Langue d'Oc (post 1500)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
			oji	Ojibwa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
			ori	Oriya
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
			orm	Oromo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
			osa	Osage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
			oss	Ossetic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
			ota	Turkish, Ottoman (1500 - 1928)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
			oto	Otomian Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
			paa	Papuan-Australian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
			pag	Pangasinan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
			pal	Pahlavi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
			pam	Pampanga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
			pan	Panjabi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
			pap	Papiamento
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
			pau	Palauan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3019
			peo	Persian, Old (ca 600 - 400 B.C.)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
			per	Persian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
			phn	Phoenician
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
			pli	Pali
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
			pol	Polish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
			pon	Ponape
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
			por	Portuguese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
			pra	Prakrit uages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3027
			pro	Provencal, Old (to 1500)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3028
			pus	Pushto
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3029
			que	Quechua
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3030
			raj	Rajasthani
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3031
			rar	Rarotongan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3032
			roa	Romance (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3033
			roh	Rhaeto-Romance
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3034
			rom	Romany
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
			ron	Romanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3036
			rum	Romanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3037
			run	Rundi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3038
			rus	Russian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3039
			sad	Sandawe
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3040
			sag	Sango
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
			sah	Yakut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
			sai	South American Indian (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
			sal	Salishan Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
			sam	Samaritan Aramaic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
			san	Sanskrit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3046
			sco	Scots
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3047
			scr	Serbo-Croatian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3048
			sel	Selkup
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3049
			sem	Semitic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
			sga	Irish, Old (to 900)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
			shn	Shan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
			sid	Sidamo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
			sin	Singhalese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
			sio	Siouan Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
			sit	Sino-Tibetan (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
			sla	Slavic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
			slk	Slovak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
			slo	Slovak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
			slv	Slovenian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
			smi	Sami Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
			smo	Samoan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
			sna	Shona
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
			snd	Sindhi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
			sog	Sogdian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
			som	Somali
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
			son	Songhai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
			sot	Sotho, Southern
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3068
			spa	Spanish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3069
			sqi	Albanian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3070
			srd	Sardinian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3071
			srr	Serer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3072
			ssa	Nilo-Saharan (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3073
			ssw	Siswant
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3074
			ssw	Swazi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3075
			suk	Sukuma
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
			sun	Sudanese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3077
			sus	Susu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
			sux	Sumerian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
			sve	Swedish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3080
			swa	Swahili
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3081
			swe	Swedish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
			syr	Syriac
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
			tah	Tahitian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
			tam	Tamil
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
			tat	Tatar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
			tel	Telugu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
			tem	Timne
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
			ter	Tereno
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3089
			tgk	Tajik
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
			tgl	Tagalog
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
			tha	Thai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
			tib	Tibetan
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
			tig	Tigre
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
			tir	Tigrinya
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3095
			tiv	Tivi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3096
			tli	Tlingit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
			tmh	Tamashek
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
			tog	Tonga (Nyasa)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
			ton	Tonga (Tonga Islands)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
			tru	Truk
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
			tsi	Tsimshian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
			tsn	Tswana
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
			tso	Tsonga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
			tuk	Turkmen
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
			tum	Tumbuka
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
			tur	Turkish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
			tut	Altaic (Other)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3108
			twi	Twi
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
			tyv	Tuvinian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
			uga	Ugaritic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
			uig	Uighur
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
			ukr	Ukrainian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
			umb	Umbundu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
			und	Undetermined
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
			urd	Urdu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3116
			uzb	Uzbek
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3117
			vai	Vai
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3118
			ven	Venda
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3119
			vie	Vietnamese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3120
			vol	Volapük
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3121
			vot	Votic
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3122
			wak	Wakashan Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3123
			wal	Walamo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3124
			war	Waray
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
			was	Washo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3126
			wel	Welsh
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3127
			wen	Sorbian Languages
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3128
			wol	Wolof
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3129
			xho	Xhosa
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3130
			yao	Yao
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3131
			yap	Yap
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
			yid	Yiddish
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
			yor	Yoruba
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
			zap	Zapotec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
			zen	Zenaga
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3136
			zha	Zhuang
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3137
			zho	Chinese
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
			zul	Zulu
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
			zun	Zuni
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3141
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
		return getid3_lib::EmbeddedLookup($languagecode, $begin, __LINE__, __FILE__, 'id3v2-languagecode');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3146
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3147
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3148
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3149
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3150
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
	public static function ETCOEventLookup($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
		if (($index >= 0x17) && ($index <= 0xDF)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
			return 'reserved for future use';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
		if (($index >= 0xE0) && ($index <= 0xEF)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
			return 'not predefined synch 0-F';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
		if (($index >= 0xF0) && ($index <= 0xFC)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
			return 'reserved for future use';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
		static $EventLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
			0x00 => 'padding (has no meaning)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3164
			0x01 => 'end of initial silence',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3165
			0x02 => 'intro start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3166
			0x03 => 'main part start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3167
			0x04 => 'outro start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3168
			0x05 => 'outro end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3169
			0x06 => 'verse start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3170
			0x07 => 'refrain start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3171
			0x08 => 'interlude start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3172
			0x09 => 'theme start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3173
			0x0A => 'variation start',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3174
			0x0B => 'key change',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3175
			0x0C => 'time change',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3176
			0x0D => 'momentary unwanted noise (Snap, Crackle & Pop)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3177
			0x0E => 'sustained noise',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3178
			0x0F => 'sustained noise end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3179
			0x10 => 'intro end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
			0x11 => 'main part end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3181
			0x12 => 'verse end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3182
			0x13 => 'refrain end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
			0x14 => 'theme end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
			0x15 => 'profanity',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
			0x16 => 'profanity end',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
			0xFD => 'audio end (start of silence)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
			0xFE => 'audio file ends',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
			0xFF => 'one more byte of events follows'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
		return (isset($EventLookup[$index]) ? $EventLookup[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3194
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3195
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3196
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3197
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3198
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3199
	public static function SYTLContentTypeLookup($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3200
		static $SYTLContentTypeLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3201
			0x00 => 'other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
			0x01 => 'lyrics',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3203
			0x02 => 'text transcription',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3204
			0x03 => 'movement/part name', // (e.g. 'Adagio')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
			0x04 => 'events',             // (e.g. 'Don Quijote enters the stage')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
			0x05 => 'chord',              // (e.g. 'Bb F Fsus')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
			0x06 => 'trivia/\'pop up\' information',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
			0x07 => 'URLs to webpages',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
			0x08 => 'URLs to images'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
		return (isset($SYTLContentTypeLookup[$index]) ? $SYTLContentTypeLookup[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3215
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3216
	 * @param int   $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3217
	 * @param bool $returnarray
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3218
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3219
	 * @return array|string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3220
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
	public static function APICPictureTypeLookup($index, $returnarray=false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3222
		static $APICPictureTypeLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3223
			0x00 => 'Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3224
			0x01 => '32x32 pixels \'file icon\' (PNG only)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3225
			0x02 => 'Other file icon',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3226
			0x03 => 'Cover (front)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3227
			0x04 => 'Cover (back)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3228
			0x05 => 'Leaflet page',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
			0x06 => 'Media (e.g. label side of CD)',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
			0x07 => 'Lead artist/lead performer/soloist',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
			0x08 => 'Artist/performer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3232
			0x09 => 'Conductor',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
			0x0A => 'Band/Orchestra',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
			0x0B => 'Composer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
			0x0C => 'Lyricist/text writer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
			0x0D => 'Recording Location',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
			0x0E => 'During recording',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3238
			0x0F => 'During performance',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3239
			0x10 => 'Movie/video screen capture',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3240
			0x11 => 'A bright coloured fish',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
			0x12 => 'Illustration',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3242
			0x13 => 'Band/artist logotype',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3243
			0x14 => 'Publisher/Studio logotype'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3244
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
		if ($returnarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3246
			return $APICPictureTypeLookup;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3247
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3248
		return (isset($APICPictureTypeLookup[$index]) ? $APICPictureTypeLookup[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3249
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3250
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3251
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3252
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3253
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3254
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3255
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3256
	public static function COMRReceivedAsLookup($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3257
		static $COMRReceivedAsLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3258
			0x00 => 'Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3259
			0x01 => 'Standard CD album with other songs',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
			0x02 => 'Compressed audio on CD',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
			0x03 => 'File over the Internet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
			0x04 => 'Stream over the Internet',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
			0x05 => 'As note sheets',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
			0x06 => 'As note sheets in a book with other sheets',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3265
			0x07 => 'Music on other media',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3266
			0x08 => 'Non-musical merchandise'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3267
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
		return (isset($COMRReceivedAsLookup[$index]) ? $COMRReceivedAsLookup[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3272
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3273
	 * @param int $index
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3274
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3275
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3276
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
	public static function RVA2ChannelTypeLookup($index) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
		static $RVA2ChannelTypeLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
			0x00 => 'Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
			0x01 => 'Master volume',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
			0x02 => 'Front right',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
			0x03 => 'Front left',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
			0x04 => 'Back right',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
			0x05 => 'Back left',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
			0x06 => 'Front centre',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
			0x07 => 'Back centre',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
			0x08 => 'Subwoofer'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
		return (isset($RVA2ChannelTypeLookup[$index]) ? $RVA2ChannelTypeLookup[$index] : '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3293
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3294
	 * @param string $framename
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3295
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3296
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3297
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
	public static function FrameNameLongLookup($framename) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
			AENC	Audio encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
			APIC	Attached picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
			ASPI	Audio seek point index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
			BUF	Recommended buffer size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
			CNT	Play counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
			COM	Comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
			COMM	Comments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
			COMR	Commercial frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
			CRA	Audio encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
			CRM	Encrypted meta frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3314
			ENCR	Encryption method registration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3315
			EQU	Equalisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3316
			EQU2	Equalisation (2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3317
			EQUA	Equalisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
			ETC	Event timing codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
			ETCO	Event timing codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
			GEO	General encapsulated object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
			GEOB	General encapsulated object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
			GRID	Group identification registration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
			IPL	Involved people list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
			IPLS	Involved people list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
			LINK	Linked information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
			LNK	Linked information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
			MCDI	Music CD identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
			MCI	Music CD Identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
			MLL	MPEG location lookup table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
			MLLT	MPEG location lookup table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
			OWNE	Ownership frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
			PCNT	Play counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
			PIC	Attached picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3334
			POP	Popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
			POPM	Popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
			POSS	Position synchronisation frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
			PRIV	Private frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
			RBUF	Recommended buffer size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
			REV	Reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3340
			RVA	Relative volume adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
			RVA2	Relative volume adjustment (2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3342
			RVAD	Relative volume adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3343
			RVRB	Reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3344
			SEEK	Seek frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3345
			SIGN	Signature frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3346
			SLT	Synchronised lyric/text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
			STC	Synced tempo codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3348
			SYLT	Synchronised lyric/text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3349
			SYTC	Synchronised tempo codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3350
			TAL	Album/Movie/Show title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3351
			TALB	Album/Movie/Show title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
			TBP	BPM (Beats Per Minute)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
			TBPM	BPM (beats per minute)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3354
			TCM	Composer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
			TCMP	Part of a compilation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
			TCO	Content type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3357
			TCOM	Composer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
			TCON	Content type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
			TCOP	Copyright message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
			TCP	Part of a compilation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
			TCR	Copyright message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3362
			TDA	Date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
			TDAT	Date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
			TDEN	Encoding time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
			TDLY	Playlist delay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3366
			TDOR	Original release time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
			TDRC	Recording time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
			TDRL	Release time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
			TDTG	Tagging time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
			TDY	Playlist delay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
			TEN	Encoded by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
			TENC	Encoded by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3373
			TEXT	Lyricist/Text writer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3374
			TFLT	File type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3375
			TFT	File type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3376
			TIM	Time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3377
			TIME	Time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3378
			TIPL	Involved people list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3379
			TIT1	Content group description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3380
			TIT2	Title/songname/content description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
			TIT3	Subtitle/Description refinement
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
			TKE	Initial key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
			TKEY	Initial key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
			TLA	Language(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
			TLAN	Language(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3386
			TLE	Length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3387
			TLEN	Length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3388
			TMCL	Musician credits list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3389
			TMED	Media type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3390
			TMOO	Mood
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
			TMT	Media type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3392
			TOA	Original artist(s)/performer(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3393
			TOAL	Original album/movie/show title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3394
			TOF	Original filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3395
			TOFN	Original filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3396
			TOL	Original Lyricist(s)/text writer(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3397
			TOLY	Original lyricist(s)/text writer(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3398
			TOPE	Original artist(s)/performer(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3399
			TOR	Original release year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3400
			TORY	Original release year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3401
			TOT	Original album/Movie/Show title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3402
			TOWN	File owner/licensee
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
			TP1	Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
			TP2	Band/Orchestra/Accompaniment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3405
			TP3	Conductor/Performer refinement
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3406
			TP4	Interpreted, remixed, or otherwise modified by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3407
			TPA	Part of a set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3408
			TPB	Publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
			TPE1	Lead performer(s)/Soloist(s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
			TPE2	Band/orchestra/accompaniment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
			TPE3	Conductor/performer refinement
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
			TPE4	Interpreted, remixed, or otherwise modified by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
			TPOS	Part of a set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
			TPRO	Produced notice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
			TPUB	Publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
			TRC	ISRC (International Standard Recording Code)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
			TRCK	Track number/Position in set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3418
			TRD	Recording dates
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
			TRDA	Recording dates
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
			TRK	Track number/Position in set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
			TRSN	Internet radio station name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3422
			TRSO	Internet radio station owner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3423
			TS2	Album-Artist sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3424
			TSA	Album sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3425
			TSC	Composer sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3426
			TSI	Size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3427
			TSIZ	Size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3428
			TSO2	Album-Artist sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3429
			TSOA	Album sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3430
			TSOC	Composer sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
			TSOP	Performer sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3432
			TSOT	Title sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
			TSP	Performer sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
			TSRC	ISRC (international standard recording code)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
			TSS	Software/hardware and settings used for encoding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
			TSSE	Software/Hardware and settings used for encoding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
			TSST	Set subtitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
			TST	Title sort order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3439
			TT1	Content group description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
			TT2	Title/Songname/Content description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3441
			TT3	Subtitle/Description refinement
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3442
			TXT	Lyricist/text writer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3443
			TXX	User defined text information frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
			TXXX	User defined text information frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3445
			TYE	Year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3446
			TYER	Year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3447
			UFI	Unique file identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3448
			UFID	Unique file identifier
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3449
			ULT	Unsynchronised lyric/text transcription
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
			USER	Terms of use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
			USLT	Unsynchronised lyric/text transcription
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
			WAF	Official audio file webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
			WAR	Official artist/performer webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
			WAS	Official audio source webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
			WCM	Commercial information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
			WCOM	Commercial information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
			WCOP	Copyright/Legal information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
			WCP	Copyright/Legal information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
			WOAF	Official audio file webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3460
			WOAR	Official artist/performer webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3461
			WOAS	Official audio source webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3462
			WORS	Official Internet radio station homepage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3463
			WPAY	Payment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
			WPB	Publishers official webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
			WPUB	Publishers official webpage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
			WXX	User defined URL link frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
			WXXX	User defined URL link frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
			TFEA	Featured Artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
			TSTU	Recording Studio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
			rgad	Replay Gain Adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3474
		return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_long');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
		// Last three:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
		// from Helium2 [www.helium2.com]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
		// from http://privatewww.essex.ac.uk/~djmrob/replaygain/file_format_id3v2.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3481
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3482
	 * @param string $framename
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3483
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3484
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3485
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
	public static function FrameNameShortLookup($framename) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
			AENC	audio_encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
			APIC	attached_picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
			ASPI	audio_seek_point_index
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3495
			BUF	recommended_buffer_size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3496
			CNT	play_counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
			COM	comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3498
			COMM	comment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
			COMR	commercial_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
			CRA	audio_encryption
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
			CRM	encrypted_meta_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
			ENCR	encryption_method_registration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
			EQU	equalisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
			EQU2	equalisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
			EQUA	equalisation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
			ETC	event_timing_codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
			ETCO	event_timing_codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
			GEO	general_encapsulated_object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
			GEOB	general_encapsulated_object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
			GRID	group_identification_registration
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
			IPL	involved_people_list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
			IPLS	involved_people_list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
			LINK	linked_information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
			LNK	linked_information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
			MCDI	music_cd_identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
			MCI	music_cd_identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
			MLL	mpeg_location_lookup_table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
			MLLT	mpeg_location_lookup_table
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3519
			OWNE	ownership_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
			PCNT	play_counter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
			PIC	attached_picture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
			POP	popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
			POPM	popularimeter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
			POSS	position_synchronisation_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
			PRIV	private_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
			RBUF	recommended_buffer_size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
			REV	reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
			RVA	relative_volume_adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
			RVA2	relative_volume_adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
			RVAD	relative_volume_adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
			RVRB	reverb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
			SEEK	seek_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
			SIGN	signature_frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
			SLT	synchronised_lyric
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
			STC	synced_tempo_codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
			SYLT	synchronised_lyric
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
			SYTC	synchronised_tempo_codes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
			TAL	album
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
			TALB	album
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
			TBP	bpm
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
			TBPM	bpm
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
			TCM	composer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
			TCMP	part_of_a_compilation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
			TCO	genre
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
			TCOM	composer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
			TCON	genre
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
			TCOP	copyright_message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
			TCP	part_of_a_compilation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
			TCR	copyright_message
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
			TDA	date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
			TDAT	date
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
			TDEN	encoding_time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3553
			TDLY	playlist_delay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3554
			TDOR	original_release_time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
			TDRC	recording_time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
			TDRL	release_time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
			TDTG	tagging_time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
			TDY	playlist_delay
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3559
			TEN	encoded_by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3560
			TENC	encoded_by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
			TEXT	lyricist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
			TFLT	file_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
			TFT	file_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
			TIM	time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3565
			TIME	time
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3566
			TIPL	involved_people_list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3567
			TIT1	content_group_description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
			TIT2	title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
			TIT3	subtitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
			TKE	initial_key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
			TKEY	initial_key
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
			TLA	language
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
			TLAN	language
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
			TLE	length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
			TLEN	length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
			TMCL	musician_credits_list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
			TMED	media_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3578
			TMOO	mood
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3579
			TMT	media_type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3580
			TOA	original_artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3581
			TOAL	original_album
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3582
			TOF	original_filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3583
			TOFN	original_filename
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3584
			TOL	original_lyricist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3585
			TOLY	original_lyricist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
			TOPE	original_artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
			TOR	original_year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
			TORY	original_year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3589
			TOT	original_album
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
			TOWN	file_owner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
			TP1	artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3592
			TP2	band
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3593
			TP3	conductor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3594
			TP4	remixer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
			TPA	part_of_a_set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
			TPB	publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3597
			TPE1	artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3598
			TPE2	band
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3599
			TPE3	conductor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3600
			TPE4	remixer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
			TPOS	part_of_a_set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
			TPRO	produced_notice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3603
			TPUB	publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
			TRC	isrc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3605
			TRCK	track_number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3606
			TRD	recording_dates
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3607
			TRDA	recording_dates
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3608
			TRK	track_number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
			TRSN	internet_radio_station_name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
			TRSO	internet_radio_station_owner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3611
			TS2	album_artist_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3612
			TSA	album_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3613
			TSC	composer_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
			TSI	size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3615
			TSIZ	size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
			TSO2	album_artist_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3617
			TSOA	album_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3618
			TSOC	composer_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3619
			TSOP	performer_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
			TSOT	title_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
			TSP	performer_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
			TSRC	isrc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
			TSS	encoder_settings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3624
			TSSE	encoder_settings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3625
			TSST	set_subtitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3626
			TST	title_sort_order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3627
			TT1	content_group_description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3628
			TT2	title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3629
			TT3	subtitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3630
			TXT	lyricist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3631
			TXX	text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
			TXXX	text
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
			TYE	year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3634
			TYER	year
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
			UFI	unique_file_identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3636
			UFID	unique_file_identifier
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3637
			ULT	unsynchronised_lyric
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3638
			USER	terms_of_use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3639
			USLT	unsynchronised_lyric
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
			WAF	url_file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
			WAR	url_artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
			WAS	url_source
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
			WCM	commercial_information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
			WCOM	commercial_information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
			WCOP	copyright
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
			WCP	copyright
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3647
			WOAF	url_file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
			WOAR	url_artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3649
			WOAS	url_source
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3650
			WORS	url_station
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3651
			WPAY	url_payment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3652
			WPB	url_publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3653
			WPUB	url_publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
			WXX	url_user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
			WXXX	url_user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
			TFEA	featured_artist
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
			TSTU	recording_studio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
			rgad	replay_gain_adjustment
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
		return getid3_lib::EmbeddedLookup($framename, $begin, __LINE__, __FILE__, 'id3v2-framename_short');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3665
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3666
	 * @param string $encoding
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3667
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3668
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3669
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
	public static function TextEncodingTerminatorLookup($encoding) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
		// http://www.id3.org/id3v2.4.0-structure.txt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3672
		// Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
		static $TextEncodingTerminatorLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3674
			0   => "\x00",     // $00  ISO-8859-1. Terminated with $00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
			1   => "\x00\x00", // $01  UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
			2   => "\x00\x00", // $02  UTF-16BE encoded Unicode without BOM. Terminated with $00 00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
			3   => "\x00",     // $03  UTF-8 encoded Unicode. Terminated with $00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
			255 => "\x00\x00"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
		);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3680
		return (isset($TextEncodingTerminatorLookup[$encoding]) ? $TextEncodingTerminatorLookup[$encoding] : "\x00");
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3681
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3683
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3684
	 * @param int $encoding
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3685
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3686
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3687
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
	public static function TextEncodingNameLookup($encoding) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
		// http://www.id3.org/id3v2.4.0-structure.txt
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3690
		// Frames that allow different types of text encoding contains a text encoding description byte. Possible encodings:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
		static $TextEncodingNameLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
			0   => 'ISO-8859-1', // $00  ISO-8859-1. Terminated with $00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
			1   => 'UTF-16',     // $01  UTF-16 encoded Unicode with BOM. All strings in the same frame SHALL have the same byteorder. Terminated with $00 00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
			2   => 'UTF-16BE',   // $02  UTF-16BE encoded Unicode without BOM. Terminated with $00 00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
			3   => 'UTF-8',      // $03  UTF-8 encoded Unicode. Terminated with $00.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3696
			255 => 'UTF-16BE'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3697
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3698
		return (isset($TextEncodingNameLookup[$encoding]) ? $TextEncodingNameLookup[$encoding] : 'ISO-8859-1');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3699
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3701
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3702
	 * @param string $string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3703
	 * @param string $terminator
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3704
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3705
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3706
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3707
	public static function RemoveStringTerminator($string, $terminator) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3708
		// Null terminator at end of comment string is somewhat ambiguous in the specification, may or may not be implemented by various taggers. Remove terminator only if present.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3709
		// https://github.com/JamesHeinrich/getID3/issues/121
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3710
		// https://community.mp3tag.de/t/x-trailing-nulls-in-id3v2-comments/19227
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3711
		if (substr($string, -strlen($terminator), strlen($terminator)) === $terminator) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3712
			$string = substr($string, 0, -strlen($terminator));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3713
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3714
		return $string;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3715
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3716
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3717
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3718
	 * @param string $string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3719
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3720
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3721
	 */
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3722
	public static function MakeUTF16emptyStringEmpty($string) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3723
		if (in_array($string, array("\x00", "\x00\x00", "\xFF\xFE", "\xFE\xFF"))) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3724
			// if string only contains a BOM or terminator then make it actually an empty string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3725
			$string = '';
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3726
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3727
		return $string;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3728
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3729
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3730
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3731
	 * @param string $framename
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3732
	 * @param int    $id3v2majorversion
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3733
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3734
	 * @return bool|int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3735
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
	public static function IsValidID3v2FrameName($framename, $id3v2majorversion) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
		switch ($id3v2majorversion) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
			case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
				return preg_match('#[A-Z][A-Z0-9]{2}#', $framename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
			case 3:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
			case 4:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
				return preg_match('#[A-Z][A-Z0-9]{3}#', $framename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3748
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3749
	 * @param string $numberstring
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3750
	 * @param bool   $allowdecimal
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3751
	 * @param bool   $allownegative
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3752
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3753
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3754
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
	public static function IsANumber($numberstring, $allowdecimal=false, $allownegative=false) {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3756
		$pattern  = '#^';
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3757
		$pattern .= ($allownegative ? '\\-?' : '');
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3758
		$pattern .= '[0-9]+';
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3759
		$pattern .= ($allowdecimal  ? '(\\.[0-9]+)?' : '');
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3760
		$pattern .= '$#';
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3761
		return preg_match($pattern, $numberstring);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3764
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3765
	 * @param string $datestamp
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3766
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3767
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3768
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
	public static function IsValidDateStampString($datestamp) {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  3770
		if (!preg_match('#^[12][0-9]{3}[01][0-9][0123][0-9]$#', $datestamp)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
		$year  = substr($datestamp, 0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
		$month = substr($datestamp, 4, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
		$day   = substr($datestamp, 6, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
		if (($year == 0) || ($month == 0) || ($day == 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
		if ($month > 12) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
		if ($day > 31) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
		if (($day > 30) && (($month == 4) || ($month == 6) || ($month == 9) || ($month == 11))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
		if (($day > 29) && ($month == 2)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3794
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3795
	 * @param int $majorversion
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3796
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3797
	 * @return int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3798
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
	public static function ID3v2HeaderLength($majorversion) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
		return (($majorversion == 2) ? 6 : 10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3803
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3804
	 * @param string $frame_name
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3805
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3806
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3807
	 */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3808
	public static function ID3v22iTunesBrokenFrameName($frame_name) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3809
		// iTunes (multiple versions) has been known to write ID3v2.3 style frames
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3810
		// but use ID3v2.2 frame names, right-padded using either [space] or [null]
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3811
		// to make them fit in the 4-byte frame name space of the ID3v2.3 frame.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3812
		// This function will detect and translate the corrupt frame name into ID3v2.3 standard.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3813
		static $ID3v22_iTunes_BrokenFrames = array(
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3814
			'BUF' => 'RBUF', // Recommended buffer size
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3815
			'CNT' => 'PCNT', // Play counter
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3816
			'COM' => 'COMM', // Comments
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3817
			'CRA' => 'AENC', // Audio encryption
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3818
			'EQU' => 'EQUA', // Equalisation
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3819
			'ETC' => 'ETCO', // Event timing codes
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3820
			'GEO' => 'GEOB', // General encapsulated object
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3821
			'IPL' => 'IPLS', // Involved people list
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3822
			'LNK' => 'LINK', // Linked information
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3823
			'MCI' => 'MCDI', // Music CD identifier
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3824
			'MLL' => 'MLLT', // MPEG location lookup table
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3825
			'PIC' => 'APIC', // Attached picture
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3826
			'POP' => 'POPM', // Popularimeter
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3827
			'REV' => 'RVRB', // Reverb
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3828
			'RVA' => 'RVAD', // Relative volume adjustment
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3829
			'SLT' => 'SYLT', // Synchronised lyric/text
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3830
			'STC' => 'SYTC', // Synchronised tempo codes
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3831
			'TAL' => 'TALB', // Album/Movie/Show title
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3832
			'TBP' => 'TBPM', // BPM (beats per minute)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3833
			'TCM' => 'TCOM', // Composer
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3834
			'TCO' => 'TCON', // Content type
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3835
			'TCP' => 'TCMP', // Part of a compilation
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3836
			'TCR' => 'TCOP', // Copyright message
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3837
			'TDA' => 'TDAT', // Date
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3838
			'TDY' => 'TDLY', // Playlist delay
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3839
			'TEN' => 'TENC', // Encoded by
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3840
			'TFT' => 'TFLT', // File type
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3841
			'TIM' => 'TIME', // Time
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3842
			'TKE' => 'TKEY', // Initial key
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3843
			'TLA' => 'TLAN', // Language(s)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3844
			'TLE' => 'TLEN', // Length
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3845
			'TMT' => 'TMED', // Media type
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3846
			'TOA' => 'TOPE', // Original artist(s)/performer(s)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3847
			'TOF' => 'TOFN', // Original filename
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3848
			'TOL' => 'TOLY', // Original lyricist(s)/text writer(s)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3849
			'TOR' => 'TORY', // Original release year
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3850
			'TOT' => 'TOAL', // Original album/movie/show title
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3851
			'TP1' => 'TPE1', // Lead performer(s)/Soloist(s)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3852
			'TP2' => 'TPE2', // Band/orchestra/accompaniment
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3853
			'TP3' => 'TPE3', // Conductor/performer refinement
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3854
			'TP4' => 'TPE4', // Interpreted, remixed, or otherwise modified by
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3855
			'TPA' => 'TPOS', // Part of a set
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3856
			'TPB' => 'TPUB', // Publisher
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3857
			'TRC' => 'TSRC', // ISRC (international standard recording code)
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3858
			'TRD' => 'TRDA', // Recording dates
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3859
			'TRK' => 'TRCK', // Track number/Position in set
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3860
			'TS2' => 'TSO2', // Album-Artist sort order
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3861
			'TSA' => 'TSOA', // Album sort order
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3862
			'TSC' => 'TSOC', // Composer sort order
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3863
			'TSI' => 'TSIZ', // Size
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3864
			'TSP' => 'TSOP', // Performer sort order
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3865
			'TSS' => 'TSSE', // Software/Hardware and settings used for encoding
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3866
			'TST' => 'TSOT', // Title sort order
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3867
			'TT1' => 'TIT1', // Content group description
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3868
			'TT2' => 'TIT2', // Title/songname/content description
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3869
			'TT3' => 'TIT3', // Subtitle/Description refinement
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3870
			'TXT' => 'TEXT', // Lyricist/Text writer
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3871
			'TXX' => 'TXXX', // User defined text information frame
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3872
			'TYE' => 'TYER', // Year
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3873
			'UFI' => 'UFID', // Unique file identifier
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3874
			'ULT' => 'USLT', // Unsynchronised lyric/text transcription
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3875
			'WAF' => 'WOAF', // Official audio file webpage
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3876
			'WAR' => 'WOAR', // Official artist/performer webpage
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3877
			'WAS' => 'WOAS', // Official audio source webpage
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3878
			'WCM' => 'WCOM', // Commercial information
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3879
			'WCP' => 'WCOP', // Copyright/Legal information
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3880
			'WPB' => 'WPUB', // Publishers official webpage
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3881
			'WXX' => 'WXXX', // User defined URL link frame
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3882
		);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3883
		if (strlen($frame_name) == 4) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3884
			if ((substr($frame_name, 3, 1) == ' ') || (substr($frame_name, 3, 1) == "\x00")) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3885
				if (isset($ID3v22_iTunes_BrokenFrames[substr($frame_name, 0, 3)])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3886
					return $ID3v22_iTunes_BrokenFrames[substr($frame_name, 0, 3)];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3887
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3888
			}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3889
		}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3890
		return false;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3891
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  3892
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3893
}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  3894