taglib-wasm
Version:
TagLib for TypeScript platforms: Deno, Node.js, Bun, Electron, browsers, and Cloudflare Workers
190 lines (189 loc) • 4.73 kB
JavaScript
const Tags = {
// Basic Properties
/** Track/song title */
Title: "TITLE",
/** Primary performer(s) */
Artist: "ARTIST",
/** Album/collection name */
Album: "ALBUM",
/** Date of recording (year) */
Date: "DATE",
/** Track number on album */
TrackNumber: "TRACKNUMBER",
/** Musical genre */
Genre: "GENRE",
/** Comments/notes */
Comment: "COMMENT",
// Extended Properties
/** Band/orchestra/ensemble */
AlbumArtist: "ALBUMARTIST",
/** Original composer(s) */
Composer: "COMPOSER",
/** Copyright information */
Copyright: "COPYRIGHT",
/** Encoding software/person */
EncodedBy: "ENCODEDBY",
/** Disc number for multi-disc sets */
DiscNumber: "DISCNUMBER",
/** Beats per minute */
Bpm: "BPM",
/** Lyrics/text writer(s) */
Lyricist: "LYRICIST",
/** Conductor */
Conductor: "CONDUCTOR",
/** Person who remixed */
Remixer: "REMIXEDBY",
/** Language of vocals/lyrics */
Language: "LANGUAGE",
/** Publisher */
Publisher: "PUBLISHER",
/** Mood/atmosphere */
Mood: "MOOD",
/** Media type (CD, vinyl, etc.) */
Media: "MEDIA",
/** Radio station owner */
RadioStationOwner: "RADIOSTATIONOWNER",
/** Producer */
Producer: "PRODUCER",
/** Album subtitle */
Subtitle: "SUBTITLE",
/** Release label */
Label: "LABEL",
// Sorting Properties
/** Sort name for title */
TitleSort: "TITLESORT",
/** Sort name for artist */
ArtistSort: "ARTISTSORT",
/** Sort name for album artist */
AlbumArtistSort: "ALBUMARTISTSORT",
/** Sort name for album */
AlbumSort: "ALBUMSORT",
/** Sort name for composer */
ComposerSort: "COMPOSERSORT",
// Identifiers
/** International Standard Recording Code */
Isrc: "ISRC",
/** Amazon Standard Identification Number */
Asin: "ASIN",
/** Catalog number */
CatalogNumber: "CATALOGNUMBER",
/** Barcode (EAN/UPC) */
Barcode: "BARCODE",
// MusicBrainz Identifiers
/** MusicBrainz Artist ID */
MusicBrainzArtistId: "MUSICBRAINZ_ARTISTID",
/** MusicBrainz Release Artist ID */
MusicBrainzReleaseArtistId: "MUSICBRAINZ_ALBUMARTISTID",
/** MusicBrainz Work ID */
MusicBrainzWorkId: "MUSICBRAINZ_WORKID",
/** MusicBrainz Release ID */
MusicBrainzReleaseId: "MUSICBRAINZ_ALBUMID",
/** MusicBrainz Recording ID */
MusicBrainzRecordingId: "MUSICBRAINZ_TRACKID",
/** MusicBrainz Track ID (deprecated, use RecordingId) */
MusicBrainzTrackId: "MUSICBRAINZ_TRACKID",
/** MusicBrainz Release Group ID */
MusicBrainzReleaseGroupId: "MUSICBRAINZ_RELEASEGROUPID",
/** MusicBrainz Release Track ID */
MusicBrainzReleaseTrackId: "MUSICBRAINZ_RELEASETRACKID",
// Podcast Properties
/** Podcast identifier */
PodcastId: "PODCASTID",
/** Podcast URL */
PodcastUrl: "PODCASTURL",
// Grouping and Work
/** Content group/work */
Grouping: "GROUPING",
/** Work name */
Work: "WORK",
// Additional Metadata
/** Lyrics content */
Lyrics: "LYRICS",
/** Album gain (ReplayGain) */
AlbumGain: "REPLAYGAIN_ALBUM_GAIN",
/** Album peak (ReplayGain) */
AlbumPeak: "REPLAYGAIN_ALBUM_PEAK",
/** Track gain (ReplayGain) */
TrackGain: "REPLAYGAIN_TRACK_GAIN",
/** Track peak (ReplayGain) */
TrackPeak: "REPLAYGAIN_TRACK_PEAK",
// Special handling
/** Original artist for covers */
OriginalArtist: "ORIGINALARTIST",
/** Original album */
OriginalAlbum: "ORIGINALALBUM",
/** Original release date */
OriginalDate: "ORIGINALDATE",
/** Script/writing system */
Script: "SCRIPT",
/** Involved people list */
InvolvedPeopleList: "INVOLVEDPEOPLELIST",
// Technical Properties
/** Encoder settings/software */
EncoderSettings: "ENCODERSETTINGS",
/** Source media */
SourceMedia: "SOURCEMEDIA"
};
function isValidTagName(name) {
return Object.values(Tags).includes(name);
}
function getAllTagNames() {
return Object.values(Tags);
}
const FormatMappings = {
Title: {
id3v2: "TIT2",
mp4: "\xA9nam",
vorbis: "TITLE",
ape: "Title",
riff: "INAM"
},
Artist: {
id3v2: "TPE1",
mp4: "\xA9ART",
vorbis: "ARTIST",
ape: "Artist",
riff: "IART"
},
Album: {
id3v2: "TALB",
mp4: "\xA9alb",
vorbis: "ALBUM",
ape: "Album",
riff: "IPRD"
},
Date: {
id3v2: "TDRC",
mp4: "\xA9day",
vorbis: "DATE",
ape: "Year",
riff: "ICRD"
},
Genre: {
id3v2: "TCON",
mp4: "\xA9gen",
vorbis: "GENRE",
ape: "Genre",
riff: "IGNR"
},
Comment: {
id3v2: "COMM",
mp4: "\xA9cmt",
vorbis: "COMMENT",
ape: "Comment",
riff: "ICMT"
},
TrackNumber: {
id3v2: "TRCK",
mp4: "trkn",
vorbis: "TRACKNUMBER",
ape: "Track",
riff: "ITRK"
}
};
export {
FormatMappings,
Tags,
getAllTagNames,
isValidTagName
};