: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
public function QuicktimeAudioCodecLookup($codecid) {
static $QuicktimeAudioCodecLookup = array();
if (empty($QuicktimeAudioCodecLookup)) {
$QuicktimeAudioCodecLookup['.mp3'] = 'Fraunhofer MPEG Layer-III alias';
$QuicktimeAudioCodecLookup['aac '] = 'ISO/IEC 14496-3 AAC';
$QuicktimeAudioCodecLookup['agsm'] = 'Apple GSM 10:1';
$QuicktimeAudioCodecLookup['alac'] = 'Apple Lossless Audio Codec';
$QuicktimeAudioCodecLookup['alaw'] = 'A-law 2:1';
$QuicktimeAudioCodecLookup['conv'] = 'Sample Format';
$QuicktimeAudioCodecLookup['dvca'] = 'DV';
$QuicktimeAudioCodecLookup['dvi '] = 'DV 4:1';
$QuicktimeAudioCodecLookup['eqal'] = 'Frequency Equalizer';
$QuicktimeAudioCodecLookup['fl32'] = '32-bit Floating Point';
$QuicktimeAudioCodecLookup['fl64'] = '64-bit Floating Point';
$QuicktimeAudioCodecLookup['ima4'] = 'Interactive Multimedia Association 4:1';
$QuicktimeAudioCodecLookup['in24'] = '24-bit Integer';
$QuicktimeAudioCodecLookup['in32'] = '32-bit Integer';
$QuicktimeAudioCodecLookup['lpc '] = 'LPC 23:1';
$QuicktimeAudioCodecLookup['MAC3'] = 'Macintosh Audio Compression/Expansion (MACE) 3:1';
$QuicktimeAudioCodecLookup['MAC6'] = 'Macintosh Audio Compression/Expansion (MACE) 6:1';
$QuicktimeAudioCodecLookup['mixb'] = '8-bit Mixer';
$QuicktimeAudioCodecLookup['mixw'] = '16-bit Mixer';
$QuicktimeAudioCodecLookup['mp4a'] = 'ISO/IEC 14496-3 AAC';
$QuicktimeAudioCodecLookup['MS'."\x00\x02"] = 'Microsoft ADPCM';
$QuicktimeAudioCodecLookup['MS'."\x00\x11"] = 'DV IMA';
$QuicktimeAudioCodecLookup['MS'."\x00\x55"] = 'Fraunhofer MPEG Layer III';
$QuicktimeAudioCodecLookup['NONE'] = 'No Encoding';
$QuicktimeAudioCodecLookup['Qclp'] = 'Qualcomm PureVoice';
$QuicktimeAudioCodecLookup['QDM2'] = 'QDesign Music 2';
$QuicktimeAudioCodecLookup['QDMC'] = 'QDesign Music 1';
$QuicktimeAudioCodecLookup['ratb'] = '8-bit Rate';
$QuicktimeAudioCodecLookup['ratw'] = '16-bit Rate';
$QuicktimeAudioCodecLookup['raw '] = 'raw PCM';
$QuicktimeAudioCodecLookup['sour'] = 'Sound Source';
$QuicktimeAudioCodecLookup['sowt'] = 'signed/two\'s complement (Little Endian)';
$QuicktimeAudioCodecLookup['str1'] = 'Iomega MPEG layer II';
$QuicktimeAudioCodecLookup['str2'] = 'Iomega MPEG *layer II';
$QuicktimeAudioCodecLookup['str3'] = 'Iomega MPEG **layer II';
$QuicktimeAudioCodecLookup['str4'] = 'Iomega MPEG ***layer II';
$QuicktimeAudioCodecLookup['twos'] = 'signed/two\'s complement (Big Endian)';
$QuicktimeAudioCodecLookup['ulaw'] = 'mu-law 2:1';
return (isset($QuicktimeAudioCodecLookup[$codecid]) ? $QuicktimeAudioCodecLookup[$codecid] : '');
* @param string $compressionid
public function QuicktimeDCOMLookup($compressionid) {
static $QuicktimeDCOMLookup = array();
if (empty($QuicktimeDCOMLookup)) {
$QuicktimeDCOMLookup['zlib'] = 'ZLib Deflate';
$QuicktimeDCOMLookup['adec'] = 'Apple Compression';
return (isset($QuicktimeDCOMLookup[$compressionid]) ? $QuicktimeDCOMLookup[$compressionid] : '');
* @param int $colordepthid
public function QuicktimeColorNameLookup($colordepthid) {
static $QuicktimeColorNameLookup = array();
if (empty($QuicktimeColorNameLookup)) {
$QuicktimeColorNameLookup[1] = '2-color (monochrome)';
$QuicktimeColorNameLookup[2] = '4-color';
$QuicktimeColorNameLookup[4] = '16-color';
$QuicktimeColorNameLookup[8] = '256-color';
$QuicktimeColorNameLookup[16] = 'thousands (16-bit color)';
$QuicktimeColorNameLookup[24] = 'millions (24-bit color)';
$QuicktimeColorNameLookup[32] = 'millions+ (32-bit color)';
$QuicktimeColorNameLookup[33] = 'black & white';
$QuicktimeColorNameLookup[34] = '4-gray';
$QuicktimeColorNameLookup[36] = '16-gray';
$QuicktimeColorNameLookup[40] = '256-gray';
return (isset($QuicktimeColorNameLookup[$colordepthid]) ? $QuicktimeColorNameLookup[$colordepthid] : 'invalid');
public function QuicktimeSTIKLookup($stik) {
static $QuicktimeSTIKLookup = array();
if (empty($QuicktimeSTIKLookup)) {
$QuicktimeSTIKLookup[0] = 'Movie';
$QuicktimeSTIKLookup[1] = 'Normal';
$QuicktimeSTIKLookup[2] = 'Audiobook';
$QuicktimeSTIKLookup[5] = 'Whacked Bookmark';
$QuicktimeSTIKLookup[6] = 'Music Video';
$QuicktimeSTIKLookup[9] = 'Short Film';
$QuicktimeSTIKLookup[10] = 'TV Show';
$QuicktimeSTIKLookup[11] = 'Booklet';
$QuicktimeSTIKLookup[14] = 'Ringtone';
$QuicktimeSTIKLookup[21] = 'Podcast';
return (isset($QuicktimeSTIKLookup[$stik]) ? $QuicktimeSTIKLookup[$stik] : 'invalid');
* @param int $audio_profile_id
public function QuicktimeIODSaudioProfileName($audio_profile_id) {
static $QuicktimeIODSaudioProfileNameLookup = array();
if (empty($QuicktimeIODSaudioProfileNameLookup)) {
$QuicktimeIODSaudioProfileNameLookup = array(
0x00 => 'ISO Reserved (0x00)',
0x01 => 'Main Audio Profile @ Level 1',
0x02 => 'Main Audio Profile @ Level 2',
0x03 => 'Main Audio Profile @ Level 3',
0x04 => 'Main Audio Profile @ Level 4',
0x05 => 'Scalable Audio Profile @ Level 1',
0x06 => 'Scalable Audio Profile @ Level 2',
0x07 => 'Scalable Audio Profile @ Level 3',
0x08 => 'Scalable Audio Profile @ Level 4',
0x09 => 'Speech Audio Profile @ Level 1',
0x0A => 'Speech Audio Profile @ Level 2',
0x0B => 'Synthetic Audio Profile @ Level 1',
0x0C => 'Synthetic Audio Profile @ Level 2',
0x0D => 'Synthetic Audio Profile @ Level 3',
0x0E => 'High Quality Audio Profile @ Level 1',
0x0F => 'High Quality Audio Profile @ Level 2',
0x10 => 'High Quality Audio Profile @ Level 3',
0x11 => 'High Quality Audio Profile @ Level 4',
0x12 => 'High Quality Audio Profile @ Level 5',
0x13 => 'High Quality Audio Profile @ Level 6',
0x14 => 'High Quality Audio Profile @ Level 7',
0x15 => 'High Quality Audio Profile @ Level 8',
0x16 => 'Low Delay Audio Profile @ Level 1',
0x17 => 'Low Delay Audio Profile @ Level 2',
0x18 => 'Low Delay Audio Profile @ Level 3',
0x19 => 'Low Delay Audio Profile @ Level 4',
0x1A => 'Low Delay Audio Profile @ Level 5',
0x1B => 'Low Delay Audio Profile @ Level 6',
0x1C => 'Low Delay Audio Profile @ Level 7',
0x1D => 'Low Delay Audio Profile @ Level 8',
0x1E => 'Natural Audio Profile @ Level 1',
0x1F => 'Natural Audio Profile @ Level 2',
0x20 => 'Natural Audio Profile @ Level 3',
0x21 => 'Natural Audio Profile @ Level 4',
0x22 => 'Mobile Audio Internetworking Profile @ Level 1',
0x23 => 'Mobile Audio Internetworking Profile @ Level 2',
0x24 => 'Mobile Audio Internetworking Profile @ Level 3',
0x25 => 'Mobile Audio Internetworking Profile @ Level 4',
0x26 => 'Mobile Audio Internetworking Profile @ Level 5',
0x27 => 'Mobile Audio Internetworking Profile @ Level 6',
0x28 => 'AAC Profile @ Level 1',
0x29 => 'AAC Profile @ Level 2',
0x2A => 'AAC Profile @ Level 4',
0x2B => 'AAC Profile @ Level 5',
0x2C => 'High Efficiency AAC Profile @ Level 2',
0x2D => 'High Efficiency AAC Profile @ Level 3',
0x2E => 'High Efficiency AAC Profile @ Level 4',
0x2F => 'High Efficiency AAC Profile @ Level 5',
0xFE => 'Not part of MPEG-4 audio profiles',
0xFF => 'No audio capability required',
return (isset($QuicktimeIODSaudioProfileNameLookup[$audio_profile_id]) ? $QuicktimeIODSaudioProfileNameLookup[$audio_profile_id] : 'ISO Reserved / User Private');
* @param int $video_profile_id
public function QuicktimeIODSvideoProfileName($video_profile_id) {
static $QuicktimeIODSvideoProfileNameLookup = array();
if (empty($QuicktimeIODSvideoProfileNameLookup)) {
$QuicktimeIODSvideoProfileNameLookup = array(
0x00 => 'Reserved (0x00) Profile',
0x01 => 'Simple Profile @ Level 1',
0x02 => 'Simple Profile @ Level 2',
0x03 => 'Simple Profile @ Level 3',
0x08 => 'Simple Profile @ Level 0',
0x10 => 'Simple Scalable Profile @ Level 0',
0x11 => 'Simple Scalable Profile @ Level 1',
0x12 => 'Simple Scalable Profile @ Level 2',
0x15 => 'AVC/H264 Profile',
0x21 => 'Core Profile @ Level 1',
0x22 => 'Core Profile @ Level 2',
0x32 => 'Main Profile @ Level 2',
0x33 => 'Main Profile @ Level 3',
0x34 => 'Main Profile @ Level 4',
0x42 => 'N-bit Profile @ Level 2',
0x51 => 'Scalable Texture Profile @ Level 1',
0x61 => 'Simple Face Animation Profile @ Level 1',
0x62 => 'Simple Face Animation Profile @ Level 2',
0x63 => 'Simple FBA Profile @ Level 1',
0x64 => 'Simple FBA Profile @ Level 2',
0x71 => 'Basic Animated Texture Profile @ Level 1',
0x72 => 'Basic Animated Texture Profile @ Level 2',
0x81 => 'Hybrid Profile @ Level 1',
0x82 => 'Hybrid Profile @ Level 2',
0x91 => 'Advanced Real Time Simple Profile @ Level 1',
0x92 => 'Advanced Real Time Simple Profile @ Level 2',
0x93 => 'Advanced Real Time Simple Profile @ Level 3',
0x94 => 'Advanced Real Time Simple Profile @ Level 4',
0xA1 => 'Core Scalable Profile @ Level1',
0xA2 => 'Core Scalable Profile @ Level2',
0xA3 => 'Core Scalable Profile @ Level3',
0xB1 => 'Advanced Coding Efficiency Profile @ Level 1',
0xB2 => 'Advanced Coding Efficiency Profile @ Level 2',
0xB3 => 'Advanced Coding Efficiency Profile @ Level 3',
0xB4 => 'Advanced Coding Efficiency Profile @ Level 4',
0xC1 => 'Advanced Core Profile @ Level 1',
0xC2 => 'Advanced Core Profile @ Level 2',
0xD1 => 'Advanced Scalable Texture @ Level1',
0xD2 => 'Advanced Scalable Texture @ Level2',
0xE1 => 'Simple Studio Profile @ Level 1',
0xE2 => 'Simple Studio Profile @ Level 2',
0xE3 => 'Simple Studio Profile @ Level 3',
0xE4 => 'Simple Studio Profile @ Level 4',
0xE5 => 'Core Studio Profile @ Level 1',
0xE6 => 'Core Studio Profile @ Level 2',
0xE7 => 'Core Studio Profile @ Level 3',
0xE8 => 'Core Studio Profile @ Level 4',
0xF0 => 'Advanced Simple Profile @ Level 0',
0xF1 => 'Advanced Simple Profile @ Level 1',
0xF2 => 'Advanced Simple Profile @ Level 2',
0xF3 => 'Advanced Simple Profile @ Level 3',
0xF4 => 'Advanced Simple Profile @ Level 4',
0xF5 => 'Advanced Simple Profile @ Level 5',
0xF7 => 'Advanced Simple Profile @ Level 3b',
0xF8 => 'Fine Granularity Scalable Profile @ Level 0',
0xF9 => 'Fine Granularity Scalable Profile @ Level 1',
0xFA => 'Fine Granularity Scalable Profile @ Level 2',
0xFB => 'Fine Granularity Scalable Profile @ Level 3',
0xFC => 'Fine Granularity Scalable Profile @ Level 4',
0xFD => 'Fine Granularity Scalable Profile @ Level 5',
0xFE => 'Not part of MPEG-4 Visual profiles',
0xFF => 'No visual capability required',
return (isset($QuicktimeIODSvideoProfileNameLookup[$video_profile_id]) ? $QuicktimeIODSvideoProfileNameLookup[$video_profile_id] : 'ISO Reserved Profile');
public function QuicktimeContentRatingLookup($rtng) {
static $QuicktimeContentRatingLookup = array();
if (empty($QuicktimeContentRatingLookup)) {
$QuicktimeContentRatingLookup[0] = 'None';
$QuicktimeContentRatingLookup[1] = 'Explicit';
$QuicktimeContentRatingLookup[2] = 'Clean';
$QuicktimeContentRatingLookup[4] = 'Explicit (old)';
return (isset($QuicktimeContentRatingLookup[$rtng]) ? $QuicktimeContentRatingLookup[$rtng] : 'invalid');
public function QuicktimeStoreAccountTypeLookup($akid) {
static $QuicktimeStoreAccountTypeLookup = array();
if (empty($QuicktimeStoreAccountTypeLookup)) {
$QuicktimeStoreAccountTypeLookup[0] = 'iTunes';
$QuicktimeStoreAccountTypeLookup[1] = 'AOL';
return (isset($QuicktimeStoreAccountTypeLookup[$akid]) ? $QuicktimeStoreAccountTypeLookup[$akid] : 'invalid');
public function QuicktimeStoreFrontCodeLookup($sfid) {
static $QuicktimeStoreFrontCodeLookup = array();
if (empty($QuicktimeStoreFrontCodeLookup)) {
$QuicktimeStoreFrontCodeLookup[143460] = 'Australia';
$QuicktimeStoreFrontCodeLookup[143445] = 'Austria';
$QuicktimeStoreFrontCodeLookup[143446] = 'Belgium';
$QuicktimeStoreFrontCodeLookup[143455] = 'Canada';
$QuicktimeStoreFrontCodeLookup[143458] = 'Denmark';
$QuicktimeStoreFrontCodeLookup[143447] = 'Finland';
$QuicktimeStoreFrontCodeLookup[143442] = 'France';
$QuicktimeStoreFrontCodeLookup[143443] = 'Germany';
$QuicktimeStoreFrontCodeLookup[143448] = 'Greece';
$QuicktimeStoreFrontCodeLookup[143449] = 'Ireland';
$QuicktimeStoreFrontCodeLookup[143450] = 'Italy';
$QuicktimeStoreFrontCodeLookup[143462] = 'Japan';
$QuicktimeStoreFrontCodeLookup[143451] = 'Luxembourg';
$QuicktimeStoreFrontCodeLookup[143452] = 'Netherlands';
$QuicktimeStoreFrontCodeLookup[143461] = 'New Zealand';
$QuicktimeStoreFrontCodeLookup[143457] = 'Norway';
$QuicktimeStoreFrontCodeLookup[143453] = 'Portugal';
$QuicktimeStoreFrontCodeLookup[143454] = 'Spain';
$QuicktimeStoreFrontCodeLookup[143456] = 'Sweden';
$QuicktimeStoreFrontCodeLookup[143459] = 'Switzerland';
$QuicktimeStoreFrontCodeLookup[143444] = 'United Kingdom';
$QuicktimeStoreFrontCodeLookup[143441] = 'United States';
return (isset($QuicktimeStoreFrontCodeLookup[$sfid]) ? $QuicktimeStoreFrontCodeLookup[$sfid] : 'invalid');
* @param string|array $data
public function CopyToAppropriateCommentsSection($keyname, $data, $boxname='') {
static $handyatomtranslatorarray = array();
if (empty($handyatomtranslatorarray)) {
// http://www.geocities.com/xhelmboyx/quicktime/formats/qtm-layout.txt
// http://www.geocities.com/xhelmboyx/quicktime/formats/mp4-layout.txt
// http://atomicparsley.sourceforge.net/mpeg-4files.html
// https://code.google.com/p/mp4v2/wiki/iTunesMetadata
$handyatomtranslatorarray["\xA9".'alb'] = 'album'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'ART'] = 'artist';
$handyatomtranslatorarray["\xA9".'art'] = 'artist'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'aut'] = 'author';
$handyatomtranslatorarray["\xA9".'cmt'] = 'comment'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'com'] = 'comment';
$handyatomtranslatorarray["\xA9".'cpy'] = 'copyright';
$handyatomtranslatorarray["\xA9".'day'] = 'creation_date'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'dir'] = 'director';
$handyatomtranslatorarray["\xA9".'ed1'] = 'edit1';
$handyatomtranslatorarray["\xA9".'ed2'] = 'edit2';
$handyatomtranslatorarray["\xA9".'ed3'] = 'edit3';
$handyatomtranslatorarray["\xA9".'ed4'] = 'edit4';
$handyatomtranslatorarray["\xA9".'ed5'] = 'edit5';
$handyatomtranslatorarray["\xA9".'ed6'] = 'edit6';
$handyatomtranslatorarray["\xA9".'ed7'] = 'edit7';
$handyatomtranslatorarray["\xA9".'ed8'] = 'edit8';
$handyatomtranslatorarray["\xA9".'ed9'] = 'edit9';
$handyatomtranslatorarray["\xA9".'enc'] = 'encoded_by';
$handyatomtranslatorarray["\xA9".'fmt'] = 'format';
$handyatomtranslatorarray["\xA9".'gen'] = 'genre'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'grp'] = 'grouping'; // iTunes 4.2
$handyatomtranslatorarray["\xA9".'hst'] = 'host_computer';
$handyatomtranslatorarray["\xA9".'inf'] = 'information';
$handyatomtranslatorarray["\xA9".'lyr'] = 'lyrics'; // iTunes 5.0
$handyatomtranslatorarray["\xA9".'mak'] = 'make';
$handyatomtranslatorarray["\xA9".'mod'] = 'model';
$handyatomtranslatorarray["\xA9".'nam'] = 'title'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'ope'] = 'composer';
$handyatomtranslatorarray["\xA9".'prd'] = 'producer';
$handyatomtranslatorarray["\xA9".'PRD'] = 'product';
$handyatomtranslatorarray["\xA9".'prf'] = 'performers';
$handyatomtranslatorarray["\xA9".'req'] = 'system_requirements';
$handyatomtranslatorarray["\xA9".'src'] = 'source_credit';
$handyatomtranslatorarray["\xA9".'swr'] = 'software';
$handyatomtranslatorarray["\xA9".'too'] = 'encoding_tool'; // iTunes 4.0
$handyatomtranslatorarray["\xA9".'trk'] = 'track_number';
$handyatomtranslatorarray["\xA9".'url'] = 'url';
$handyatomtranslatorarray["\xA9".'wrn'] = 'warning';
$handyatomtranslatorarray["\xA9".'wrt'] = 'composer';
$handyatomtranslatorarray['aART'] = 'album_artist';
$handyatomtranslatorarray['apID'] = 'purchase_account';
$handyatomtranslatorarray['catg'] = 'category'; // iTunes 4.9
$handyatomtranslatorarray['covr'] = 'picture'; // iTunes 4.0
$handyatomtranslatorarray['cpil'] = 'compilation'; // iTunes 4.0
$handyatomtranslatorarray['cprt'] = 'copyright'; // iTunes 4.0?
$handyatomtranslatorarray['desc'] = 'description'; // iTunes 5.0
$handyatomtranslatorarray['disk'] = 'disc_number'; // iTunes 4.0
$handyatomtranslatorarray['egid'] = 'episode_guid'; // iTunes 4.9
$handyatomtranslatorarray['gnre'] = 'genre'; // iTunes 4.0
$handyatomtranslatorarray['hdvd'] = 'hd_video'; // iTunes 4.0
$handyatomtranslatorarray['ldes'] = 'description_long'; //
$handyatomtranslatorarray['keyw'] = 'keyword'; // iTunes 4.9
$handyatomtranslatorarray['pcst'] = 'podcast'; // iTunes 4.9
$handyatomtranslatorarray['pgap'] = 'gapless_playback'; // iTunes 7.0
$handyatomtranslatorarray['purd'] = 'purchase_date'; // iTunes 6.0.2
$handyatomtranslatorarray['purl'] = 'podcast_url'; // iTunes 4.9
$handyatomtranslatorarray['rtng'] = 'rating'; // iTunes 4.0
$handyatomtranslatorarray['soaa'] = 'sort_album_artist'; //
$handyatomtranslatorarray['soal'] = 'sort_album'; //
$handyatomtranslatorarray['soar'] = 'sort_artist'; //
$handyatomtranslatorarray['soco'] = 'sort_composer'; //
$handyatomtranslatorarray['sonm'] = 'sort_title'; //
$handyatomtranslatorarray['sosn'] = 'sort_show'; //
$handyatomtranslatorarray['stik'] = 'stik'; // iTunes 4.9
$handyatomtranslatorarray['tmpo'] = 'bpm'; // iTunes 4.0
$handyatomtranslatorarray['trkn'] = 'track_number'; // iTunes 4.0
$handyatomtranslatorarray['tven'] = 'tv_episode_id'; //
$handyatomtranslatorarray['tves'] = 'tv_episode'; // iTunes 6.0
$handyatomtranslatorarray['tvnn'] = 'tv_network_name'; // iTunes 6.0
$handyatomtranslatorarray['tvsh'] = 'tv_show_name'; // iTunes 6.0
$handyatomtranslatorarray['tvsn'] = 'tv_season'; // iTunes 6.0
$handyatomtranslatorarray['iTunSMPB'] = 'iTunSMPB';
$handyatomtranslatorarray['iTunNORM'] = 'iTunNORM';
$handyatomtranslatorarray['Encoding Params'] = 'Encoding Params';
$handyatomtranslatorarray['replaygain_track_gain'] = 'replaygain_track_gain';
$handyatomtranslatorarray['replaygain_track_peak'] = 'replaygain_track_peak';
$handyatomtranslatorarray['replaygain_track_minmax'] = 'replaygain_track_minmax';
$handyatomtranslatorarray['MusicIP PUID'] = 'MusicIP PUID';
$handyatomtranslatorarray['MusicBrainz Artist Id'] = 'MusicBrainz Artist Id';
$handyatomtranslatorarray['MusicBrainz Album Id'] = 'MusicBrainz Album Id';
$handyatomtranslatorarray['MusicBrainz Album Artist Id'] = 'MusicBrainz Album Artist Id';
$handyatomtranslatorarray['MusicBrainz Track Id'] = 'MusicBrainz Track Id';
$handyatomtranslatorarray['MusicBrainz Disc Id'] = 'MusicBrainz Disc Id';
// http://age.hobba.nl/audio/tag_frame_reference.html
$handyatomtranslatorarray['PLAY_COUNTER'] = 'play_counter'; // Foobar2000 - https://www.getid3.org/phpBB3/viewtopic.php?t=1355
$handyatomtranslatorarray['MEDIATYPE'] = 'mediatype'; // Foobar2000 - https://www.getid3.org/phpBB3/viewtopic.php?t=1355
$info = &$this->getid3->info;
if ($boxname && ($boxname != $keyname)) {
$comment_key = (isset($handyatomtranslatorarray[$boxname]) ? $handyatomtranslatorarray[$boxname] : $boxname);
} elseif (isset($handyatomtranslatorarray[$keyname])) {
$comment_key = $handyatomtranslatorarray[$keyname];
if ($comment_key == 'picture') {
// already copied directly into [comments][picture] elsewhere, do not re-copy here
$gooddata = array($data);
if ($comment_key == 'genre') {
// some other taggers separate multiple genres with semicolon, e.g. "Heavy Metal;Thrash Metal;Metal"
$gooddata = explode(';', $data);
foreach ($gooddata as $data) {
if (!empty($info['quicktime']['comments'][$comment_key]) && in_array($data, $info['quicktime']['comments'][$comment_key], true)) {
// avoid duplicate copies of identical data
$info['quicktime']['comments'][$comment_key][] = $data;
public function LociString($lstring, &$count) {
// Loci strings are UTF-8 or UTF-16 and null (x00/x0000) terminated. UTF-16 has a BOM
// Also need to return the number of bytes the string occupied so additional fields can be extracted
if ($lstring[0] == "\x00") {
if (($len > 2) && ((($lstring[0] == "\xFE") && ($lstring[1] == "\xFF")) || (($lstring[0] == "\xFF") && ($lstring[1] == "\xFE")))) {
if (preg_match('/(.*)\x00/', $lstring, $lmatches)) {
$count = strlen($lmatches[1]) * 2 + 2; //account for 2 byte characters and trailing \x0000
return getid3_lib::iconv_fallback_utf16_utf8($lmatches[1]);
if (preg_match('/(.*)\x00/', $lstring, $lmatches)) {
$count = strlen($lmatches[1]) + 1; //account for trailing \x00
* @param string $nullterminatedstring
public function NoNullString($nullterminatedstring) {
// remove the single null terminator on null terminated strings
if (substr($nullterminatedstring, strlen($nullterminatedstring) - 1, 1) === "\x00") {
return substr($nullterminatedstring, 0, strlen($nullterminatedstring) - 1);
return $nullterminatedstring;
* @param string $pascalstring