music-metadata
Version:
Music metadata parser for Node.js, supporting virtual any audio and tag format.
51 lines (50 loc) • 1.96 kB
JavaScript
import { ID3v1TagMapper } from '../id3v1/ID3v1TagMap.js';
import { ID3v24TagMapper } from '../id3v2/ID3v24TagMapper.js';
import { AsfTagMapper } from '../asf/AsfTagMapper.js';
import { ID3v22TagMapper } from '../id3v2/ID3v22TagMapper.js';
import { APEv2TagMapper } from '../apev2/APEv2TagMapper.js';
import { MP4TagMapper } from '../mp4/MP4TagMapper.js';
import { VorbisTagMapper } from '../ogg/vorbis/VorbisTagMapper.js';
import { RiffInfoTagMapper } from '../riff/RiffInfoTagMap.js';
import { MatroskaTagMapper } from '../matroska/MatroskaTagMapper.js';
import { AiffTagMapper } from '../aiff/AiffTagMap.js';
import { InternalParserError } from '../ParseError.js';
export class CombinedTagMapper {
constructor() {
this.tagMappers = {};
[
new ID3v1TagMapper(),
new ID3v22TagMapper(),
new ID3v24TagMapper(),
new MP4TagMapper(),
new MP4TagMapper(),
new VorbisTagMapper(),
new APEv2TagMapper(),
new AsfTagMapper(),
new RiffInfoTagMapper(),
new MatroskaTagMapper(),
new AiffTagMapper()
].forEach(mapper => {
this.registerTagMapper(mapper);
});
}
/**
* Convert native to generic (common) tags
* @param tagType Originating tag format
* @param tag Native tag to map to a generic tag id
* @param warnings
* @return Generic tag result (output of this function)
*/
mapTag(tagType, tag, warnings) {
const tagMapper = this.tagMappers[tagType];
if (tagMapper) {
return this.tagMappers[tagType].mapGenericTag(tag, warnings);
}
throw new InternalParserError(`No generic tag mapper defined for tag-format: ${tagType}`);
}
registerTagMapper(genericTagMapper) {
for (const tagType of genericTagMapper.tagTypes) {
this.tagMappers[tagType] = genericTagMapper;
}
}
}