UNPKG

@infinito/id3

Version:
30 lines (28 loc) 1.15 kB
import {constants} from './constants.js'; import getSyncSafe from './get.syncsafe.js'; export default function validID3(buf) { if(!(buf instanceof ArrayBuffer)) { throw new TypeError('parameter buf must be an instance of an ArrayBuffer'); } if(buf.byteLength<constants.ID3_HEADER_LENGTH_BYTES) { throw new Error('buffer provided to validID3 must be at least as big as the ID3 header'); } var res = { ver:0, subver:0, flags:0, size:0 }; const header = new Uint8Array(buf,0,constants.ID3_HEADER_LENGTH_BYTES-constants.ID3_HEADER_TAG_SIZE_LENGTH_BYTES); for(let i=0;i<constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES;i++) { if(header[i]!=constants.ID3_HEADER_IDENTIFIER[i]) { throw new Error("No valid id3 tags found"); return false; } } res.ver = header[constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES]; res.subver = header[constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES+1]; res.flags = header[constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES+2]; res.size = getSyncSafe(new Uint8Array(buf,constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES+3,constants.ID3_HEADER_TAG_SIZE_LENGTH_BYTES)); return res; };