From 1a1124d0d7deafaab2b51b21df15a0c0bf975d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Afonso?= Date: Sat, 9 Nov 2013 18:09:57 -0800 Subject: [PATCH 1/2] Add ArrayBuffer support to BinaryFile --- src/bufferedbinaryajax.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bufferedbinaryajax.js b/src/bufferedbinaryajax.js index 7c29f6c..95a327a 100644 --- a/src/bufferedbinaryajax.js +++ b/src/bufferedbinaryajax.js @@ -277,6 +277,15 @@ function BinaryFile(strData, iDataOffset, iDataLength) { this.getByteAt = function(iOffset) { return IEBinary_getByteAt(data, iOffset + dataOffset); }; + } else if (window.ArrayBuffer && strData instanceof ArrayBuffer) { + data = new Uint8Array(strData); + dataLength = iDataLength || data.length; + + this.getByteAt = function(iOffset) { + return data[iOffset + dataOffset]; + }; + } else { + throw new Error("Unknown data type: " + typeof strData); } // @aadsm this.getBytesAt = function(iOffset, iLength) { From 7ee6562e1053f4cf2fbc709bef6da75980dd7e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Afonso?= Date: Sat, 9 Nov 2013 18:11:09 -0800 Subject: [PATCH 2/2] Use readAsArrayBuffer instead of readAsBinaryString IE10 doesn't implement readAsBinaryString and it has been deprecated from the FileReader API so we need to use readAsArrayBuffer. --- dist/id3-minimized.js | 36 ++++++++++++++++++------------------ src/filereader.js | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/dist/id3-minimized.js b/dist/id3-minimized.js index fb767bd..53df71a 100644 --- a/dist/id3-minimized.js +++ b/dist/id3-minimized.js @@ -1,14 +1,14 @@ -var u=!0,x=null;function C(f,h,d){function e(b,r,k,d,a,e){var l=c();l?("undefined"===typeof e&&(e=u),r&&("undefined"!=typeof l.onload?l.onload=function(){"200"==l.status||"206"==l.status?(l.fileSize=a||l.getResponseHeader("Content-Length"),r(l)):k&&k();l=x}:l.onreadystatechange=function(){4==l.readyState&&("200"==l.status||"206"==l.status?(l.fileSize=a||l.getResponseHeader("Content-Length"),r(l)):k&&k(),l=x)}),l.open("GET",b,e),l.overrideMimeType&&l.overrideMimeType("text/plain; charset=x-user-defined"),d&&l.setRequestHeader("Range", -"bytes="+d[0]+"-"+d[1]),l.setRequestHeader("If-Modified-Since","Sat, 1 Jan 1970 00:00:00 GMT"),l.send(x)):k&&k()}function c(){var b=x;window.XMLHttpRequest?b=new XMLHttpRequest:window.ActiveXObject&&(b=new ActiveXObject("Microsoft.XMLHTTP"));return b}function a(b,r){var k=c();k&&(r&&("undefined"!=typeof k.onload?k.onload=function(){"200"==k.status&&r(this);k=x}:k.onreadystatechange=function(){4==k.readyState&&("200"==k.status&&r(this),k=x)}),k.open("HEAD",b,u),k.send(x))}function b(b,r){var k,a;function c(b){var g= -~~(b[0]/k)-a;b=~~(b[1]/k)+1+a;0>g&&(g=0);b>=blockTotal&&(b=blockTotal-1);return[g,b]}function h(a,c){for(;q[a[0]];)if(a[0]++,a[0]>a[1]){c&&c();return}for(;q[a[1]];)if(a[1]--,a[0]>a[1]){c&&c();return}var v=[a[0]*k,(a[1]+1)*k-1];e(b,function(b){parseInt(b.getResponseHeader("Content-Length"),10)==r&&(a[0]=0,a[1]=blockTotal-1,v[0]=0,v[1]=r-1);b={data:b.W||b.responseText,offset:v[0]};for(var g=a[0];g<=a[1];g++)q[g]=b;f+=v[1]-v[0]+1;c&&c()},d,v,l,!!c)}var l,f=0,m=new D("",0,r),q=[];k=k||2048;a="undefined"=== -typeof a?0:a;blockTotal=~~((r-1)/k)+1;for(var n in m)m.hasOwnProperty(n)&&"function"===typeof m[n]&&(this[n]=m[n]);this.a=function(b){var g;h(c([b,b]));g=q[~~(b/k)];if("string"==typeof g.data)return g.data.charCodeAt(b-g.offset)&255;if("unknown"==typeof g.data)return IEBinary_getByteAt(g.data,b-g.offset)};this.N=function(){return f};this.f=function(b,g){h(c(b),g)}}(function(){a(f,function(g){g=parseInt(g.getResponseHeader("Content-Length"),10)||-1;h(new b(f,g))})})()} -function D(f,h,d){var e=f,c=h||0,a=0;this.P=function(){return e};"string"==typeof f?(a=d||e.length,this.a=function(b){return e.charCodeAt(b+c)&255}):"unknown"==typeof f&&(a=d||IEBinary_getLength(e),this.a=function(b){return IEBinary_getByteAt(e,b+c)});this.n=function(b,g){for(var a=Array(g),c=0;ca&&(a+=65536);return a};this.S=function(b,g){var a=this.r(b,g);return 32767c&&(c+=4294967296);return c};this.R=function(b,a){var c=this.h(b,a);return 2147483647a&&(a+=16777216);return a};this.c=function(b,a){for(var c= -[],k=b,d=0;kl||224<=l?a[f]=String.fromCharCode(p):(l=(b[e+h]<<8)+b[e+c],e+=2,a[f]=String.fromCharCode(p,l))}b= -new String(a.join(""));b.g=e;break;case "utf-8":d=0;e=Math.min(e||b.length,b.length);239==b[0]&&(187==b[1]&&191==b[2])&&(d=3);h=[];for(c=0;da?h[c]=String.fromCharCode(a):194<=a&&224>a?(f=b[d++],h[c]=String.fromCharCode(((a&31)<<6)+(f&63))):224<=a&&240>a?(f=b[d++],p=b[d++],h[c]=String.fromCharCode(((a&255)<<12)+((f&63)<<6)+(p&63))):240<=a&&245>a&&(f=b[d++],p=b[d++],l=b[d++],a=((a&7)<<18)+((f&63)<<12)+((p&63)<<6)+(l&63)-65536,h[c]=String.fromCharCode((a>>10)+55296,(a&1023)+ -56320));b=new String(h.join(""));b.g=d;break;default:e=[];h=h||b.length;for(d=0;d\r\nFunction IEBinary_getByteAt(strBinary, iOffset)\r\n\tIEBinary_getByteAt = AscB(MidB(strBinary,iOffset+1,1))\r\nEnd Function\r\nFunction IEBinary_getLength(strBinary)\r\n\tIEBinary_getLength = LenB(strBinary)\r\nEnd Function\r\n\x3c/script>\r\n");(function(f){f.FileAPIReader=function(h){return function(d,e){var c=new FileReader;c.onload=function(a){e(new D(a.target.result))};c.readAsBinaryString(h)}}})(this);(function(f){f.k={i:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",A:function(h){for(var d="",e,c,a,b,g,r,k=0;k>2,e=(e&3)<<4|c>>4,g=(c&15)<<2|a>>6,r=a&63,isNaN(c)?g=r=64:isNaN(a)&&(r=64),d=d+Base64.i.charAt(b)+Base64.i.charAt(e)+Base64.i.charAt(g)+Base64.i.charAt(r);return d}};f.Base64=f.k;f.k.encodeBytes=f.k.A})(this);(function(f){var h=f.s={},d={},e=[0,7];h.w=function(c){delete d[c]};h.v=function(){d={}};h.D=function(c,a,b){b=b||{};(b.dataReader||C)(c,function(g){g.f(e,function(){var e="ftypM4A"==g.c(4,7)?ID4:"ID3"==g.c(0,3)?ID3v2:ID3v1;e.o(g,function(){var k=b.tags,h=e.p(g,k),k=d[c]||{},f;for(f in h)h.hasOwnProperty(f)&&(k[f]=h[f]);d[c]=k;a&&a()})})})};h.B=function(c){if(!d[c])return x;var a={},b;for(b in d[c])d[c].hasOwnProperty(b)&&(a[b]=d[c][b]);return a};h.C=function(c,a){return!d[c]?x:d[c][a]};f.ID3=f.s; -h.loadTags=h.D;h.getAllTags=h.B;h.getTag=h.C;h.clearTags=h.w;h.clearAll=h.v})(this);(function(f){var h=f.t={},d="Blues;Classic Rock;Country;Dance;Disco;Funk;Grunge;Hip-Hop;Jazz;Metal;New Age;Oldies;Other;Pop;R&B;Rap;Reggae;Rock;Techno;Industrial;Alternative;Ska;Death Metal;Pranks;Soundtrack;Euro-Techno;Ambient;Trip-Hop;Vocal;Jazz+Funk;Fusion;Trance;Classical;Instrumental;Acid;House;Game;Sound Clip;Gospel;Noise;AlternRock;Bass;Soul;Punk;Space;Meditative;Instrumental Pop;Instrumental Rock;Ethnic;Gothic;Darkwave;Techno-Industrial;Electronic;Pop-Folk;Eurodance;Dream;Southern Rock;Comedy;Cult;Gangsta;Top 40;Christian Rap;Pop/Funk;Jungle;Native American;Cabaret;New Wave;Psychadelic;Rave;Showtunes;Trailer;Lo-Fi;Tribal;Acid Punk;Acid Jazz;Polka;Retro;Musical;Rock & Roll;Hard Rock;Folk;Folk-Rock;National Folk;Swing;Fast Fusion;Bebob;Latin;Revival;Celtic;Bluegrass;Avantgarde;Gothic Rock;Progressive Rock;Psychedelic Rock;Symphonic Rock;Slow Rock;Big Band;Chorus;Easy Listening;Acoustic;Humour;Speech;Chanson;Opera;Chamber Music;Sonata;Symphony;Booty Bass;Primus;Porn Groove;Satire;Slow Jam;Club;Tango;Samba;Folklore;Ballad;Power Ballad;Rhythmic Soul;Freestyle;Duet;Punk Rock;Drum Solo;Acapella;Euro-House;Dance Hall".split(";"); -h.o=function(d,c){var a=d.j();d.f([a-128-1,a],c)};h.p=function(e){var c=e.j()-128;if("TAG"==e.c(c,3)){var a=e.c(c+3,30).replace(/\0/g,""),b=e.c(c+33,30).replace(/\0/g,""),g=e.c(c+63,30).replace(/\0/g,""),h=e.c(c+93,4).replace(/\0/g,"");if(0==e.a(c+97+28))var k=e.c(c+97,28).replace(/\0/g,""),f=e.a(c+97+29);else k="",f=0;e=e.a(c+97+30);return{version:"1.1",title:a,artist:b,album:g,year:h,comment:k,track:f,genre:255>e?d[e]:""}}return{}};f.ID3v1=f.t})(this);(function(f){function h(a,b){var c=b.a(a),d=b.a(a+1),e=b.a(a+2);return b.a(a+3)&127|(e&127)<<7|(d&127)<<14|(c&127)<<21}var d=f.G={};d.b={};d.frames={BUF:"Recommended buffer size",CNT:"Play counter",COM:"Comments",CRA:"Audio encryption",CRM:"Encrypted meta frame",ETC:"Event timing codes",EQU:"Equalization",GEO:"General encapsulated object",IPL:"Involved people list",LNK:"Linked information",MCI:"Music CD Identifier",MLL:"MPEG location lookup table",PIC:"Attached picture",POP:"Popularimeter",REV:"Reverb", +var v=!0,x=null;function C(f,g,d){function e(b,r,k,d,a,e){var l=c();l?("undefined"===typeof e&&(e=v),r&&("undefined"!=typeof l.onload?l.onload=function(){"200"==l.status||"206"==l.status?(l.fileSize=a||l.getResponseHeader("Content-Length"),r(l)):k&&k();l=x}:l.onreadystatechange=function(){4==l.readyState&&("200"==l.status||"206"==l.status?(l.fileSize=a||l.getResponseHeader("Content-Length"),r(l)):k&&k(),l=x)}),l.open("GET",b,e),l.overrideMimeType&&l.overrideMimeType("text/plain; charset=x-user-defined"),d&&l.setRequestHeader("Range", +"bytes="+d[0]+"-"+d[1]),l.setRequestHeader("If-Modified-Since","Sat, 1 Jan 1970 00:00:00 GMT"),l.send(x)):k&&k()}function c(){var b=x;window.XMLHttpRequest?b=new XMLHttpRequest:window.ActiveXObject&&(b=new ActiveXObject("Microsoft.XMLHTTP"));return b}function a(b,r){var k=c();k&&(r&&("undefined"!=typeof k.onload?k.onload=function(){"200"==k.status&&r(this);k=x}:k.onreadystatechange=function(){4==k.readyState&&("200"==k.status&&r(this),k=x)}),k.open("HEAD",b,v),k.send(x))}function b(b,r){var k,a;function c(b){var h= +~~(b[0]/k)-a;b=~~(b[1]/k)+1+a;0>h&&(h=0);b>=blockTotal&&(b=blockTotal-1);return[h,b]}function g(a,c){for(;q[a[0]];)if(a[0]++,a[0]>a[1]){c&&c();return}for(;q[a[1]];)if(a[1]--,a[0]>a[1]){c&&c();return}var t=[a[0]*k,(a[1]+1)*k-1];e(b,function(b){parseInt(b.getResponseHeader("Content-Length"),10)==r&&(a[0]=0,a[1]=blockTotal-1,t[0]=0,t[1]=r-1);b={data:b.X||b.responseText,offset:t[0]};for(var h=a[0];h<=a[1];h++)q[h]=b;f+=t[1]-t[0]+1;c&&c()},d,t,l,!!c)}var l,f=0,m=new D("",0,r),q=[];k=k||2048;a="undefined"=== +typeof a?0:a;blockTotal=~~((r-1)/k)+1;for(var n in m)m.hasOwnProperty(n)&&"function"===typeof m[n]&&(this[n]=m[n]);this.a=function(b){var h;g(c([b,b]));h=q[~~(b/k)];if("string"==typeof h.data)return h.data.charCodeAt(b-h.offset)&255;if("unknown"==typeof h.data)return IEBinary_getByteAt(h.data,b-h.offset)};this.O=function(){return f};this.f=function(b,h){g(c(b),h)}}(function(){a(f,function(h){h=parseInt(h.getResponseHeader("Content-Length"),10)||-1;g(new b(f,h))})})()} +function D(f,g,d){var e=f,c=g||0,a=0;this.Q=function(){return e};if("string"==typeof f)a=d||e.length,this.a=function(b){return e.charCodeAt(b+c)&255};else if("unknown"==typeof f)a=d||IEBinary_getLength(e),this.a=function(b){return IEBinary_getByteAt(e,b+c)};else if(window.G&&f instanceof ArrayBuffer)e=new Uint8Array(f),a=d||e.length,this.a=function(b){return e[b+c]};else throw Error("Unknown data type: "+typeof f);this.n=function(b,h){for(var a=Array(h),c=0;ca&&(a+=65536);return a};this.T=function(b,h){var a=this.r(b,h);return 32767c&&(c+=4294967296);return c};this.S=function(b,a){var c=this.h(b,a);return 2147483647< +c?c-4294967296:c};this.q=function(b){var a=this.a(b),c=this.a(b+1);b=this.a(b+2);a=((a<<8)+c<<8)+b;0>a&&(a+=16777216);return a};this.c=function(b,a){for(var c=[],d=b,e=0;dl||224<=l?a[f]=String.fromCharCode(p):(l=(b[e+g]<<8)+b[e+c],e+=2,a[f]=String.fromCharCode(p,l))}b=new String(a.join(""));b.g=e;break;case "utf-8":d=0;e=Math.min(e||b.length,b.length);239==b[0]&&(187==b[1]&&191==b[2])&&(d=3);g=[];for(c=0;da?g[c]=String.fromCharCode(a):194<=a&&224>a?(f=b[d++],g[c]=String.fromCharCode(((a&31)<<6)+(f&63))):224<=a&&240>a?(f=b[d++],p=b[d++],g[c]=String.fromCharCode(((a&255)<<12)+((f&63)<<6)+ +(p&63))):240<=a&&245>a&&(f=b[d++],p=b[d++],l=b[d++],a=((a&7)<<18)+((f&63)<<12)+((p&63)<<6)+(l&63)-65536,g[c]=String.fromCharCode((a>>10)+55296,(a&1023)+56320));b=new String(g.join(""));b.g=d;break;default:e=[];g=g||b.length;for(d=0;d\r\nFunction IEBinary_getByteAt(strBinary, iOffset)\r\n\tIEBinary_getByteAt = AscB(MidB(strBinary,iOffset+1,1))\r\nEnd Function\r\nFunction IEBinary_getLength(strBinary)\r\n\tIEBinary_getLength = LenB(strBinary)\r\nEnd Function\r\n\x3c/script>\r\n");(function(f){f.FileAPIReader=function(g){return function(d,e){var c=new FileReader;c.onload=function(a){e(new D(a.target.result))};c.readAsArrayBuffer(g)}}})(this);(function(f){f.k={i:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",A:function(g){for(var d="",e,c,a,b,h,r,k=0;k>2,e=(e&3)<<4|c>>4,h=(c&15)<<2|a>>6,r=a&63,isNaN(c)?h=r=64:isNaN(a)&&(r=64),d=d+Base64.i.charAt(b)+Base64.i.charAt(e)+Base64.i.charAt(h)+Base64.i.charAt(r);return d}};f.Base64=f.k;f.k.encodeBytes=f.k.A})(this);(function(f){var g=f.s={},d={},e=[0,7];g.w=function(c){delete d[c]};g.v=function(){d={}};g.D=function(c,a,b){b=b||{};(b.dataReader||C)(c,function(h){h.f(e,function(){var e="ftypM4A"==h.c(4,7)?ID4:"ID3"==h.c(0,3)?ID3v2:ID3v1;e.o(h,function(){var k=b.tags,g=e.p(h,k),k=d[c]||{},f;for(f in g)g.hasOwnProperty(f)&&(k[f]=g[f]);d[c]=k;a&&a()})})})};g.B=function(c){if(!d[c])return x;var a={},b;for(b in d[c])d[c].hasOwnProperty(b)&&(a[b]=d[c][b]);return a};g.C=function(c,a){return!d[c]?x:d[c][a]};f.ID3=f.s; +g.loadTags=g.D;g.getAllTags=g.B;g.getTag=g.C;g.clearTags=g.w;g.clearAll=g.v})(this);(function(f){var g=f.t={},d="Blues;Classic Rock;Country;Dance;Disco;Funk;Grunge;Hip-Hop;Jazz;Metal;New Age;Oldies;Other;Pop;R&B;Rap;Reggae;Rock;Techno;Industrial;Alternative;Ska;Death Metal;Pranks;Soundtrack;Euro-Techno;Ambient;Trip-Hop;Vocal;Jazz+Funk;Fusion;Trance;Classical;Instrumental;Acid;House;Game;Sound Clip;Gospel;Noise;AlternRock;Bass;Soul;Punk;Space;Meditative;Instrumental Pop;Instrumental Rock;Ethnic;Gothic;Darkwave;Techno-Industrial;Electronic;Pop-Folk;Eurodance;Dream;Southern Rock;Comedy;Cult;Gangsta;Top 40;Christian Rap;Pop/Funk;Jungle;Native American;Cabaret;New Wave;Psychadelic;Rave;Showtunes;Trailer;Lo-Fi;Tribal;Acid Punk;Acid Jazz;Polka;Retro;Musical;Rock & Roll;Hard Rock;Folk;Folk-Rock;National Folk;Swing;Fast Fusion;Bebob;Latin;Revival;Celtic;Bluegrass;Avantgarde;Gothic Rock;Progressive Rock;Psychedelic Rock;Symphonic Rock;Slow Rock;Big Band;Chorus;Easy Listening;Acoustic;Humour;Speech;Chanson;Opera;Chamber Music;Sonata;Symphony;Booty Bass;Primus;Porn Groove;Satire;Slow Jam;Club;Tango;Samba;Folklore;Ballad;Power Ballad;Rhythmic Soul;Freestyle;Duet;Punk Rock;Drum Solo;Acapella;Euro-House;Dance Hall".split(";"); +g.o=function(d,c){var a=d.j();d.f([a-128-1,a],c)};g.p=function(e){var c=e.j()-128;if("TAG"==e.c(c,3)){var a=e.c(c+3,30).replace(/\0/g,""),b=e.c(c+33,30).replace(/\0/g,""),h=e.c(c+63,30).replace(/\0/g,""),g=e.c(c+93,4).replace(/\0/g,"");if(0==e.a(c+97+28))var k=e.c(c+97,28).replace(/\0/g,""),f=e.a(c+97+29);else k="",f=0;e=e.a(c+97+30);return{version:"1.1",title:a,artist:b,album:h,year:g,comment:k,track:f,genre:255>e?d[e]:""}}return{}};f.ID3v1=f.t})(this);(function(f){function g(a,b){var c=b.a(a),d=b.a(a+1),e=b.a(a+2);return b.a(a+3)&127|(e&127)<<7|(d&127)<<14|(c&127)<<21}var d=f.H={};d.b={};d.frames={BUF:"Recommended buffer size",CNT:"Play counter",COM:"Comments",CRA:"Audio encryption",CRM:"Encrypted meta frame",ETC:"Event timing codes",EQU:"Equalization",GEO:"General encapsulated object",IPL:"Involved people list",LNK:"Linked information",MCI:"Music CD Identifier",MLL:"MPEG location lookup table",PIC:"Attached picture",POP:"Popularimeter",REV:"Reverb", RVA:"Relative volume adjustment",SLT:"Synchronized lyric/text",STC:"Synced tempo codes",TAL:"Album/Movie/Show title",TBP:"BPM (Beats Per Minute)",TCM:"Composer",TCO:"Content type",TCR:"Copyright message",TDA:"Date",TDY:"Playlist delay",TEN:"Encoded by",TFT:"File type",TIM:"Time",TKE:"Initial key",TLA:"Language(s)",TLE:"Length",TMT:"Media type",TOA:"Original artist(s)/performer(s)",TOF:"Original filename",TOL:"Original Lyricist(s)/text writer(s)",TOR:"Original release year",TOT:"Original album/Movie/Show title", TP1:"Lead artist(s)/Lead performer(s)/Soloist(s)/Performing group",TP2:"Band/Orchestra/Accompaniment",TP3:"Conductor/Performer refinement",TP4:"Interpreted, remixed, or otherwise modified by",TPA:"Part of a set",TPB:"Publisher",TRC:"ISRC (International Standard Recording Code)",TRD:"Recording dates",TRK:"Track number/Position in set",TSI:"Size",TSS:"Software/hardware and settings used for encoding",TT1:"Content group description",TT2:"Title/Songname/Content description",TT3:"Subtitle/Description refinement", TXT:"Lyricist/text writer",TXX:"User defined text information frame",TYE:"Year",UFI:"Unique file identifier",ULT:"Unsychronized lyric/text transcription",WAF:"Official audio file webpage",WAR:"Official artist/performer webpage",WAS:"Official audio source webpage",WCM:"Commercial information",WCP:"Copyright/Legal information",WPB:"Publishers official webpage",WXX:"User defined URL link frame",AENC:"Audio encryption",APIC:"Attached picture",COMM:"Comments",COMR:"Commercial frame",ENCR:"Encryption method registration", @@ -16,10 +16,10 @@ EQUA:"Equalization",ETCO:"Event timing codes",GEOB:"General encapsulated object" TALB:"Album/Movie/Show title",TBPM:"BPM (beats per minute)",TCOM:"Composer",TCON:"Content type",TCOP:"Copyright message",TDAT:"Date",TDLY:"Playlist delay",TENC:"Encoded by",TEXT:"Lyricist/Text writer",TFLT:"File type",TIME:"Time",TIT1:"Content group description",TIT2:"Title/songname/content description",TIT3:"Subtitle/Description refinement",TKEY:"Initial key",TLAN:"Language(s)",TLEN:"Length",TMED:"Media type",TOAL:"Original album/movie/show title",TOFN:"Original filename",TOLY:"Original lyricist(s)/text writer(s)", TOPE:"Original artist(s)/performer(s)",TORY:"Original release year",TOWN:"File owner/licensee",TPE1:"Lead performer(s)/Soloist(s)",TPE2:"Band/orchestra/accompaniment",TPE3:"Conductor/performer refinement",TPE4:"Interpreted, remixed, or otherwise modified by",TPOS:"Part of a set",TPUB:"Publisher",TRCK:"Track number/Position in set",TRDA:"Recording dates",TRSN:"Internet radio station name",TRSO:"Internet radio station owner",TSIZ:"Size",TSRC:"ISRC (international standard recording code)",TSSE:"Software/Hardware and settings used for encoding", TYER:"Year",TXXX:"User defined text information frame",UFID:"Unique file identifier",USER:"Terms of use",USLT:"Unsychronized lyric/text transcription",WCOM:"Commercial information",WCOP:"Copyright/Legal information",WOAF:"Official audio file webpage",WOAR:"Official artist/performer webpage",WOAS:"Official audio source webpage",WORS:"Official internet radio station homepage",WPAY:"Payment",WPUB:"Publishers official webpage",WXXX:"User defined URL link frame"};var e={title:["TIT2","TT2"],artist:["TPE1", -"TP1"],album:["TALB","TAL"],year:["TYER","TYE"],comment:["COMM","COM"],track:["TRCK","TRK"],genre:["TCON","TCO"],picture:["APIC","PIC"],lyrics:["USLT","ULT"]},c=["title","artist","album","track"];d.o=function(a,b){a.f([0,h(6,a)],b)};d.p=function(a,b){var g=0,f=a.a(g+3);if(42.4"};var k=a.a(g+4),v=a.d(g+5,7),s=a.d(g+5,6),w=a.d(g+5,5),l=h(g+6,a),g=g+10;if(s)var p=a.h(g,u),g=g+(p+4);var f={version:"2."+f+"."+k,major:f,revision:k,flags:{unsynchronisation:v,extended_header:s,experimental_indicator:w}, -size:l},m;if(v)m={};else{for(var l=l-10,v=a,k=b,s={},w=f.major,p=[],q=0,n;n=(k||c)[q];q++)p=p.concat(e[n]||[n]);for(k=p;gk.indexOf(m))&&(22.4"};var k=a.a(h+4),t=a.d(h+5,7),s=a.d(h+5,6),w=a.d(h+5,5),l=g(h+6,a),h=h+10;if(s)var p=a.h(h,v),h=h+(p+4);var f={version:"2."+f+"."+k,major:f,revision:k,flags:{unsynchronisation:t,extended_header:s,experimental_indicator:w}, +size:l},m;if(t)m={};else{for(var l=l-10,t=a,k=b,s={},w=f.major,p=[],q=0,n;n=(k||c)[q];q++)p=p.concat(e[n]||[n]);for(k=p;hk.indexOf(m))&&(2