jamp3
Version:
mp3, id3v1, id3v2 - reader & writer
95 lines • 4.45 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MP3 = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const mp3_reader_1 = require("./mp3.reader");
const mp3_mpeg_frame_1 = require("./mp3.mpeg.frame");
const __1 = require("../..");
const update_file_1 = require("../common/update-file");
const mp3_result_1 = require("./mp3.result");
class MP3 {
readStream(stream, options, streamSize) {
return __awaiter(this, void 0, void 0, function* () {
const reader = new mp3_reader_1.MP3Reader();
const layout = yield reader.readStream(stream, Object.assign({ streamSize }, options));
return yield (0, mp3_result_1.prepareResult)(options, layout);
});
}
read(filename, options) {
return __awaiter(this, void 0, void 0, function* () {
const reader = new mp3_reader_1.MP3Reader();
const layout = yield reader.read(filename, options);
return yield (0, mp3_result_1.prepareResult)(options, layout);
});
}
removeTags(filename, options) {
return __awaiter(this, void 0, void 0, function* () {
const stat = yield fs_extra_1.default.stat(filename);
const opts = {
streamSize: stat.size,
id3v2: options.id3v2,
detectDuplicateID3v2: options.id3v2,
id3v1: options.id3v1,
mpegQuick: options.id3v2
};
let id2v1removed = false;
let id2v2removed = false;
yield (0, update_file_1.updateFile)(filename, opts, !!options.keepBackup, layout => {
for (const tag of layout.tags) {
if (options.id3v2 && tag.id === __1.ITagID.ID3v2 && tag.end > 0) {
return true;
}
else if (options.id3v1 && tag.id === __1.ITagID.ID3v1 && tag.end === stat.size && tag.start < stat.size) {
return true;
}
}
return false;
}, (layout, fileWriter) => __awaiter(this, void 0, void 0, function* () {
let start = 0;
let finish = stat.size;
let specEnd = 0;
for (const tag of layout.tags) {
if (tag.id === __1.ITagID.ID3v2 && options.id3v2) {
if (start < tag.end) {
specEnd = tag.head.size + tag.start + 10;
start = tag.end;
id2v2removed = true;
}
}
else if (tag.id === __1.ITagID.ID3v1 && options.id3v1 && tag.end === stat.size) {
if (finish > tag.start) {
finish = tag.start;
id2v1removed = true;
}
}
}
if (options.id3v2) {
if (layout.frameheaders.length > 0) {
start = (0, mp3_mpeg_frame_1.rawHeaderOffSet)(layout.frameheaders[0]);
}
else {
start = Math.max(start, specEnd);
}
}
if (finish > start) {
yield fileWriter.copyRange(filename, start, finish);
}
}));
return id2v2removed || id2v1removed ? { id3v2: id2v2removed, id3v1: id2v1removed } : undefined;
});
}
}
exports.MP3 = MP3;
//# sourceMappingURL=mp3.js.map