JSFiddle - React, Tailwind, and code Playground

HTML

<input type="file">

JavaScript

DataView.prototype.getChar=function(start) {
		return String.fromCharCode(this.getUint8(start));
	};
	DataView.prototype.getString=function(start,length) {
    	for(var i=0,v='';i<length;++i) {
    		v+=this.getChar(start+i);
     	}
     	return v;
	};
	DataView.prototype.getInt=function(start) {
		return (this.getUint8(start) << 21) | (this.getUint8(start+1) << 14) | (this.getUint8(start+2) << 7) | this.getUint8(start+3);
	};

    function readID3(){
        var a=new DataView(this.result);
        // Parse it quickly
        if ( a.getString(0,3)!="ID3" )
        {
            return false;
        }
 
        // True if the tag is pre-V3 tag (shorter headers)
        var TagVersion = a.getUint8(3);
         
        // Check the version
        if ( TagVersion < 0 || TagVersion > 4 )
        {
            return false;
        }
 
        // Get the ID3 tag size and flags; see 3.1
        var tagsize = a.getInt(6)+10;
			//(a.getUint8(9) & 0xFF) | ((a.getUint8(8) & 0xFF) << 7 ) | ((a.getUint8(7) & 0xFF) << 14 ) | ((a.getUint8(6) & 0xFF) << 21 ) + 10;
        var uses_synch = (a.getUint8(5) & 0x80) != 0 ? true : false;
        var has_extended_hdr = (a.getUint8(5) & 0x40) != 0 ? true : false;

		var headersize=0;         
        // Read the extended header length and skip it
        if ( has_extended_hdr )
        {
            var headersize = a.getInt(10);
				//(a.getUint8(10) << 21) | (a.getUint8(11) << 14) | (a.getUint8(12) << 7) | a.getUint8(13); 
        }
         
        // Read the whole tag
        var buffer=new DataView(a.buffer.slice(10+headersize,tagsize));
 
        // Prepare to parse the tag
        var length = buffer.byteLength;
         
        // Recreate the tag if desynchronization is used inside; we need to replace 0xFF 0x00 with 0xFF
        if ( uses_synch )
        {
            var newpos = 0;
            var newbuffer = new DataView(new ArrayBuffer(tagsize));
             
            for ( var i = 0; i < tagsize; i++ )
       ...