UNPKG

music-metadata

Version:

Music metadata parser for Node.js, supporting virtual any audio and tag format.

42 lines (41 loc) 1.39 kB
import * as Token from 'token-types'; import * as util from '../common/Util.js'; import { StringType } from 'token-types'; export const PageHeader = { len: 27, get: (buf, off) => { return { capturePattern: new StringType(4, 'latin1').get(buf, off), version: Token.UINT8.get(buf, off + 4), headerType: { continued: util.getBit(buf, off + 5, 0), firstPage: util.getBit(buf, off + 5, 1), lastPage: util.getBit(buf, off + 5, 2) }, // packet_flag: Token.UINT8.get(buf, off + 5), absoluteGranulePosition: Number(Token.UINT64_LE.get(buf, off + 6)), streamSerialNumber: Token.UINT32_LE.get(buf, off + 14), pageSequenceNo: Token.UINT32_LE.get(buf, off + 18), pageChecksum: Token.UINT32_LE.get(buf, off + 22), page_segments: Token.UINT8.get(buf, off + 26) }; } }; export class SegmentTable { static sum(buf, off, len) { const dv = new DataView(buf.buffer, 0); let s = 0; for (let i = off; i < off + len; ++i) { s += dv.getUint8(i); } return s; } constructor(header) { this.len = header.page_segments; } get(buf, off) { return { totalPageSize: SegmentTable.sum(buf, off, this.len) }; } }