securityos/node_modules/music-metadata/lib/index.js

75 lines
2.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ratingToStars = exports.orderTags = exports.parseFile = exports.parseStream = exports.selectCover = exports.parseBuffer = exports.parseFromTokenizer = void 0;
const strtok3 = require("strtok3");
const Core = require("./core");
const ParserFactory_1 = require("./ParserFactory");
const debug_1 = require("debug");
const RandomFileReader_1 = require("./common/RandomFileReader");
const debug = (0, debug_1.default)("music-metadata:parser");
var core_1 = require("./core");
Object.defineProperty(exports, "parseFromTokenizer", { enumerable: true, get: function () { return core_1.parseFromTokenizer; } });
Object.defineProperty(exports, "parseBuffer", { enumerable: true, get: function () { return core_1.parseBuffer; } });
Object.defineProperty(exports, "selectCover", { enumerable: true, get: function () { return core_1.selectCover; } });
/**
* Parse audio from Node Stream.Readable
* @param stream - Stream to read the audio track from
* @param fileInfo - File information object or MIME-type, e.g.: 'audio/mpeg'
* @param options - Parsing options
* @returns Metadata
*/
async function parseStream(stream, fileInfo, options = {}) {
const tokenizer = await strtok3.fromStream(stream, typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo);
return Core.parseFromTokenizer(tokenizer, options);
}
exports.parseStream = parseStream;
/**
* Parse audio from Node file
* @param filePath - Media file to read meta-data from
* @param options - Parsing options
* @returns Metadata
*/
async function parseFile(filePath, options = {}) {
debug(`parseFile: ${filePath}`);
const fileTokenizer = await strtok3.fromFile(filePath);
const fileReader = await RandomFileReader_1.RandomFileReader.init(filePath, fileTokenizer.fileInfo.size);
try {
await Core.scanAppendingHeaders(fileReader, options);
}
finally {
await fileReader.close();
}
try {
const parserName = ParserFactory_1.ParserFactory.getParserIdForExtension(filePath);
if (!parserName)
debug(' Parser could not be determined by file extension');
return await ParserFactory_1.ParserFactory.parse(fileTokenizer, parserName, options);
}
finally {
await fileTokenizer.close();
}
}
exports.parseFile = parseFile;
/**
* Create a dictionary ordered by their tag id (key)
* @param nativeTags - List of tags
* @returns Tags indexed by id
*/
exports.orderTags = Core.orderTags;
/**
* Convert rating to 1-5 star rating
* @param rating - Normalized rating [0..1] (common.rating[n].rating)
* @returns Number of stars: 1, 2, 3, 4 or 5 stars
*/
exports.ratingToStars = Core.ratingToStars;
/**
* Define default module exports
*/
exports.default = {
parseStream,
parseFile,
parseFromTokenizer: Core.parseFromTokenizer,
parseBuffer: Core.parseBuffer,
selectCover: Core.selectCover
};