music-metadata 7.11.7 → 7.12.0

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 (155) hide show
  1. package/LICENSE.txt +9 -0
  2. package/README.md +434 -432
  3. package/lib/ParserFactory.d.ts +48 -49
  4. package/lib/ParserFactory.js +252 -251
  5. package/lib/aiff/AiffParser.d.ts +14 -15
  6. package/lib/aiff/AiffParser.js +84 -85
  7. package/lib/aiff/AiffToken.d.ts +22 -22
  8. package/lib/aiff/AiffToken.js +43 -43
  9. package/lib/apev2/APEv2Parser.d.ts +30 -30
  10. package/lib/apev2/APEv2Parser.js +161 -162
  11. package/lib/apev2/APEv2TagMapper.d.ts +4 -4
  12. package/lib/apev2/APEv2TagMapper.js +86 -86
  13. package/lib/apev2/APEv2Token.d.ts +100 -100
  14. package/lib/apev2/APEv2Token.js +126 -126
  15. package/lib/asf/AsfObject.d.ts +319 -319
  16. package/lib/asf/AsfObject.js +384 -384
  17. package/lib/asf/AsfParser.d.ts +17 -17
  18. package/lib/asf/AsfParser.js +135 -135
  19. package/lib/asf/AsfTagMapper.d.ts +7 -7
  20. package/lib/asf/AsfTagMapper.js +95 -95
  21. package/lib/asf/AsfUtil.d.ts +13 -13
  22. package/lib/asf/AsfUtil.js +40 -40
  23. package/lib/asf/GUID.d.ts +84 -86
  24. package/lib/asf/GUID.js +121 -123
  25. package/lib/common/BasicParser.d.ts +17 -17
  26. package/lib/common/BasicParser.js +18 -18
  27. package/lib/common/CaseInsensitiveTagMap.d.ts +10 -10
  28. package/lib/common/CaseInsensitiveTagMap.js +21 -21
  29. package/lib/common/CombinedTagMapper.d.ts +19 -19
  30. package/lib/common/CombinedTagMapper.js +51 -51
  31. package/lib/common/FourCC.d.ts +6 -6
  32. package/lib/common/FourCC.js +28 -28
  33. package/lib/common/GenericTagMapper.d.ts +51 -51
  34. package/lib/common/GenericTagMapper.js +55 -55
  35. package/lib/common/GenericTagTypes.d.ts +33 -33
  36. package/lib/common/GenericTagTypes.js +131 -131
  37. package/lib/common/MetadataCollector.d.ts +76 -76
  38. package/lib/common/MetadataCollector.js +275 -275
  39. package/lib/common/RandomFileReader.d.ts +22 -20
  40. package/lib/common/RandomFileReader.js +34 -37
  41. package/lib/common/RandomUint8ArrayReader.d.ts +18 -18
  42. package/lib/common/RandomUint8ArrayReader.js +25 -25
  43. package/lib/common/Util.d.ts +57 -58
  44. package/lib/common/Util.js +157 -162
  45. package/lib/core.d.ts +48 -48
  46. package/lib/core.js +90 -90
  47. package/lib/dsdiff/DsdiffParser.d.ts +14 -14
  48. package/lib/dsdiff/DsdiffParser.js +143 -143
  49. package/lib/dsdiff/DsdiffToken.d.ts +9 -9
  50. package/lib/dsdiff/DsdiffToken.js +21 -21
  51. package/lib/dsf/DsfChunk.d.ts +86 -86
  52. package/lib/dsf/DsfChunk.js +54 -54
  53. package/lib/dsf/DsfParser.d.ts +9 -9
  54. package/lib/dsf/DsfParser.js +56 -56
  55. package/lib/flac/FlacParser.d.ts +28 -28
  56. package/lib/flac/FlacParser.js +175 -175
  57. package/lib/id3v1/ID3v1Parser.d.ts +13 -13
  58. package/lib/id3v1/ID3v1Parser.js +134 -134
  59. package/lib/id3v1/ID3v1TagMap.d.ts +4 -4
  60. package/lib/id3v1/ID3v1TagMap.js +22 -22
  61. package/lib/id3v2/AbstractID3Parser.d.ts +17 -17
  62. package/lib/id3v2/AbstractID3Parser.js +60 -60
  63. package/lib/id3v2/FrameParser.d.ts +32 -32
  64. package/lib/id3v2/FrameParser.js +329 -329
  65. package/lib/id3v2/ID3v22TagMapper.d.ts +9 -9
  66. package/lib/id3v2/ID3v22TagMapper.js +55 -55
  67. package/lib/id3v2/ID3v24TagMapper.d.ts +14 -14
  68. package/lib/id3v2/ID3v24TagMapper.js +193 -193
  69. package/lib/id3v2/ID3v2Parser.d.ts +29 -29
  70. package/lib/id3v2/ID3v2Parser.js +184 -194
  71. package/lib/id3v2/ID3v2Token.d.ts +73 -73
  72. package/lib/id3v2/ID3v2Token.js +106 -106
  73. package/lib/iff/index.d.ts +33 -33
  74. package/lib/iff/index.js +19 -19
  75. package/lib/index.d.ts +45 -45
  76. package/lib/index.js +74 -74
  77. package/lib/lyrics3/Lyrics3.d.ts +3 -3
  78. package/lib/lyrics3/Lyrics3.js +17 -17
  79. package/lib/matroska/MatroskaDtd.d.ts +8 -8
  80. package/lib/matroska/MatroskaDtd.js +279 -279
  81. package/lib/matroska/MatroskaParser.d.ts +37 -37
  82. package/lib/matroska/MatroskaParser.js +235 -235
  83. package/lib/matroska/MatroskaTagMapper.d.ts +4 -4
  84. package/lib/matroska/MatroskaTagMapper.js +35 -35
  85. package/lib/matroska/types.d.ts +175 -175
  86. package/lib/matroska/types.js +33 -32
  87. package/lib/mp4/Atom.d.ts +16 -16
  88. package/lib/mp4/Atom.js +70 -70
  89. package/lib/mp4/AtomToken.d.ts +395 -395
  90. package/lib/mp4/AtomToken.js +406 -406
  91. package/lib/mp4/MP4Parser.d.ts +30 -30
  92. package/lib/mp4/MP4Parser.js +511 -511
  93. package/lib/mp4/MP4TagMapper.d.ts +5 -5
  94. package/lib/mp4/MP4TagMapper.js +115 -115
  95. package/lib/mpeg/ExtendedLameHeader.d.ts +27 -27
  96. package/lib/mpeg/ExtendedLameHeader.js +31 -31
  97. package/lib/mpeg/MpegParser.d.ts +49 -49
  98. package/lib/mpeg/MpegParser.js +524 -529
  99. package/lib/mpeg/ReplayGainDataFormat.d.ts +55 -55
  100. package/lib/mpeg/ReplayGainDataFormat.js +69 -69
  101. package/lib/mpeg/XingTag.d.ts +45 -45
  102. package/lib/mpeg/XingTag.js +69 -69
  103. package/lib/musepack/index.d.ts +5 -5
  104. package/lib/musepack/index.js +32 -32
  105. package/lib/musepack/sv7/BitReader.d.ts +13 -13
  106. package/lib/musepack/sv7/BitReader.js +54 -54
  107. package/lib/musepack/sv7/MpcSv7Parser.d.ts +8 -8
  108. package/lib/musepack/sv7/MpcSv7Parser.js +46 -46
  109. package/lib/musepack/sv7/StreamVersion7.d.ts +28 -28
  110. package/lib/musepack/sv7/StreamVersion7.js +41 -41
  111. package/lib/musepack/sv8/MpcSv8Parser.d.ts +6 -6
  112. package/lib/musepack/sv8/MpcSv8Parser.js +55 -55
  113. package/lib/musepack/sv8/StreamVersion8.d.ts +40 -40
  114. package/lib/musepack/sv8/StreamVersion8.js +80 -80
  115. package/lib/ogg/Ogg.d.ts +72 -72
  116. package/lib/ogg/Ogg.js +2 -2
  117. package/lib/ogg/OggParser.d.ts +23 -23
  118. package/lib/ogg/OggParser.js +126 -126
  119. package/lib/ogg/opus/Opus.d.ts +48 -48
  120. package/lib/ogg/opus/Opus.js +28 -28
  121. package/lib/ogg/opus/OpusParser.d.ts +25 -25
  122. package/lib/ogg/opus/OpusParser.js +56 -56
  123. package/lib/ogg/speex/Speex.d.ts +36 -36
  124. package/lib/ogg/speex/Speex.js +31 -31
  125. package/lib/ogg/speex/SpeexParser.d.ts +22 -22
  126. package/lib/ogg/speex/SpeexParser.js +35 -35
  127. package/lib/ogg/theora/Theora.d.ts +20 -20
  128. package/lib/ogg/theora/Theora.js +23 -23
  129. package/lib/ogg/theora/TheoraParser.d.ts +28 -28
  130. package/lib/ogg/theora/TheoraParser.js +44 -44
  131. package/lib/ogg/vorbis/Vorbis.d.ts +69 -79
  132. package/lib/ogg/vorbis/Vorbis.js +78 -78
  133. package/lib/ogg/vorbis/VorbisDecoder.d.ts +12 -12
  134. package/lib/ogg/vorbis/VorbisDecoder.js +32 -32
  135. package/lib/ogg/vorbis/VorbisParser.d.ts +36 -36
  136. package/lib/ogg/vorbis/VorbisParser.js +128 -128
  137. package/lib/ogg/vorbis/VorbisTagMapper.d.ts +7 -7
  138. package/lib/ogg/vorbis/VorbisTagMapper.js +132 -132
  139. package/lib/riff/RiffChunk.d.ts +16 -16
  140. package/lib/riff/RiffChunk.js +32 -32
  141. package/lib/riff/RiffInfoTagMap.d.ts +10 -10
  142. package/lib/riff/RiffInfoTagMap.js +37 -37
  143. package/lib/type.d.ts +592 -599
  144. package/lib/type.js +5 -13
  145. package/lib/wav/BwfChunk.d.ts +17 -0
  146. package/lib/wav/BwfChunk.js +28 -0
  147. package/lib/wav/WaveChunk.d.ts +64 -64
  148. package/lib/wav/WaveChunk.js +65 -65
  149. package/lib/wav/WaveParser.d.ts +24 -24
  150. package/lib/wav/WaveParser.js +156 -144
  151. package/lib/wavpack/WavPackParser.d.ts +14 -14
  152. package/lib/wavpack/WavPackParser.js +99 -105
  153. package/lib/wavpack/WavPackToken.d.ts +64 -64
  154. package/lib/wavpack/WavPackToken.js +76 -76
  155. package/package.json +150 -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,133 +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
133
  //# sourceMappingURL=VorbisTagMapper.js.map
@@ -1,16 +1,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
+ 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
+ }