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,9 +1,9 @@
1
- import { INativeTagMap } from '../common/GenericTagTypes';
2
- import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
3
- /**
4
- * ID3v2.2 tag mappings
5
- */
6
- export declare const id3v22TagMap: INativeTagMap;
7
- export declare class ID3v22TagMapper extends CaseInsensitiveTagMap {
8
- constructor();
9
- }
1
+ import { INativeTagMap } from '../common/GenericTagTypes';
2
+ import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
3
+ /**
4
+ * ID3v2.2 tag mappings
5
+ */
6
+ export declare const id3v22TagMap: INativeTagMap;
7
+ export declare class ID3v22TagMapper extends CaseInsensitiveTagMap {
8
+ constructor();
9
+ }
@@ -1,56 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ID3v22TagMapper = exports.id3v22TagMap = void 0;
4
- const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
5
- /**
6
- * ID3v2.2 tag mappings
7
- */
8
- exports.id3v22TagMap = {
9
- TT2: 'title',
10
- TP1: 'artist',
11
- TP2: 'albumartist',
12
- TAL: 'album',
13
- TYE: 'year',
14
- COM: 'comment',
15
- TRK: 'track',
16
- TPA: 'disk',
17
- TCO: 'genre',
18
- PIC: 'picture',
19
- TCM: 'composer',
20
- TOR: 'originaldate',
21
- TOT: 'originalalbum',
22
- TXT: 'lyricist',
23
- TP3: 'conductor',
24
- TPB: 'label',
25
- TT1: 'grouping',
26
- TT3: 'subtitle',
27
- TLA: 'language',
28
- TCR: 'copyright',
29
- WCP: 'license',
30
- TEN: 'encodedby',
31
- TSS: 'encodersettings',
32
- WAR: 'website',
33
- 'COM:iTunPGAP': 'gapless'
34
- /* ToDo: iTunes tags:
35
- 'COM:iTunNORM': ,
36
- 'COM:iTunSMPB': 'encoder delay',
37
- 'COM:iTunes_CDDB_IDs'
38
- */ ,
39
- PCS: 'podcast',
40
- TCP: "compilation",
41
- TDR: 'date',
42
- TS2: 'albumartistsort',
43
- TSA: 'albumsort',
44
- TSC: 'composersort',
45
- TSP: 'artistsort',
46
- TST: 'titlesort',
47
- WFD: 'podcasturl',
48
- TBP: 'bpm'
49
- };
50
- class ID3v22TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
51
- constructor() {
52
- super(['ID3v2.2'], exports.id3v22TagMap);
53
- }
54
- }
55
- exports.ID3v22TagMapper = ID3v22TagMapper;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ID3v22TagMapper = exports.id3v22TagMap = void 0;
4
+ const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
5
+ /**
6
+ * ID3v2.2 tag mappings
7
+ */
8
+ exports.id3v22TagMap = {
9
+ TT2: 'title',
10
+ TP1: 'artist',
11
+ TP2: 'albumartist',
12
+ TAL: 'album',
13
+ TYE: 'year',
14
+ COM: 'comment',
15
+ TRK: 'track',
16
+ TPA: 'disk',
17
+ TCO: 'genre',
18
+ PIC: 'picture',
19
+ TCM: 'composer',
20
+ TOR: 'originaldate',
21
+ TOT: 'originalalbum',
22
+ TXT: 'lyricist',
23
+ TP3: 'conductor',
24
+ TPB: 'label',
25
+ TT1: 'grouping',
26
+ TT3: 'subtitle',
27
+ TLA: 'language',
28
+ TCR: 'copyright',
29
+ WCP: 'license',
30
+ TEN: 'encodedby',
31
+ TSS: 'encodersettings',
32
+ WAR: 'website',
33
+ 'COM:iTunPGAP': 'gapless'
34
+ /* ToDo: iTunes tags:
35
+ 'COM:iTunNORM': ,
36
+ 'COM:iTunSMPB': 'encoder delay',
37
+ 'COM:iTunes_CDDB_IDs'
38
+ */ ,
39
+ PCS: 'podcast',
40
+ TCP: "compilation",
41
+ TDR: 'date',
42
+ TS2: 'albumartistsort',
43
+ TSA: 'albumsort',
44
+ TSC: 'composersort',
45
+ TSP: 'artistsort',
46
+ TST: 'titlesort',
47
+ WFD: 'podcasturl',
48
+ TBP: 'bpm'
49
+ };
50
+ class ID3v22TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
51
+ constructor() {
52
+ super(['ID3v2.2'], exports.id3v22TagMap);
53
+ }
54
+ }
55
+ exports.ID3v22TagMapper = ID3v22TagMapper;
56
56
  //# sourceMappingURL=ID3v22TagMapper.js.map
@@ -1,14 +1,14 @@
1
- import { INativeMetadataCollector } from '../common/MetadataCollector';
2
- import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
3
- import { IRating, ITag } from '../type';
4
- export declare class ID3v24TagMapper extends CaseInsensitiveTagMap {
5
- static toRating(popm: any): IRating;
6
- constructor();
7
- /**
8
- * Handle post mapping exceptions / correction
9
- * @param {string} tag to post map
10
- * @param warnings USed to register warnings
11
- * @return Common value e.g. "Buena Vista Social Club"
12
- */
13
- protected postMap(tag: ITag, warnings: INativeMetadataCollector): void;
14
- }
1
+ import { INativeMetadataCollector } from '../common/MetadataCollector';
2
+ import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
3
+ import { IRating, ITag } from '../type';
4
+ export declare class ID3v24TagMapper extends CaseInsensitiveTagMap {
5
+ static toRating(popm: any): IRating;
6
+ constructor();
7
+ /**
8
+ * Handle post mapping exceptions / correction
9
+ * @param tag to post map
10
+ * @param warnings Wil be used to register (collect) warnings
11
+ * @return Common value e.g. "Buena Vista Social Club"
12
+ */
13
+ protected postMap(tag: ITag, warnings: INativeMetadataCollector): void;
14
+ }
@@ -1,194 +1,194 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ID3v24TagMapper = void 0;
4
- const GenericTagMapper_1 = require("../common/GenericTagMapper");
5
- const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
6
- const util = require("../common/Util");
7
- /**
8
- * ID3v2.3/ID3v2.4 tag mappings
9
- */
10
- const id3v24TagMap = {
11
- // id3v2.3
12
- TIT2: 'title',
13
- TPE1: 'artist',
14
- 'TXXX:Artists': 'artists',
15
- TPE2: 'albumartist',
16
- TALB: 'album',
17
- TDRV: 'date',
18
- /**
19
- * Original release year
20
- */
21
- TORY: 'originalyear',
22
- TPOS: 'disk',
23
- TCON: 'genre',
24
- APIC: 'picture',
25
- TCOM: 'composer',
26
- 'USLT:description': 'lyrics',
27
- TSOA: 'albumsort',
28
- TSOT: 'titlesort',
29
- TOAL: 'originalalbum',
30
- TSOP: 'artistsort',
31
- TSO2: 'albumartistsort',
32
- TSOC: 'composersort',
33
- TEXT: 'lyricist',
34
- 'TXXX:Writer': 'writer',
35
- TPE3: 'conductor',
36
- // 'IPLS:instrument': 'performer:instrument', // ToDo
37
- TPE4: 'remixer',
38
- 'IPLS:arranger': 'arranger',
39
- 'IPLS:engineer': 'engineer',
40
- 'IPLS:producer': 'producer',
41
- 'IPLS:DJ-mix': 'djmixer',
42
- 'IPLS:mix': 'mixer',
43
- TPUB: 'label',
44
- TIT1: 'grouping',
45
- TIT3: 'subtitle',
46
- TRCK: 'track',
47
- TCMP: 'compilation',
48
- POPM: 'rating',
49
- TBPM: 'bpm',
50
- TMED: 'media',
51
- 'TXXX:CATALOGNUMBER': 'catalognumber',
52
- 'TXXX:MusicBrainz Album Status': 'releasestatus',
53
- 'TXXX:MusicBrainz Album Type': 'releasetype',
54
- /**
55
- * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0
56
- */
57
- 'TXXX:MusicBrainz Album Release Country': 'releasecountry',
58
- /**
59
- * Release country as implemented // ToDo: report
60
- */
61
- 'TXXX:RELEASECOUNTRY': 'releasecountry',
62
- 'TXXX:SCRIPT': 'script',
63
- TLAN: 'language',
64
- TCOP: 'copyright',
65
- WCOP: 'license',
66
- TENC: 'encodedby',
67
- TSSE: 'encodersettings',
68
- 'TXXX:BARCODE': 'barcode',
69
- 'TXXX:ISRC': 'isrc',
70
- TSRC: 'isrc',
71
- 'TXXX:ASIN': 'asin',
72
- 'TXXX:originalyear': 'originalyear',
73
- 'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',
74
- 'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',
75
- 'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',
76
- 'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',
77
- 'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',
78
- 'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',
79
- 'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',
80
- 'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',
81
- 'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',
82
- 'TXXX:ACOUSTID_ID': 'acoustid_id',
83
- 'TXXX:Acoustid Id': 'acoustid_id',
84
- 'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',
85
- 'TXXX:MusicIP PUID': 'musicip_puid',
86
- 'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',
87
- WOAR: 'website',
88
- // id3v2.4
89
- // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames
90
- TDRC: 'date',
91
- TYER: 'year',
92
- TDOR: 'originaldate',
93
- // 'TMCL:instrument': 'performer:instrument',
94
- 'TIPL:arranger': 'arranger',
95
- 'TIPL:engineer': 'engineer',
96
- 'TIPL:producer': 'producer',
97
- 'TIPL:DJ-mix': 'djmixer',
98
- 'TIPL:mix': 'mixer',
99
- TMOO: 'mood',
100
- // additional mappings:
101
- SYLT: 'lyrics',
102
- TSST: 'discsubtitle',
103
- TKEY: 'key',
104
- COMM: 'comment',
105
- TOPE: 'originalartist',
106
- // Windows Media Player
107
- 'PRIV:AverageLevel': 'averageLevel',
108
- 'PRIV:PeakLevel': 'peakLevel',
109
- // Discogs
110
- 'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',
111
- 'TXXX:DISCOGS_ARTISTS': 'artists',
112
- 'TXXX:DISCOGS_ARTIST_NAME': 'artists',
113
- 'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',
114
- 'TXXX:DISCOGS_CATALOG': 'catalognumber',
115
- 'TXXX:DISCOGS_COUNTRY': 'releasecountry',
116
- 'TXXX:DISCOGS_DATE': 'originaldate',
117
- 'TXXX:DISCOGS_LABEL': 'label',
118
- 'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',
119
- 'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',
120
- 'TXXX:DISCOGS_RATING': 'discogs_rating',
121
- 'TXXX:DISCOGS_RELEASED': 'date',
122
- 'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',
123
- 'TXXX:DISCOGS_VOTES': 'discogs_votes',
124
- 'TXXX:CATALOGID': 'catalognumber',
125
- 'TXXX:STYLE': 'genre',
126
- 'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',
127
- 'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',
128
- 'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',
129
- 'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',
130
- 'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',
131
- 'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',
132
- 'TXXX:MP3GAIN_UNDO': 'replaygain_undo',
133
- MVNM: 'movement',
134
- MVIN: 'movementIndex',
135
- PCST: 'podcast',
136
- TCAT: 'category',
137
- TDES: 'description',
138
- TDRL: 'date',
139
- TGID: 'podcastId',
140
- TKWD: 'keywords',
141
- WFED: 'podcasturl'
142
- };
143
- class ID3v24TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
144
- static toRating(popm) {
145
- return {
146
- source: popm.email,
147
- rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined
148
- };
149
- }
150
- constructor() {
151
- super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);
152
- }
153
- /**
154
- * Handle post mapping exceptions / correction
155
- * @param {string} tag to post map
156
- * @param warnings USed to register warnings
157
- * @return Common value e.g. "Buena Vista Social Club"
158
- */
159
- postMap(tag, warnings) {
160
- switch (tag.id) {
161
- case 'UFID': // decode MusicBrainz Recording Id
162
- if (tag.value.owner_identifier === 'http://musicbrainz.org') {
163
- tag.id += ':' + tag.value.owner_identifier;
164
- tag.value = util.decodeString(tag.value.identifier, 'latin1'); // latin1 == iso-8859-1
165
- }
166
- break;
167
- case 'PRIV':
168
- switch (tag.value.owner_identifier) {
169
- // decode Windows Media Player
170
- case 'AverageLevel':
171
- case 'PeakValue':
172
- tag.id += ':' + tag.value.owner_identifier;
173
- tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE(0) : null;
174
- if (tag.value === null) {
175
- warnings.addWarning(`Failed to parse PRIV:PeakValue`);
176
- }
177
- break;
178
- default:
179
- warnings.addWarning(`Unknown PRIV owner-identifier: ${tag.value.owner_identifier}`);
180
- }
181
- break;
182
- case 'COMM':
183
- tag.value = tag.value ? tag.value.text : null;
184
- break;
185
- case 'POPM':
186
- tag.value = ID3v24TagMapper.toRating(tag.value);
187
- break;
188
- default:
189
- break;
190
- }
191
- }
192
- }
193
- exports.ID3v24TagMapper = ID3v24TagMapper;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ID3v24TagMapper = void 0;
4
+ const GenericTagMapper_1 = require("../common/GenericTagMapper");
5
+ const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
6
+ const util = require("../common/Util");
7
+ /**
8
+ * ID3v2.3/ID3v2.4 tag mappings
9
+ */
10
+ const id3v24TagMap = {
11
+ // id3v2.3
12
+ TIT2: 'title',
13
+ TPE1: 'artist',
14
+ 'TXXX:Artists': 'artists',
15
+ TPE2: 'albumartist',
16
+ TALB: 'album',
17
+ TDRV: 'date',
18
+ /**
19
+ * Original release year
20
+ */
21
+ TORY: 'originalyear',
22
+ TPOS: 'disk',
23
+ TCON: 'genre',
24
+ APIC: 'picture',
25
+ TCOM: 'composer',
26
+ 'USLT:description': 'lyrics',
27
+ TSOA: 'albumsort',
28
+ TSOT: 'titlesort',
29
+ TOAL: 'originalalbum',
30
+ TSOP: 'artistsort',
31
+ TSO2: 'albumartistsort',
32
+ TSOC: 'composersort',
33
+ TEXT: 'lyricist',
34
+ 'TXXX:Writer': 'writer',
35
+ TPE3: 'conductor',
36
+ // 'IPLS:instrument': 'performer:instrument', // ToDo
37
+ TPE4: 'remixer',
38
+ 'IPLS:arranger': 'arranger',
39
+ 'IPLS:engineer': 'engineer',
40
+ 'IPLS:producer': 'producer',
41
+ 'IPLS:DJ-mix': 'djmixer',
42
+ 'IPLS:mix': 'mixer',
43
+ TPUB: 'label',
44
+ TIT1: 'grouping',
45
+ TIT3: 'subtitle',
46
+ TRCK: 'track',
47
+ TCMP: 'compilation',
48
+ POPM: 'rating',
49
+ TBPM: 'bpm',
50
+ TMED: 'media',
51
+ 'TXXX:CATALOGNUMBER': 'catalognumber',
52
+ 'TXXX:MusicBrainz Album Status': 'releasestatus',
53
+ 'TXXX:MusicBrainz Album Type': 'releasetype',
54
+ /**
55
+ * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0
56
+ */
57
+ 'TXXX:MusicBrainz Album Release Country': 'releasecountry',
58
+ /**
59
+ * Release country as implemented // ToDo: report
60
+ */
61
+ 'TXXX:RELEASECOUNTRY': 'releasecountry',
62
+ 'TXXX:SCRIPT': 'script',
63
+ TLAN: 'language',
64
+ TCOP: 'copyright',
65
+ WCOP: 'license',
66
+ TENC: 'encodedby',
67
+ TSSE: 'encodersettings',
68
+ 'TXXX:BARCODE': 'barcode',
69
+ 'TXXX:ISRC': 'isrc',
70
+ TSRC: 'isrc',
71
+ 'TXXX:ASIN': 'asin',
72
+ 'TXXX:originalyear': 'originalyear',
73
+ 'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',
74
+ 'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',
75
+ 'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',
76
+ 'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',
77
+ 'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',
78
+ 'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',
79
+ 'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',
80
+ 'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',
81
+ 'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',
82
+ 'TXXX:ACOUSTID_ID': 'acoustid_id',
83
+ 'TXXX:Acoustid Id': 'acoustid_id',
84
+ 'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',
85
+ 'TXXX:MusicIP PUID': 'musicip_puid',
86
+ 'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',
87
+ WOAR: 'website',
88
+ // id3v2.4
89
+ // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames
90
+ TDRC: 'date',
91
+ TYER: 'year',
92
+ TDOR: 'originaldate',
93
+ // 'TMCL:instrument': 'performer:instrument',
94
+ 'TIPL:arranger': 'arranger',
95
+ 'TIPL:engineer': 'engineer',
96
+ 'TIPL:producer': 'producer',
97
+ 'TIPL:DJ-mix': 'djmixer',
98
+ 'TIPL:mix': 'mixer',
99
+ TMOO: 'mood',
100
+ // additional mappings:
101
+ SYLT: 'lyrics',
102
+ TSST: 'discsubtitle',
103
+ TKEY: 'key',
104
+ COMM: 'comment',
105
+ TOPE: 'originalartist',
106
+ // Windows Media Player
107
+ 'PRIV:AverageLevel': 'averageLevel',
108
+ 'PRIV:PeakLevel': 'peakLevel',
109
+ // Discogs
110
+ 'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',
111
+ 'TXXX:DISCOGS_ARTISTS': 'artists',
112
+ 'TXXX:DISCOGS_ARTIST_NAME': 'artists',
113
+ 'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',
114
+ 'TXXX:DISCOGS_CATALOG': 'catalognumber',
115
+ 'TXXX:DISCOGS_COUNTRY': 'releasecountry',
116
+ 'TXXX:DISCOGS_DATE': 'originaldate',
117
+ 'TXXX:DISCOGS_LABEL': 'label',
118
+ 'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',
119
+ 'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',
120
+ 'TXXX:DISCOGS_RATING': 'discogs_rating',
121
+ 'TXXX:DISCOGS_RELEASED': 'date',
122
+ 'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',
123
+ 'TXXX:DISCOGS_VOTES': 'discogs_votes',
124
+ 'TXXX:CATALOGID': 'catalognumber',
125
+ 'TXXX:STYLE': 'genre',
126
+ 'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',
127
+ 'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',
128
+ 'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',
129
+ 'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',
130
+ 'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',
131
+ 'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',
132
+ 'TXXX:MP3GAIN_UNDO': 'replaygain_undo',
133
+ MVNM: 'movement',
134
+ MVIN: 'movementIndex',
135
+ PCST: 'podcast',
136
+ TCAT: 'category',
137
+ TDES: 'description',
138
+ TDRL: 'date',
139
+ TGID: 'podcastId',
140
+ TKWD: 'keywords',
141
+ WFED: 'podcasturl'
142
+ };
143
+ class ID3v24TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
144
+ static toRating(popm) {
145
+ return {
146
+ source: popm.email,
147
+ rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined
148
+ };
149
+ }
150
+ constructor() {
151
+ super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);
152
+ }
153
+ /**
154
+ * Handle post mapping exceptions / correction
155
+ * @param tag to post map
156
+ * @param warnings Wil be used to register (collect) warnings
157
+ * @return Common value e.g. "Buena Vista Social Club"
158
+ */
159
+ postMap(tag, warnings) {
160
+ switch (tag.id) {
161
+ case 'UFID': // decode MusicBrainz Recording Id
162
+ if (tag.value.owner_identifier === 'http://musicbrainz.org') {
163
+ tag.id += ':' + tag.value.owner_identifier;
164
+ tag.value = util.decodeString(tag.value.identifier, 'latin1'); // latin1 == iso-8859-1
165
+ }
166
+ break;
167
+ case 'PRIV':
168
+ switch (tag.value.owner_identifier) {
169
+ // decode Windows Media Player
170
+ case 'AverageLevel':
171
+ case 'PeakValue':
172
+ tag.id += ':' + tag.value.owner_identifier;
173
+ tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE(0) : null;
174
+ if (tag.value === null) {
175
+ warnings.addWarning(`Failed to parse PRIV:PeakValue`);
176
+ }
177
+ break;
178
+ default:
179
+ warnings.addWarning(`Unknown PRIV owner-identifier: ${tag.value.owner_identifier}`);
180
+ }
181
+ break;
182
+ case 'COMM':
183
+ tag.value = tag.value ? tag.value.text : null;
184
+ break;
185
+ case 'POPM':
186
+ tag.value = ID3v24TagMapper.toRating(tag.value);
187
+ break;
188
+ default:
189
+ break;
190
+ }
191
+ }
192
+ }
193
+ exports.ID3v24TagMapper = ID3v24TagMapper;
194
194
  //# sourceMappingURL=ID3v24TagMapper.js.map
@@ -1,29 +1,29 @@
1
- /// <reference types="node" />
2
- import { ITokenizer } from 'strtok3/lib/core';
3
- import { IOptions } from '../type';
4
- import { INativeMetadataCollector } from '../common/MetadataCollector';
5
- export declare class ID3v2Parser {
6
- static removeUnsyncBytes(buffer: Buffer): Buffer;
7
- private static getFrameHeaderLength;
8
- private static readFrameFlags;
9
- private static readFrameData;
10
- /**
11
- * Create a combined tag key, of tag & description
12
- * @param {string} tag e.g.: COM
13
- * @param {string} description e.g. iTunPGAP
14
- * @returns {string} e.g. COM:iTunPGAP
15
- */
16
- private static makeDescriptionTagName;
17
- private tokenizer;
18
- private id3Header;
19
- private metadata;
20
- private headerType;
21
- private options;
22
- parse(metadata: INativeMetadataCollector, tokenizer: ITokenizer, options: IOptions): Promise<void>;
23
- parseExtendedHeader(): Promise<void>;
24
- parseExtendedHeaderData(dataRemaining: number, extendedHeaderSize: number): Promise<void>;
25
- parseId3Data(dataLen: number): Promise<void>;
26
- private addTag;
27
- private parseMetadata;
28
- private readFrameHeader;
29
- }
1
+ /// <reference types="node" />
2
+ import { ITokenizer } from 'strtok3/lib/core';
3
+ import { IOptions } from '../type';
4
+ import { INativeMetadataCollector } from '../common/MetadataCollector';
5
+ export declare class ID3v2Parser {
6
+ static removeUnsyncBytes(buffer: Buffer): Buffer;
7
+ private static getFrameHeaderLength;
8
+ private static readFrameFlags;
9
+ private static readFrameData;
10
+ /**
11
+ * Create a combined tag key, of tag & description
12
+ * @param tag e.g.: COM
13
+ * @param description e.g. iTunPGAP
14
+ * @returns string e.g. COM:iTunPGAP
15
+ */
16
+ private static makeDescriptionTagName;
17
+ private tokenizer;
18
+ private id3Header;
19
+ private metadata;
20
+ private headerType;
21
+ private options;
22
+ parse(metadata: INativeMetadataCollector, tokenizer: ITokenizer, options: IOptions): Promise<void>;
23
+ parseExtendedHeader(): Promise<void>;
24
+ parseExtendedHeaderData(dataRemaining: number, extendedHeaderSize: number): Promise<void>;
25
+ parseId3Data(dataLen: number): Promise<void>;
26
+ private addTag;
27
+ private parseMetadata;
28
+ private readFrameHeader;
29
+ }