-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathaudio-metadata.min.js
1 lines (1 loc) · 6.08 KB
/
audio-metadata.min.js
1
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.AudioMetadata=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){module.exports={ogg:require("./src/ogg"),id3v1:require("./src/id3v1"),id3v2:require("./src/id3v2")}},{"./src/id3v1":2,"./src/id3v2":3,"./src/ogg":4}],2:[function(require,module,exports){var utils=require("./utils");function checkMagicId3v1(view){var id3Magic=utils.readBytes(view,view.byteLength-128,3);return id3Magic[0]===84&&id3Magic[1]===65&&id3Magic[2]===71}module.exports=function(buffer){var view=utils.createView(buffer);if(!checkMagicId3v1(view)){return null}function trim(value){return value.replace(/[\s\u0000]+$/,"")}try{var offset=view.byteLength-128+3,readAscii=utils.readAscii;var title=readAscii(view,offset,30),artist=readAscii(view,offset+30,30),album=readAscii(view,offset+60,30),year=readAscii(view,offset+90,4);offset+=94;var comment=readAscii(view,offset,28),track=null;offset+=28;if(view.getUint8(offset)===0){track=view.getUint8(offset+1)}else{comment+=readAscii(view,offset,2)}offset+=2;var genre=view.getUint8(offset);return{title:trim(title),artist:trim(artist),album:trim(album),year:trim(year),comment:trim(comment),track:track,genre:genre}}catch(e){return null}}},{"./utils":5}],3:[function(require,module,exports){var utils=require("./utils");function checkMagicId3(view,offset){var id3Magic=utils.readBytes(view,offset,3);return id3Magic[0]===73&&id3Magic[1]===68&&id3Magic[2]===51}function getUint28(view,offset){var sizeBytes=utils.readBytes(view,offset,4);var mask=268435455;return(sizeBytes[0]&mask)<<21|(sizeBytes[1]&mask)<<14|(sizeBytes[2]&mask)<<7|sizeBytes[3]&mask}module.exports=function(buffer){var view=utils.createView(buffer);if(!checkMagicId3(view,0)){return null}var offset=3;offset+=2;var flags=view.getUint8(offset);offset++;var size=getUint28(view,offset);offset+=4;var extendedHeader=(flags&128)>0;if(extendedHeader){offset+=getUint28(view,offset)}function readFrame(offset){try{var id=utils.readAscii(view,offset,4);var size=getUint28(view,offset+4);offset+=10;if(id[0]!=="T"){return{id:id,size:size+10}}var encoding=view.getUint8(offset),data="";if(encoding<=3){offset++;if(encoding===3){data=utils.readUtf8(view,offset,size-1)}else{data=utils.readAscii(view,offset,size-1)}}else{data=utils.readAscii(view,offset,size)}data=utils.trimNull(data);return{id:id,size:size+10,content:data}}catch(e){return null}}var idMap={TALB:"album",TCOM:"composer",TIT1:"title",TIT2:"title",TPE1:"artist",TRCK:"track",TSSE:"encoder",TDRC:"year",TCON:"genre"};var endOfTags=offset+size,frames={};while(offset<endOfTags){var frame=readFrame(offset);if(!frame){break}offset+=frame.size;if(!frame.content){continue}var id=idMap[frame.id]||frame.id;if(id==="TXXX"){var nullByte=frame.content.indexOf("\x00");id=frame.content.substring(0,nullByte);frames[id]=frame.content.substring(nullByte+1)}else{frames[id]=frames[frame.id]=frame.content}}return frames}},{"./utils":5}],4:[function(require,module,exports){var utils=require("./utils");module.exports=function(buffer){var view=utils.createView(buffer);function parsePage(offset,withPacket){if(view.byteLength<offset+27){return null}var numPageSegments=view.getUint8(offset+26),segmentTable=utils.readBytes(view,offset+27,numPageSegments),headerSize=27+numPageSegments;if(!segmentTable.length){return null}var pageSize=headerSize+segmentTable.reduce(function(cur,next){return cur+next}),length=headerSize+1+"vorbis".length,packetView=null;if(withPacket){packetView=utils.createView(new ArrayBuffer(pageSize-length));utils.readBytes(view,offset+length,pageSize-length,packetView)}return{pageSize:pageSize,packet:packetView}}function parseComments(packet){try{var vendorLength=packet.getUint32(0,true),commentListLength=packet.getUint32(4+vendorLength,true),comments={},offset=8+vendorLength,map={tracknumber:"track"};for(var i=0;i<commentListLength;i++){var commentLength=packet.getUint32(offset,true),comment=utils.readUtf8(packet,offset+4,commentLength),equals=comment.indexOf("="),key=comment.substring(0,equals).toLowerCase();comments[map[key]||key]=comments[key]=utils.trimNull(comment.substring(equals+1));offset+=4+commentLength}return comments}catch(e){return null}}var id=parsePage(0);if(!id){return null}var commentHeader=parsePage(id.pageSize,true);if(!commentHeader){return null}return parseComments(commentHeader.packet)}},{"./utils":5}],5:[function(require,module,exports){function toArrayBuffer(buffer){var arrayBuffer=new ArrayBuffer(buffer.length);var view=new Uint8Array(arrayBuffer);for(var i=0;i<buffer.length;++i){view[i]=buffer[i]}return arrayBuffer}module.exports={trimNull:function(s){return s.replace(/\u0000+$/,"")},createView:function(buffer){if(typeof Buffer!=="undefined"&&buffer instanceof Buffer){buffer=toArrayBuffer(buffer)}if(!(buffer instanceof ArrayBuffer)){throw new Error("Expected instance of Buffer or ArrayBuffer")}return new DataView(buffer)},readBytes:function(view,offset,length,target){if(offset+length<0){return[]}var bytes=[];var max=Math.min(offset+length,view.byteLength);for(var i=offset;i<max;i++){var value=view.getUint8(i);bytes.push(value);if(target){target.setUint8(i-offset,value)}}return bytes},readAscii:function(view,offset,length){if(view.byteLength<offset+length){return""}var s="";for(var i=0;i<length;i++){s+=String.fromCharCode(view.getUint8(offset+i))}return s},readUtf8:function(view,offset,length){if(view.byteLength<offset+length){return""}var buffer=view.buffer.slice(offset,offset+length);var encodedString=String.fromCharCode.apply(null,new Uint8Array(buffer));return decodeURIComponent(escape(encodedString))}}},{}]},{},[1])(1)});