music-metadata 7.11.1 → 7.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/README.md +432 -432
  2. package/lib/ParserFactory.d.ts +49 -49
  3. package/lib/ParserFactory.js +251 -251
  4. package/lib/aiff/AiffParser.d.ts +15 -15
  5. package/lib/aiff/AiffParser.js +85 -85
  6. package/lib/aiff/AiffToken.d.ts +22 -22
  7. package/lib/aiff/AiffToken.js +43 -43
  8. package/lib/apev2/APEv2Parser.d.ts +30 -30
  9. package/lib/apev2/APEv2Parser.js +162 -162
  10. package/lib/apev2/APEv2TagMapper.d.ts +4 -4
  11. package/lib/apev2/APEv2TagMapper.js +87 -86
  12. package/lib/apev2/APEv2Token.d.ts +100 -100
  13. package/lib/apev2/APEv2Token.js +127 -126
  14. package/lib/asf/AsfObject.d.ts +319 -319
  15. package/lib/asf/AsfObject.js +384 -384
  16. package/lib/asf/AsfParser.d.ts +17 -17
  17. package/lib/asf/AsfParser.js +135 -135
  18. package/lib/asf/AsfTagMapper.d.ts +7 -7
  19. package/lib/asf/AsfTagMapper.js +96 -95
  20. package/lib/asf/AsfUtil.d.ts +13 -13
  21. package/lib/asf/AsfUtil.js +40 -40
  22. package/lib/asf/GUID.d.ts +86 -86
  23. package/lib/asf/GUID.js +123 -123
  24. package/lib/common/BasicParser.d.ts +17 -17
  25. package/lib/common/BasicParser.js +18 -18
  26. package/lib/common/CaseInsensitiveTagMap.d.ts +10 -10
  27. package/lib/common/CaseInsensitiveTagMap.js +22 -21
  28. package/lib/common/CombinedTagMapper.d.ts +19 -19
  29. package/lib/common/CombinedTagMapper.js +52 -51
  30. package/lib/common/FourCC.d.ts +6 -6
  31. package/lib/common/FourCC.js +29 -28
  32. package/lib/common/GenericTagMapper.d.ts +51 -51
  33. package/lib/common/GenericTagMapper.js +56 -55
  34. package/lib/common/GenericTagTypes.d.ts +33 -33
  35. package/lib/common/GenericTagTypes.js +132 -131
  36. package/lib/common/MetadataCollector.d.ts +76 -76
  37. package/lib/common/MetadataCollector.js +276 -274
  38. package/lib/common/RandomFileReader.d.ts +20 -20
  39. package/lib/common/RandomFileReader.js +37 -37
  40. package/lib/common/RandomUint8ArrayReader.d.ts +18 -18
  41. package/lib/common/RandomUint8ArrayReader.js +25 -25
  42. package/lib/common/Util.d.ts +57 -57
  43. package/lib/common/Util.js +170 -169
  44. package/lib/core.d.ts +48 -48
  45. package/lib/core.js +90 -90
  46. package/lib/dsdiff/DsdiffParser.d.ts +14 -14
  47. package/lib/dsdiff/DsdiffParser.js +143 -143
  48. package/lib/dsdiff/DsdiffToken.d.ts +9 -9
  49. package/lib/dsdiff/DsdiffToken.js +21 -21
  50. package/lib/dsf/DsfChunk.d.ts +86 -86
  51. package/lib/dsf/DsfChunk.js +54 -54
  52. package/lib/dsf/DsfParser.d.ts +9 -9
  53. package/lib/dsf/DsfParser.js +56 -56
  54. package/lib/flac/FlacParser.d.ts +28 -28
  55. package/lib/flac/FlacParser.js +175 -175
  56. package/lib/id3v1/ID3v1Parser.d.ts +13 -13
  57. package/lib/id3v1/ID3v1Parser.js +134 -134
  58. package/lib/id3v1/ID3v1TagMap.d.ts +4 -4
  59. package/lib/id3v1/ID3v1TagMap.js +23 -22
  60. package/lib/id3v2/AbstractID3Parser.d.ts +17 -17
  61. package/lib/id3v2/AbstractID3Parser.js +60 -60
  62. package/lib/id3v2/FrameParser.d.ts +32 -32
  63. package/lib/id3v2/FrameParser.js +323 -323
  64. package/lib/id3v2/ID3v22TagMapper.d.ts +9 -9
  65. package/lib/id3v2/ID3v22TagMapper.js +56 -54
  66. package/lib/id3v2/ID3v24TagMapper.d.ts +14 -14
  67. package/lib/id3v2/ID3v24TagMapper.js +194 -193
  68. package/lib/id3v2/ID3v2Parser.d.ts +29 -29
  69. package/lib/id3v2/ID3v2Parser.js +194 -194
  70. package/lib/id3v2/ID3v2Token.d.ts +73 -73
  71. package/lib/id3v2/ID3v2Token.js +106 -106
  72. package/lib/iff/index.d.ts +33 -33
  73. package/lib/iff/index.js +19 -19
  74. package/lib/index.d.ts +34 -34
  75. package/lib/index.js +64 -64
  76. package/lib/lyrics3/Lyrics3.d.ts +3 -3
  77. package/lib/lyrics3/Lyrics3.js +17 -17
  78. package/lib/matroska/MatroskaDtd.d.ts +8 -8
  79. package/lib/matroska/MatroskaDtd.js +279 -279
  80. package/lib/matroska/MatroskaParser.d.ts +37 -37
  81. package/lib/matroska/MatroskaParser.js +235 -234
  82. package/lib/matroska/MatroskaTagMapper.d.ts +4 -4
  83. package/lib/matroska/MatroskaTagMapper.js +36 -35
  84. package/lib/matroska/types.d.ts +175 -175
  85. package/lib/matroska/types.js +32 -32
  86. package/lib/mp4/Atom.d.ts +16 -16
  87. package/lib/mp4/Atom.js +70 -70
  88. package/lib/mp4/AtomToken.d.ts +395 -395
  89. package/lib/mp4/AtomToken.js +406 -406
  90. package/lib/mp4/MP4Parser.d.ts +30 -31
  91. package/lib/mp4/MP4Parser.js +511 -515
  92. package/lib/mp4/MP4TagMapper.d.ts +5 -5
  93. package/lib/mp4/MP4TagMapper.js +116 -115
  94. package/lib/mpeg/ExtendedLameHeader.d.ts +27 -27
  95. package/lib/mpeg/ExtendedLameHeader.js +31 -31
  96. package/lib/mpeg/MpegParser.d.ts +49 -49
  97. package/lib/mpeg/MpegParser.js +529 -529
  98. package/lib/mpeg/ReplayGainDataFormat.d.ts +55 -55
  99. package/lib/mpeg/ReplayGainDataFormat.js +69 -69
  100. package/lib/mpeg/XingTag.d.ts +45 -45
  101. package/lib/mpeg/XingTag.js +69 -69
  102. package/lib/musepack/index.d.ts +5 -5
  103. package/lib/musepack/index.js +32 -32
  104. package/lib/musepack/sv7/BitReader.d.ts +13 -13
  105. package/lib/musepack/sv7/BitReader.js +54 -54
  106. package/lib/musepack/sv7/MpcSv7Parser.d.ts +8 -8
  107. package/lib/musepack/sv7/MpcSv7Parser.js +46 -46
  108. package/lib/musepack/sv7/StreamVersion7.d.ts +28 -28
  109. package/lib/musepack/sv7/StreamVersion7.js +41 -41
  110. package/lib/musepack/sv8/MpcSv8Parser.d.ts +6 -6
  111. package/lib/musepack/sv8/MpcSv8Parser.js +55 -55
  112. package/lib/musepack/sv8/StreamVersion8.d.ts +40 -40
  113. package/lib/musepack/sv8/StreamVersion8.js +80 -80
  114. package/lib/ogg/Ogg.d.ts +72 -72
  115. package/lib/ogg/Ogg.js +2 -2
  116. package/lib/ogg/OggParser.d.ts +23 -23
  117. package/lib/ogg/OggParser.js +126 -126
  118. package/lib/ogg/opus/Opus.d.ts +48 -48
  119. package/lib/ogg/opus/Opus.js +28 -28
  120. package/lib/ogg/opus/OpusParser.d.ts +25 -25
  121. package/lib/ogg/opus/OpusParser.js +56 -56
  122. package/lib/ogg/speex/Speex.d.ts +36 -36
  123. package/lib/ogg/speex/Speex.js +31 -31
  124. package/lib/ogg/speex/SpeexParser.d.ts +22 -22
  125. package/lib/ogg/speex/SpeexParser.js +35 -35
  126. package/lib/ogg/theora/Theora.d.ts +20 -20
  127. package/lib/ogg/theora/Theora.js +23 -23
  128. package/lib/ogg/theora/TheoraParser.d.ts +28 -28
  129. package/lib/ogg/theora/TheoraParser.js +44 -44
  130. package/lib/ogg/vorbis/Vorbis.d.ts +79 -79
  131. package/lib/ogg/vorbis/Vorbis.js +78 -78
  132. package/lib/ogg/vorbis/VorbisDecoder.d.ts +12 -12
  133. package/lib/ogg/vorbis/VorbisDecoder.js +32 -32
  134. package/lib/ogg/vorbis/VorbisParser.d.ts +36 -36
  135. package/lib/ogg/vorbis/VorbisParser.js +128 -128
  136. package/lib/ogg/vorbis/VorbisTagMapper.d.ts +7 -7
  137. package/lib/ogg/vorbis/VorbisTagMapper.js +133 -132
  138. package/lib/riff/RiffChunk.d.ts +16 -16
  139. package/lib/riff/RiffChunk.js +32 -32
  140. package/lib/riff/RiffInfoTagMap.d.ts +10 -10
  141. package/lib/riff/RiffInfoTagMap.js +38 -37
  142. package/lib/type.d.ts +599 -599
  143. package/lib/type.js +14 -13
  144. package/lib/wav/WaveChunk.d.ts +64 -64
  145. package/lib/wav/WaveChunk.js +65 -65
  146. package/lib/wav/WaveParser.d.ts +24 -24
  147. package/lib/wav/WaveParser.js +144 -144
  148. package/lib/wavpack/WavPackParser.d.ts +14 -14
  149. package/lib/wavpack/WavPackParser.js +105 -105
  150. package/lib/wavpack/WavPackToken.d.ts +64 -64
  151. package/lib/wavpack/WavPackToken.js +76 -76
  152. package/package.json +142 -142
@@ -1,128 +1,128 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VorbisParser = void 0;
4
- const Token = require("token-types");
5
- const _debug = require("debug");
6
- const VorbisDecoder_1 = require("./VorbisDecoder");
7
- const Vorbis_1 = require("./Vorbis");
8
- const debug = _debug('music-metadata:parser:ogg:vorbis1');
9
- /**
10
- * Vorbis 1 Parser.
11
- * Used by OggParser
12
- */
13
- class VorbisParser {
14
- constructor(metadata, options) {
15
- this.metadata = metadata;
16
- this.options = options;
17
- this.pageSegments = [];
18
- }
19
- /**
20
- * Vorbis 1 parser
21
- * @param header Ogg Page Header
22
- * @param pageData Page data
23
- */
24
- parsePage(header, pageData) {
25
- if (header.headerType.firstPage) {
26
- this.parseFirstPage(header, pageData);
27
- }
28
- else {
29
- if (header.headerType.continued) {
30
- if (this.pageSegments.length === 0) {
31
- throw new Error("Cannot continue on previous page");
32
- }
33
- this.pageSegments.push(pageData);
34
- }
35
- if (header.headerType.lastPage || !header.headerType.continued) {
36
- // Flush page segments
37
- if (this.pageSegments.length > 0) {
38
- const fullPage = Buffer.concat(this.pageSegments);
39
- this.parseFullPage(fullPage);
40
- }
41
- // Reset page segments
42
- this.pageSegments = header.headerType.lastPage ? [] : [pageData];
43
- }
44
- }
45
- if (header.headerType.lastPage) {
46
- this.calculateDuration(header);
47
- }
48
- }
49
- flush() {
50
- this.parseFullPage(Buffer.concat(this.pageSegments));
51
- }
52
- parseUserComment(pageData, offset) {
53
- const decoder = new VorbisDecoder_1.VorbisDecoder(pageData, offset);
54
- const tag = decoder.parseUserComment();
55
- this.addTag(tag.key, tag.value);
56
- return tag.len;
57
- }
58
- addTag(id, value) {
59
- if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {
60
- if (this.options.skipCovers) {
61
- debug(`Ignore picture`);
62
- return;
63
- }
64
- value = Vorbis_1.VorbisPictureToken.fromBase64(value);
65
- debug(`Push picture: id=${id}, format=${value.format}`);
66
- }
67
- else {
68
- debug(`Push tag: id=${id}, value=${value}`);
69
- }
70
- this.metadata.addTag('vorbis', id, value);
71
- }
72
- calculateDuration(header) {
73
- if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {
74
- // Calculate duration
75
- this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);
76
- this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);
77
- }
78
- }
79
- /**
80
- * Parse first Ogg/Vorbis page
81
- * @param {IPageHeader} header
82
- * @param {Buffer} pageData
83
- */
84
- parseFirstPage(header, pageData) {
85
- this.metadata.setFormat('codec', 'Vorbis I');
86
- debug("Parse first page");
87
- // Parse Vorbis common header
88
- const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
89
- if (commonHeader.vorbis !== 'vorbis')
90
- throw new Error('Metadata does not look like Vorbis');
91
- if (commonHeader.packetType === 1) {
92
- const idHeader = Vorbis_1.IdentificationHeader.get(pageData, Vorbis_1.CommonHeader.len);
93
- this.metadata.setFormat('sampleRate', idHeader.sampleRate);
94
- this.metadata.setFormat('bitrate', idHeader.bitrateNominal);
95
- this.metadata.setFormat('numberOfChannels', idHeader.channelMode);
96
- debug("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);
97
- }
98
- else
99
- throw new Error('First Ogg page should be type 1: the identification header');
100
- }
101
- parseFullPage(pageData) {
102
- // New page
103
- const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
104
- debug("Parse full page: type=%s, byteLength=%s", commonHeader.packetType, pageData.byteLength);
105
- switch (commonHeader.packetType) {
106
- case 3: // type 3: comment header
107
- return this.parseUserCommentList(pageData, Vorbis_1.CommonHeader.len);
108
- case 1: // type 1: the identification header
109
- case 5: // type 5: setup header type
110
- break; // ignore
111
- }
112
- }
113
- /**
114
- * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2
115
- */
116
- parseUserCommentList(pageData, offset) {
117
- const strLen = Token.UINT32_LE.get(pageData, offset);
118
- offset += 4;
119
- // const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);
120
- offset += strLen;
121
- let userCommentListLength = Token.UINT32_LE.get(pageData, offset);
122
- offset += 4;
123
- while (userCommentListLength-- > 0) {
124
- offset += this.parseUserComment(pageData, offset);
125
- }
126
- }
127
- }
128
- exports.VorbisParser = VorbisParser;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VorbisParser = void 0;
4
+ const Token = require("token-types");
5
+ const _debug = require("debug");
6
+ const VorbisDecoder_1 = require("./VorbisDecoder");
7
+ const Vorbis_1 = require("./Vorbis");
8
+ const debug = _debug('music-metadata:parser:ogg:vorbis1');
9
+ /**
10
+ * Vorbis 1 Parser.
11
+ * Used by OggParser
12
+ */
13
+ class VorbisParser {
14
+ constructor(metadata, options) {
15
+ this.metadata = metadata;
16
+ this.options = options;
17
+ this.pageSegments = [];
18
+ }
19
+ /**
20
+ * Vorbis 1 parser
21
+ * @param header Ogg Page Header
22
+ * @param pageData Page data
23
+ */
24
+ parsePage(header, pageData) {
25
+ if (header.headerType.firstPage) {
26
+ this.parseFirstPage(header, pageData);
27
+ }
28
+ else {
29
+ if (header.headerType.continued) {
30
+ if (this.pageSegments.length === 0) {
31
+ throw new Error("Cannot continue on previous page");
32
+ }
33
+ this.pageSegments.push(pageData);
34
+ }
35
+ if (header.headerType.lastPage || !header.headerType.continued) {
36
+ // Flush page segments
37
+ if (this.pageSegments.length > 0) {
38
+ const fullPage = Buffer.concat(this.pageSegments);
39
+ this.parseFullPage(fullPage);
40
+ }
41
+ // Reset page segments
42
+ this.pageSegments = header.headerType.lastPage ? [] : [pageData];
43
+ }
44
+ }
45
+ if (header.headerType.lastPage) {
46
+ this.calculateDuration(header);
47
+ }
48
+ }
49
+ flush() {
50
+ this.parseFullPage(Buffer.concat(this.pageSegments));
51
+ }
52
+ parseUserComment(pageData, offset) {
53
+ const decoder = new VorbisDecoder_1.VorbisDecoder(pageData, offset);
54
+ const tag = decoder.parseUserComment();
55
+ this.addTag(tag.key, tag.value);
56
+ return tag.len;
57
+ }
58
+ addTag(id, value) {
59
+ if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {
60
+ if (this.options.skipCovers) {
61
+ debug(`Ignore picture`);
62
+ return;
63
+ }
64
+ value = Vorbis_1.VorbisPictureToken.fromBase64(value);
65
+ debug(`Push picture: id=${id}, format=${value.format}`);
66
+ }
67
+ else {
68
+ debug(`Push tag: id=${id}, value=${value}`);
69
+ }
70
+ this.metadata.addTag('vorbis', id, value);
71
+ }
72
+ calculateDuration(header) {
73
+ if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {
74
+ // Calculate duration
75
+ this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);
76
+ this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);
77
+ }
78
+ }
79
+ /**
80
+ * Parse first Ogg/Vorbis page
81
+ * @param {IPageHeader} header
82
+ * @param {Buffer} pageData
83
+ */
84
+ parseFirstPage(header, pageData) {
85
+ this.metadata.setFormat('codec', 'Vorbis I');
86
+ debug("Parse first page");
87
+ // Parse Vorbis common header
88
+ const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
89
+ if (commonHeader.vorbis !== 'vorbis')
90
+ throw new Error('Metadata does not look like Vorbis');
91
+ if (commonHeader.packetType === 1) {
92
+ const idHeader = Vorbis_1.IdentificationHeader.get(pageData, Vorbis_1.CommonHeader.len);
93
+ this.metadata.setFormat('sampleRate', idHeader.sampleRate);
94
+ this.metadata.setFormat('bitrate', idHeader.bitrateNominal);
95
+ this.metadata.setFormat('numberOfChannels', idHeader.channelMode);
96
+ debug("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);
97
+ }
98
+ else
99
+ throw new Error('First Ogg page should be type 1: the identification header');
100
+ }
101
+ parseFullPage(pageData) {
102
+ // New page
103
+ const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
104
+ debug("Parse full page: type=%s, byteLength=%s", commonHeader.packetType, pageData.byteLength);
105
+ switch (commonHeader.packetType) {
106
+ case 3: // type 3: comment header
107
+ return this.parseUserCommentList(pageData, Vorbis_1.CommonHeader.len);
108
+ case 1: // type 1: the identification header
109
+ case 5: // type 5: setup header type
110
+ break; // ignore
111
+ }
112
+ }
113
+ /**
114
+ * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2
115
+ */
116
+ parseUserCommentList(pageData, offset) {
117
+ const strLen = Token.UINT32_LE.get(pageData, offset);
118
+ offset += 4;
119
+ // const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);
120
+ offset += strLen;
121
+ let userCommentListLength = Token.UINT32_LE.get(pageData, offset);
122
+ offset += 4;
123
+ while (userCommentListLength-- > 0) {
124
+ offset += this.parseUserComment(pageData, offset);
125
+ }
126
+ }
127
+ }
128
+ exports.VorbisParser = VorbisParser;
@@ -1,7 +1,7 @@
1
- import { CommonTagMapper } from '../../common/GenericTagMapper';
2
- import { IRating, ITag } from '../../type';
3
- export declare class VorbisTagMapper extends CommonTagMapper {
4
- static toRating(email: string, rating: string): IRating;
5
- constructor();
6
- protected postMap(tag: ITag): void;
7
- }
1
+ import { CommonTagMapper } from '../../common/GenericTagMapper';
2
+ import { IRating, ITag } from '../../type';
3
+ export declare class VorbisTagMapper extends CommonTagMapper {
4
+ static toRating(email: string, rating: string): IRating;
5
+ constructor();
6
+ protected postMap(tag: ITag): void;
7
+ }
@@ -1,132 +1,133 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VorbisTagMapper = void 0;
4
- const GenericTagMapper_1 = require("../../common/GenericTagMapper");
5
- /**
6
- * Vorbis tag mappings
7
- *
8
- * Mapping from native header format to one or possibly more 'common' entries
9
- * The common entries aim to read the same information from different media files
10
- * independent of the underlying format
11
- */
12
- const vorbisTagMap = {
13
- TITLE: 'title',
14
- ARTIST: 'artist',
15
- ARTISTS: 'artists',
16
- ALBUMARTIST: 'albumartist',
17
- 'ALBUM ARTIST': 'albumartist',
18
- ALBUM: 'album',
19
- DATE: 'date',
20
- ORIGINALDATE: 'originaldate',
21
- ORIGINALYEAR: 'originalyear',
22
- COMMENT: 'comment',
23
- TRACKNUMBER: 'track',
24
- DISCNUMBER: 'disk',
25
- GENRE: 'genre',
26
- METADATA_BLOCK_PICTURE: 'picture',
27
- COMPOSER: 'composer',
28
- LYRICS: 'lyrics',
29
- ALBUMSORT: 'albumsort',
30
- TITLESORT: 'titlesort',
31
- WORK: 'work',
32
- ARTISTSORT: 'artistsort',
33
- ALBUMARTISTSORT: 'albumartistsort',
34
- COMPOSERSORT: 'composersort',
35
- LYRICIST: 'lyricist',
36
- WRITER: 'writer',
37
- CONDUCTOR: 'conductor',
38
- // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo
39
- REMIXER: 'remixer',
40
- ARRANGER: 'arranger',
41
- ENGINEER: 'engineer',
42
- PRODUCER: 'producer',
43
- DJMIXER: 'djmixer',
44
- MIXER: 'mixer',
45
- LABEL: 'label',
46
- GROUPING: 'grouping',
47
- SUBTITLE: 'subtitle',
48
- DISCSUBTITLE: 'discsubtitle',
49
- TRACKTOTAL: 'totaltracks',
50
- DISCTOTAL: 'totaldiscs',
51
- COMPILATION: 'compilation',
52
- RATING: 'rating',
53
- BPM: 'bpm',
54
- KEY: 'key',
55
- MOOD: 'mood',
56
- MEDIA: 'media',
57
- CATALOGNUMBER: 'catalognumber',
58
- RELEASESTATUS: 'releasestatus',
59
- RELEASETYPE: 'releasetype',
60
- RELEASECOUNTRY: 'releasecountry',
61
- SCRIPT: 'script',
62
- LANGUAGE: 'language',
63
- COPYRIGHT: 'copyright',
64
- LICENSE: 'license',
65
- ENCODEDBY: 'encodedby',
66
- ENCODERSETTINGS: 'encodersettings',
67
- BARCODE: 'barcode',
68
- ISRC: 'isrc',
69
- ASIN: 'asin',
70
- MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',
71
- MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',
72
- MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',
73
- MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',
74
- MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',
75
- MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',
76
- MUSICBRAINZ_WORKID: 'musicbrainz_workid',
77
- MUSICBRAINZ_TRMID: 'musicbrainz_trmid',
78
- MUSICBRAINZ_DISCID: 'musicbrainz_discid',
79
- ACOUSTID_ID: 'acoustid_id',
80
- ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',
81
- MUSICIP_PUID: 'musicip_puid',
82
- // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo
83
- WEBSITE: 'website',
84
- NOTES: 'notes',
85
- TOTALTRACKS: 'totaltracks',
86
- TOTALDISCS: 'totaldiscs',
87
- // Discogs
88
- DISCOGS_ARTIST_ID: 'discogs_artist_id',
89
- DISCOGS_ARTISTS: 'artists',
90
- DISCOGS_ARTIST_NAME: 'artists',
91
- DISCOGS_ALBUM_ARTISTS: 'albumartist',
92
- DISCOGS_CATALOG: 'catalognumber',
93
- DISCOGS_COUNTRY: 'releasecountry',
94
- DISCOGS_DATE: 'originaldate',
95
- DISCOGS_LABEL: 'label',
96
- DISCOGS_LABEL_ID: 'discogs_label_id',
97
- DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',
98
- DISCOGS_RATING: 'discogs_rating',
99
- DISCOGS_RELEASED: 'date',
100
- DISCOGS_RELEASE_ID: 'discogs_release_id',
101
- DISCOGS_VOTES: 'discogs_votes',
102
- CATALOGID: 'catalognumber',
103
- STYLE: 'genre',
104
- //
105
- REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',
106
- REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',
107
- REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',
108
- REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',
109
- // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:
110
- REPLAYGAIN_MINMAX: 'replaygain_track_minmax',
111
- REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',
112
- REPLAYGAIN_UNDO: 'replaygain_undo'
113
- };
114
- class VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {
115
- static toRating(email, rating) {
116
- return {
117
- source: email ? email.toLowerCase() : email,
118
- rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore
119
- };
120
- }
121
- constructor() {
122
- super(['vorbis'], vorbisTagMap);
123
- }
124
- postMap(tag) {
125
- if (tag.id.indexOf('RATING:') === 0) {
126
- const keys = tag.id.split(':');
127
- tag.value = VorbisTagMapper.toRating(keys[1], tag.value);
128
- tag.id = keys[0];
129
- }
130
- }
131
- }
132
- exports.VorbisTagMapper = VorbisTagMapper;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VorbisTagMapper = void 0;
4
+ const GenericTagMapper_1 = require("../../common/GenericTagMapper");
5
+ /**
6
+ * Vorbis tag mappings
7
+ *
8
+ * Mapping from native header format to one or possibly more 'common' entries
9
+ * The common entries aim to read the same information from different media files
10
+ * independent of the underlying format
11
+ */
12
+ const vorbisTagMap = {
13
+ TITLE: 'title',
14
+ ARTIST: 'artist',
15
+ ARTISTS: 'artists',
16
+ ALBUMARTIST: 'albumartist',
17
+ 'ALBUM ARTIST': 'albumartist',
18
+ ALBUM: 'album',
19
+ DATE: 'date',
20
+ ORIGINALDATE: 'originaldate',
21
+ ORIGINALYEAR: 'originalyear',
22
+ COMMENT: 'comment',
23
+ TRACKNUMBER: 'track',
24
+ DISCNUMBER: 'disk',
25
+ GENRE: 'genre',
26
+ METADATA_BLOCK_PICTURE: 'picture',
27
+ COMPOSER: 'composer',
28
+ LYRICS: 'lyrics',
29
+ ALBUMSORT: 'albumsort',
30
+ TITLESORT: 'titlesort',
31
+ WORK: 'work',
32
+ ARTISTSORT: 'artistsort',
33
+ ALBUMARTISTSORT: 'albumartistsort',
34
+ COMPOSERSORT: 'composersort',
35
+ LYRICIST: 'lyricist',
36
+ WRITER: 'writer',
37
+ CONDUCTOR: 'conductor',
38
+ // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo
39
+ REMIXER: 'remixer',
40
+ ARRANGER: 'arranger',
41
+ ENGINEER: 'engineer',
42
+ PRODUCER: 'producer',
43
+ DJMIXER: 'djmixer',
44
+ MIXER: 'mixer',
45
+ LABEL: 'label',
46
+ GROUPING: 'grouping',
47
+ SUBTITLE: 'subtitle',
48
+ DISCSUBTITLE: 'discsubtitle',
49
+ TRACKTOTAL: 'totaltracks',
50
+ DISCTOTAL: 'totaldiscs',
51
+ COMPILATION: 'compilation',
52
+ RATING: 'rating',
53
+ BPM: 'bpm',
54
+ KEY: 'key',
55
+ MOOD: 'mood',
56
+ MEDIA: 'media',
57
+ CATALOGNUMBER: 'catalognumber',
58
+ RELEASESTATUS: 'releasestatus',
59
+ RELEASETYPE: 'releasetype',
60
+ RELEASECOUNTRY: 'releasecountry',
61
+ SCRIPT: 'script',
62
+ LANGUAGE: 'language',
63
+ COPYRIGHT: 'copyright',
64
+ LICENSE: 'license',
65
+ ENCODEDBY: 'encodedby',
66
+ ENCODERSETTINGS: 'encodersettings',
67
+ BARCODE: 'barcode',
68
+ ISRC: 'isrc',
69
+ ASIN: 'asin',
70
+ MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',
71
+ MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',
72
+ MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',
73
+ MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',
74
+ MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',
75
+ MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',
76
+ MUSICBRAINZ_WORKID: 'musicbrainz_workid',
77
+ MUSICBRAINZ_TRMID: 'musicbrainz_trmid',
78
+ MUSICBRAINZ_DISCID: 'musicbrainz_discid',
79
+ ACOUSTID_ID: 'acoustid_id',
80
+ ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',
81
+ MUSICIP_PUID: 'musicip_puid',
82
+ // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo
83
+ WEBSITE: 'website',
84
+ NOTES: 'notes',
85
+ TOTALTRACKS: 'totaltracks',
86
+ TOTALDISCS: 'totaldiscs',
87
+ // Discogs
88
+ DISCOGS_ARTIST_ID: 'discogs_artist_id',
89
+ DISCOGS_ARTISTS: 'artists',
90
+ DISCOGS_ARTIST_NAME: 'artists',
91
+ DISCOGS_ALBUM_ARTISTS: 'albumartist',
92
+ DISCOGS_CATALOG: 'catalognumber',
93
+ DISCOGS_COUNTRY: 'releasecountry',
94
+ DISCOGS_DATE: 'originaldate',
95
+ DISCOGS_LABEL: 'label',
96
+ DISCOGS_LABEL_ID: 'discogs_label_id',
97
+ DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',
98
+ DISCOGS_RATING: 'discogs_rating',
99
+ DISCOGS_RELEASED: 'date',
100
+ DISCOGS_RELEASE_ID: 'discogs_release_id',
101
+ DISCOGS_VOTES: 'discogs_votes',
102
+ CATALOGID: 'catalognumber',
103
+ STYLE: 'genre',
104
+ //
105
+ REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',
106
+ REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',
107
+ REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',
108
+ REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',
109
+ // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:
110
+ REPLAYGAIN_MINMAX: 'replaygain_track_minmax',
111
+ REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',
112
+ REPLAYGAIN_UNDO: 'replaygain_undo'
113
+ };
114
+ class VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {
115
+ static toRating(email, rating) {
116
+ return {
117
+ source: email ? email.toLowerCase() : email,
118
+ rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore
119
+ };
120
+ }
121
+ constructor() {
122
+ super(['vorbis'], vorbisTagMap);
123
+ }
124
+ postMap(tag) {
125
+ if (tag.id.indexOf('RATING:') === 0) {
126
+ const keys = tag.id.split(':');
127
+ tag.value = VorbisTagMapper.toRating(keys[1], tag.value);
128
+ tag.id = keys[0];
129
+ }
130
+ }
131
+ }
132
+ exports.VorbisTagMapper = VorbisTagMapper;
133
+ //# sourceMappingURL=VorbisTagMapper.js.map
@@ -1,16 +1,16 @@
1
- import { IChunkHeader } from '../iff';
2
- import { IGetToken } from 'strtok3/lib/core';
3
- export { IChunkHeader } from '../iff';
4
- /**
5
- * Common RIFF chunk header
6
- */
7
- export declare const Header: IGetToken<IChunkHeader>;
8
- /**
9
- * Token to parse RIFF-INFO tag value
10
- */
11
- export declare class ListInfoTagValue implements IGetToken<string> {
12
- private tagHeader;
13
- len: number;
14
- constructor(tagHeader: IChunkHeader);
15
- get(buf: any, off: any): string;
16
- }
1
+ import { IGetToken } from 'strtok3/lib/core';
2
+ import { IChunkHeader } from '../iff';
3
+ export { IChunkHeader } from '../iff';
4
+ /**
5
+ * Common RIFF chunk header
6
+ */
7
+ export declare const Header: IGetToken<IChunkHeader>;
8
+ /**
9
+ * Token to parse RIFF-INFO tag value
10
+ */
11
+ export declare class ListInfoTagValue implements IGetToken<string> {
12
+ private tagHeader;
13
+ len: number;
14
+ constructor(tagHeader: IChunkHeader);
15
+ get(buf: any, off: any): string;
16
+ }
@@ -1,32 +1,32 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ListInfoTagValue = exports.Header = void 0;
4
- const Token = require("token-types");
5
- /**
6
- * Common RIFF chunk header
7
- */
8
- exports.Header = {
9
- len: 8,
10
- get: (buf, off) => {
11
- return {
12
- // Group-ID
13
- chunkID: buf.toString('binary', off, off + 4),
14
- // Size
15
- chunkSize: Token.UINT32_LE.get(buf, 4)
16
- };
17
- }
18
- };
19
- /**
20
- * Token to parse RIFF-INFO tag value
21
- */
22
- class ListInfoTagValue {
23
- constructor(tagHeader) {
24
- this.tagHeader = tagHeader;
25
- this.len = tagHeader.chunkSize;
26
- this.len += this.len & 1; // if it is an odd length, round up to even
27
- }
28
- get(buf, off) {
29
- return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);
30
- }
31
- }
32
- exports.ListInfoTagValue = ListInfoTagValue;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListInfoTagValue = exports.Header = void 0;
4
+ const Token = require("token-types");
5
+ /**
6
+ * Common RIFF chunk header
7
+ */
8
+ exports.Header = {
9
+ len: 8,
10
+ get: (buf, off) => {
11
+ return {
12
+ // Group-ID
13
+ chunkID: buf.toString('binary', off, off + 4),
14
+ // Size
15
+ chunkSize: Token.UINT32_LE.get(buf, 4)
16
+ };
17
+ }
18
+ };
19
+ /**
20
+ * Token to parse RIFF-INFO tag value
21
+ */
22
+ class ListInfoTagValue {
23
+ constructor(tagHeader) {
24
+ this.tagHeader = tagHeader;
25
+ this.len = tagHeader.chunkSize;
26
+ this.len += this.len & 1; // if it is an odd length, round up to even
27
+ }
28
+ get(buf, off) {
29
+ return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);
30
+ }
31
+ }
32
+ exports.ListInfoTagValue = ListInfoTagValue;
@@ -1,10 +1,10 @@
1
- import { INativeTagMap } from '../common/GenericTagTypes';
2
- import { CommonTagMapper } from '../common/GenericTagMapper';
3
- /**
4
- * RIFF Info Tags; part of the EXIF 2.3
5
- * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
6
- */
7
- export declare const riffInfoTagMap: INativeTagMap;
8
- export declare class RiffInfoTagMapper extends CommonTagMapper {
9
- constructor();
10
- }
1
+ import { INativeTagMap } from '../common/GenericTagTypes';
2
+ import { CommonTagMapper } from '../common/GenericTagMapper';
3
+ /**
4
+ * RIFF Info Tags; part of the EXIF 2.3
5
+ * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
6
+ */
7
+ export declare const riffInfoTagMap: INativeTagMap;
8
+ export declare class RiffInfoTagMapper extends CommonTagMapper {
9
+ constructor();
10
+ }