music-metadata
Version:
Music metadata parser for Node.js, supporting virtual any audio and tag format.
93 lines (92 loc) • 3.13 kB
JavaScript
import { CommonTagMapper } from '../common/GenericTagMapper.js';
/**
* ASF Metadata tag mappings.
* See http://msdn.microsoft.com/en-us/library/ms867702.aspx
*/
const asfTagMap = {
Title: 'title',
Author: 'artist',
'WM/AlbumArtist': 'albumartist',
'WM/AlbumTitle': 'album',
'WM/Year': 'date', // changed to 'year' to 'date' based on Picard mappings; ToDo: check me
'WM/OriginalReleaseTime': 'originaldate',
'WM/OriginalReleaseYear': 'originalyear',
Description: 'comment',
'WM/TrackNumber': 'track',
'WM/PartOfSet': 'disk',
'WM/Genre': 'genre',
'WM/Composer': 'composer',
'WM/Lyrics': 'lyrics',
'WM/AlbumSortOrder': 'albumsort',
'WM/TitleSortOrder': 'titlesort',
'WM/ArtistSortOrder': 'artistsort',
'WM/AlbumArtistSortOrder': 'albumartistsort',
'WM/ComposerSortOrder': 'composersort',
'WM/Writer': 'lyricist',
'WM/Conductor': 'conductor',
'WM/ModifiedBy': 'remixer',
'WM/Engineer': 'engineer',
'WM/Producer': 'producer',
'WM/DJMixer': 'djmixer',
'WM/Mixer': 'mixer',
'WM/Publisher': 'label',
'WM/ContentGroupDescription': 'grouping',
'WM/SubTitle': 'subtitle',
'WM/SetSubTitle': 'discsubtitle',
// 'WM/PartOfSet': 'totaldiscs',
'WM/IsCompilation': 'compilation',
'WM/SharedUserRating': 'rating',
'WM/BeatsPerMinute': 'bpm',
'WM/Mood': 'mood',
'WM/Media': 'media',
'WM/CatalogNo': 'catalognumber',
'MusicBrainz/Album Status': 'releasestatus',
'MusicBrainz/Album Type': 'releasetype',
'MusicBrainz/Album Release Country': 'releasecountry',
'WM/Script': 'script',
'WM/Language': 'language',
Copyright: 'copyright',
LICENSE: 'license',
'WM/EncodedBy': 'encodedby',
'WM/EncodingSettings': 'encodersettings',
'WM/Barcode': 'barcode',
'WM/ISRC': 'isrc',
'MusicBrainz/Track Id': 'musicbrainz_recordingid',
'MusicBrainz/Release Track Id': 'musicbrainz_trackid',
'MusicBrainz/Album Id': 'musicbrainz_albumid',
'MusicBrainz/Artist Id': 'musicbrainz_artistid',
'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',
'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',
'MusicBrainz/Work Id': 'musicbrainz_workid',
'MusicBrainz/TRM Id': 'musicbrainz_trmid',
'MusicBrainz/Disc Id': 'musicbrainz_discid',
'Acoustid/Id': 'acoustid_id',
'Acoustid/Fingerprint': 'acoustid_fingerprint',
'MusicIP/PUID': 'musicip_puid',
'WM/ARTISTS': 'artists',
'WM/InitialKey': 'key',
ASIN: 'asin',
'WM/Work': 'work',
'WM/AuthorURL': 'website',
'WM/Picture': 'picture'
};
export class AsfTagMapper extends CommonTagMapper {
static toRating(rating) {
return {
rating: Number.parseFloat(rating + 1) / 5
};
}
constructor() {
super(['asf'], asfTagMap);
}
postMap(tag) {
switch (tag.id) {
case 'WM/SharedUserRating': {
const keys = tag.id.split(':');
tag.value = AsfTagMapper.toRating(tag.value);
tag.id = keys[0];
break;
}
}
}
}