UNPKG

@infinito/id3

Version:
107 lines (77 loc) 2.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = genID3; var _textEncoding = require("text-encoding"); var _constants = require("./constants.js"); var _id3tag = _interopRequireDefault(require("./classes/id3tag.js")); var _id = _interopRequireDefault(require("./gen/id3.2.3.js")); var _setSyncsafe = _interopRequireDefault(require("./set.syncsafe.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function genID3(tags) { if (!(tags instanceof _id3tag.default)) { throw new TypeError("tags not of type id3Tag"); } var header = new Uint8Array(_constants.constants.ID3_HEADER_LENGTH_BYTES); for (var i = 0; i < _constants.constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES; i++) { header[i] = _constants.constants.ID3_HEADER_IDENTIFIER[i]; } var pos = _constants.constants.ID3_HEADER_IDENTIFIER_LENGTH_BYTES; header[pos] = tags.ver; pos++; header[pos] = tags.subVer; pos++; header[pos] = tags.flags; pos++; switch (tags.ver) { case 4: throw new Error("id3v2.4." + subver + " not supported"); break; case 3: var frames = (0, _id.default)(tags); var len = _constants.constants.ID3_HEADER_LENGTH_BYTES; for (var i in frames) { len += frames[i].byteLength; } (0, _setSyncsafe.default)(header, pos, len - _constants.constants.ID3_HEADER_LENGTH_BYTES, _constants.constants.ID3V2_3_FRAME_SIZE_BYTES); pos += _constants.constants.ID3V2_3_FRAME_SIZE_BYTES; var buf = new Uint8Array(len); for (var i = 0; i < _constants.constants.ID3_HEADER_LENGTH_BYTES; i++) { buf[i] = header[i]; } for (var i in frames) { len = frames[i].byteLength; for (var j = 0; j < len; j++) { buf[pos + j] = frames[i][j]; } pos += len; } return buf; default: throw new Error("id3v" + tags.ver + "." + tags.subver + " not supported"); return; } var path = new _textEncoding.TextEncoder().encode(tags.path); var sz = path.byteLength; if (sz > 0xffff) { console.error(tags); throw new Error("Path is too long"); return; } var pathbuf = new Uint8Array(2 + sz); pathbuf[0] = (sz & 0xff00) >> 16; pathbuf[1] = sz & 0xff; for (var i = 0; i < path.byteLength; i++) { pathbuf[2 + i] = path[i]; } var res = new Uint8Array(pathbuf.byteLength + buf.byteLength); for (var i = 0; i < pathbuf.byteLength; i++) { res[i] = pathbuf[i]; } for (var j = 0; j < buf.byteLength; j++) { res[i + j] = buf[j]; } return res; } ;