music-metadata 7.12.3 → 7.12.4

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 -9
  2. package/README.md +434 -434
  3. package/lib/ParserFactory.d.ts +48 -48
  4. package/lib/ParserFactory.js +252 -252
  5. package/lib/aiff/AiffParser.d.ts +14 -14
  6. package/lib/aiff/AiffParser.js +84 -84
  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 +164 -164
  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 +381 -381
  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 +38 -38
  23. package/lib/asf/GUID.d.ts +84 -84
  24. package/lib/asf/GUID.js +121 -121
  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 -22
  40. package/lib/common/RandomFileReader.js +34 -34
  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 -57
  44. package/lib/common/Util.js +157 -157
  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 +31 -31
  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 +28 -28
  70. package/lib/id3v2/ID3v2Parser.js +182 -182
  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 +32 -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 -524
  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 -69
  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 -592
  144. package/lib/type.js +5 -5
  145. package/lib/wav/BwfChunk.d.ts +17 -17
  146. package/lib/wav/BwfChunk.js +29 -28
  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 +158 -156
  151. package/lib/wavpack/WavPackParser.d.ts +14 -14
  152. package/lib/wavpack/WavPackParser.js +99 -99
  153. package/lib/wavpack/WavPackToken.d.ts +64 -64
  154. package/lib/wavpack/WavPackToken.js +76 -76
  155. package/package.json +150 -150
@@ -1,17 +1,17 @@
1
- import { BasicParser } from '../common/BasicParser';
2
- /**
3
- * Windows Media Metadata Usage Guidelines
4
- * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx
5
- *
6
- * Ref:
7
- * - https://tools.ietf.org/html/draft-fleischman-asf-01
8
- * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf
9
- * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html
10
- * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx
11
- */
12
- export declare class AsfParser extends BasicParser {
13
- parse(): Promise<void>;
14
- private parseObjectHeader;
15
- private addTags;
16
- private parseExtensionObject;
17
- }
1
+ import { BasicParser } from '../common/BasicParser';
2
+ /**
3
+ * Windows Media Metadata Usage Guidelines
4
+ * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx
5
+ *
6
+ * Ref:
7
+ * - https://tools.ietf.org/html/draft-fleischman-asf-01
8
+ * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf
9
+ * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html
10
+ * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx
11
+ */
12
+ export declare class AsfParser extends BasicParser {
13
+ parse(): Promise<void>;
14
+ private parseObjectHeader;
15
+ private addTags;
16
+ private parseExtensionObject;
17
+ }
@@ -1,135 +1,135 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsfParser = void 0;
4
- const debug_1 = require("debug");
5
- const type_1 = require("../type");
6
- const GUID_1 = require("./GUID");
7
- const AsfObject = require("./AsfObject");
8
- const BasicParser_1 = require("../common/BasicParser");
9
- const debug = (0, debug_1.default)('music-metadata:parser:ASF');
10
- const headerType = 'asf';
11
- /**
12
- * Windows Media Metadata Usage Guidelines
13
- * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx
14
- *
15
- * Ref:
16
- * - https://tools.ietf.org/html/draft-fleischman-asf-01
17
- * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf
18
- * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html
19
- * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx
20
- */
21
- class AsfParser extends BasicParser_1.BasicParser {
22
- async parse() {
23
- const header = await this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);
24
- if (!header.objectId.equals(GUID_1.default.HeaderObject)) {
25
- throw new Error('expected asf header; but was not found; got: ' + header.objectId.str);
26
- }
27
- try {
28
- await this.parseObjectHeader(header.numberOfHeaderObjects);
29
- }
30
- catch (err) {
31
- debug('Error while parsing ASF: %s', err);
32
- }
33
- }
34
- async parseObjectHeader(numberOfObjectHeaders) {
35
- let tags;
36
- do {
37
- // Parse common header of the ASF Object (3.1)
38
- const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);
39
- // Parse data part of the ASF Object
40
- debug('header GUID=%s', header.objectId.str);
41
- switch (header.objectId.str) {
42
- case AsfObject.FilePropertiesObject.guid.str: // 3.2
43
- const fpo = await this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));
44
- this.metadata.setFormat('duration', Number(fpo.playDuration / BigInt(1000)) / 10000 - Number(fpo.preroll) / 1000);
45
- this.metadata.setFormat('bitrate', fpo.maximumBitrate);
46
- break;
47
- case AsfObject.StreamPropertiesObject.guid.str: // 3.3
48
- const spo = await this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));
49
- this.metadata.setFormat('container', 'ASF/' + spo.streamType);
50
- break;
51
- case AsfObject.HeaderExtensionObject.guid.str: // 3.4
52
- const extHeader = await this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());
53
- await this.parseExtensionObject(extHeader.extensionDataSize);
54
- break;
55
- case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10
56
- tags = await this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));
57
- this.addTags(tags);
58
- break;
59
- case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11
60
- tags = await this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));
61
- this.addTags(tags);
62
- break;
63
- case GUID_1.default.CodecListObject.str:
64
- const codecs = await AsfObject.readCodecEntries(this.tokenizer);
65
- codecs.forEach(codec => {
66
- this.metadata.addStreamInfo({
67
- type: codec.type.videoCodec ? type_1.TrackType.video : type_1.TrackType.audio,
68
- codecName: codec.codecName
69
- });
70
- });
71
- const audioCodecs = codecs.filter(codec => codec.type.audioCodec).map(codec => codec.codecName).join('/');
72
- this.metadata.setFormat('codec', audioCodecs);
73
- break;
74
- case GUID_1.default.StreamBitratePropertiesObject.str:
75
- // ToDo?
76
- await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);
77
- break;
78
- case GUID_1.default.PaddingObject.str:
79
- // ToDo: register bytes pad
80
- debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);
81
- await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);
82
- break;
83
- default:
84
- this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);
85
- debug('Ignore ASF-Object-GUID: %s', header.objectId.str);
86
- await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));
87
- }
88
- } while (--numberOfObjectHeaders);
89
- // done
90
- }
91
- addTags(tags) {
92
- tags.forEach(tag => {
93
- this.metadata.addTag(headerType, tag.id, tag.value);
94
- });
95
- }
96
- async parseExtensionObject(extensionSize) {
97
- do {
98
- // Parse common header of the ASF Object (3.1)
99
- const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);
100
- const remaining = header.objectSize - AsfObject.HeaderObjectToken.len;
101
- // Parse data part of the ASF Object
102
- switch (header.objectId.str) {
103
- case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1
104
- // ToDo: extended stream header properties are ignored
105
- await this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));
106
- break;
107
- case AsfObject.MetadataObjectState.guid.str: // 4.7
108
- const moTags = await this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));
109
- this.addTags(moTags);
110
- break;
111
- case AsfObject.MetadataLibraryObjectState.guid.str: // 4.8
112
- const mlTags = await this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));
113
- this.addTags(mlTags);
114
- break;
115
- case GUID_1.default.PaddingObject.str:
116
- // ToDo: register bytes pad
117
- await this.tokenizer.ignore(remaining);
118
- break;
119
- case GUID_1.default.CompatibilityObject.str:
120
- this.tokenizer.ignore(remaining);
121
- break;
122
- case GUID_1.default.ASF_Index_Placeholder_Object.str:
123
- await this.tokenizer.ignore(remaining);
124
- break;
125
- default:
126
- this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);
127
- // console.log("Ignore ASF-Object-GUID: %s", header.objectId.str);
128
- await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));
129
- break;
130
- }
131
- extensionSize -= header.objectSize;
132
- } while (extensionSize > 0);
133
- }
134
- }
135
- exports.AsfParser = AsfParser;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsfParser = void 0;
4
+ const debug_1 = require("debug");
5
+ const type_1 = require("../type");
6
+ const GUID_1 = require("./GUID");
7
+ const AsfObject = require("./AsfObject");
8
+ const BasicParser_1 = require("../common/BasicParser");
9
+ const debug = (0, debug_1.default)('music-metadata:parser:ASF');
10
+ const headerType = 'asf';
11
+ /**
12
+ * Windows Media Metadata Usage Guidelines
13
+ * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx
14
+ *
15
+ * Ref:
16
+ * - https://tools.ietf.org/html/draft-fleischman-asf-01
17
+ * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf
18
+ * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html
19
+ * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx
20
+ */
21
+ class AsfParser extends BasicParser_1.BasicParser {
22
+ async parse() {
23
+ const header = await this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);
24
+ if (!header.objectId.equals(GUID_1.default.HeaderObject)) {
25
+ throw new Error('expected asf header; but was not found; got: ' + header.objectId.str);
26
+ }
27
+ try {
28
+ await this.parseObjectHeader(header.numberOfHeaderObjects);
29
+ }
30
+ catch (err) {
31
+ debug('Error while parsing ASF: %s', err);
32
+ }
33
+ }
34
+ async parseObjectHeader(numberOfObjectHeaders) {
35
+ let tags;
36
+ do {
37
+ // Parse common header of the ASF Object (3.1)
38
+ const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);
39
+ // Parse data part of the ASF Object
40
+ debug('header GUID=%s', header.objectId.str);
41
+ switch (header.objectId.str) {
42
+ case AsfObject.FilePropertiesObject.guid.str: // 3.2
43
+ const fpo = await this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));
44
+ this.metadata.setFormat('duration', Number(fpo.playDuration / BigInt(1000)) / 10000 - Number(fpo.preroll) / 1000);
45
+ this.metadata.setFormat('bitrate', fpo.maximumBitrate);
46
+ break;
47
+ case AsfObject.StreamPropertiesObject.guid.str: // 3.3
48
+ const spo = await this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));
49
+ this.metadata.setFormat('container', 'ASF/' + spo.streamType);
50
+ break;
51
+ case AsfObject.HeaderExtensionObject.guid.str: // 3.4
52
+ const extHeader = await this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());
53
+ await this.parseExtensionObject(extHeader.extensionDataSize);
54
+ break;
55
+ case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10
56
+ tags = await this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));
57
+ this.addTags(tags);
58
+ break;
59
+ case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11
60
+ tags = await this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));
61
+ this.addTags(tags);
62
+ break;
63
+ case GUID_1.default.CodecListObject.str:
64
+ const codecs = await AsfObject.readCodecEntries(this.tokenizer);
65
+ codecs.forEach(codec => {
66
+ this.metadata.addStreamInfo({
67
+ type: codec.type.videoCodec ? type_1.TrackType.video : type_1.TrackType.audio,
68
+ codecName: codec.codecName
69
+ });
70
+ });
71
+ const audioCodecs = codecs.filter(codec => codec.type.audioCodec).map(codec => codec.codecName).join('/');
72
+ this.metadata.setFormat('codec', audioCodecs);
73
+ break;
74
+ case GUID_1.default.StreamBitratePropertiesObject.str:
75
+ // ToDo?
76
+ await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);
77
+ break;
78
+ case GUID_1.default.PaddingObject.str:
79
+ // ToDo: register bytes pad
80
+ debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);
81
+ await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);
82
+ break;
83
+ default:
84
+ this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);
85
+ debug('Ignore ASF-Object-GUID: %s', header.objectId.str);
86
+ await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));
87
+ }
88
+ } while (--numberOfObjectHeaders);
89
+ // done
90
+ }
91
+ addTags(tags) {
92
+ tags.forEach(tag => {
93
+ this.metadata.addTag(headerType, tag.id, tag.value);
94
+ });
95
+ }
96
+ async parseExtensionObject(extensionSize) {
97
+ do {
98
+ // Parse common header of the ASF Object (3.1)
99
+ const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);
100
+ const remaining = header.objectSize - AsfObject.HeaderObjectToken.len;
101
+ // Parse data part of the ASF Object
102
+ switch (header.objectId.str) {
103
+ case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1
104
+ // ToDo: extended stream header properties are ignored
105
+ await this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));
106
+ break;
107
+ case AsfObject.MetadataObjectState.guid.str: // 4.7
108
+ const moTags = await this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));
109
+ this.addTags(moTags);
110
+ break;
111
+ case AsfObject.MetadataLibraryObjectState.guid.str: // 4.8
112
+ const mlTags = await this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));
113
+ this.addTags(mlTags);
114
+ break;
115
+ case GUID_1.default.PaddingObject.str:
116
+ // ToDo: register bytes pad
117
+ await this.tokenizer.ignore(remaining);
118
+ break;
119
+ case GUID_1.default.CompatibilityObject.str:
120
+ this.tokenizer.ignore(remaining);
121
+ break;
122
+ case GUID_1.default.ASF_Index_Placeholder_Object.str:
123
+ await this.tokenizer.ignore(remaining);
124
+ break;
125
+ default:
126
+ this.metadata.addWarning('Ignore ASF-Object-GUID: ' + header.objectId.str);
127
+ // console.log("Ignore ASF-Object-GUID: %s", header.objectId.str);
128
+ await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));
129
+ break;
130
+ }
131
+ extensionSize -= header.objectSize;
132
+ } while (extensionSize > 0);
133
+ }
134
+ }
135
+ exports.AsfParser = AsfParser;
@@ -1,7 +1,7 @@
1
- import { CommonTagMapper } from '../common/GenericTagMapper';
2
- import { IRating, ITag } from '../type';
3
- export declare class AsfTagMapper extends CommonTagMapper {
4
- static toRating(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 AsfTagMapper extends CommonTagMapper {
4
+ static toRating(rating: string): IRating;
5
+ constructor();
6
+ protected postMap(tag: ITag): void;
7
+ }
@@ -1,96 +1,96 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsfTagMapper = void 0;
4
- const GenericTagMapper_1 = require("../common/GenericTagMapper");
5
- /**
6
- * ASF Metadata tag mappings.
7
- * See http://msdn.microsoft.com/en-us/library/ms867702.aspx
8
- */
9
- const asfTagMap = {
10
- Title: 'title',
11
- Author: 'artist',
12
- 'WM/AlbumArtist': 'albumartist',
13
- 'WM/AlbumTitle': 'album',
14
- 'WM/Year': 'date',
15
- 'WM/OriginalReleaseTime': 'originaldate',
16
- 'WM/OriginalReleaseYear': 'originalyear',
17
- Description: 'comment',
18
- 'WM/TrackNumber': 'track',
19
- 'WM/PartOfSet': 'disk',
20
- 'WM/Genre': 'genre',
21
- 'WM/Composer': 'composer',
22
- 'WM/Lyrics': 'lyrics',
23
- 'WM/AlbumSortOrder': 'albumsort',
24
- 'WM/TitleSortOrder': 'titlesort',
25
- 'WM/ArtistSortOrder': 'artistsort',
26
- 'WM/AlbumArtistSortOrder': 'albumartistsort',
27
- 'WM/ComposerSortOrder': 'composersort',
28
- 'WM/Writer': 'lyricist',
29
- 'WM/Conductor': 'conductor',
30
- 'WM/ModifiedBy': 'remixer',
31
- 'WM/Engineer': 'engineer',
32
- 'WM/Producer': 'producer',
33
- 'WM/DJMixer': 'djmixer',
34
- 'WM/Mixer': 'mixer',
35
- 'WM/Publisher': 'label',
36
- 'WM/ContentGroupDescription': 'grouping',
37
- 'WM/SubTitle': 'subtitle',
38
- 'WM/SetSubTitle': 'discsubtitle',
39
- // 'WM/PartOfSet': 'totaldiscs',
40
- 'WM/IsCompilation': 'compilation',
41
- 'WM/SharedUserRating': 'rating',
42
- 'WM/BeatsPerMinute': 'bpm',
43
- 'WM/Mood': 'mood',
44
- 'WM/Media': 'media',
45
- 'WM/CatalogNo': 'catalognumber',
46
- 'MusicBrainz/Album Status': 'releasestatus',
47
- 'MusicBrainz/Album Type': 'releasetype',
48
- 'MusicBrainz/Album Release Country': 'releasecountry',
49
- 'WM/Script': 'script',
50
- 'WM/Language': 'language',
51
- Copyright: 'copyright',
52
- LICENSE: 'license',
53
- 'WM/EncodedBy': 'encodedby',
54
- 'WM/EncodingSettings': 'encodersettings',
55
- 'WM/Barcode': 'barcode',
56
- 'WM/ISRC': 'isrc',
57
- 'MusicBrainz/Track Id': 'musicbrainz_recordingid',
58
- 'MusicBrainz/Release Track Id': 'musicbrainz_trackid',
59
- 'MusicBrainz/Album Id': 'musicbrainz_albumid',
60
- 'MusicBrainz/Artist Id': 'musicbrainz_artistid',
61
- 'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',
62
- 'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',
63
- 'MusicBrainz/Work Id': 'musicbrainz_workid',
64
- 'MusicBrainz/TRM Id': 'musicbrainz_trmid',
65
- 'MusicBrainz/Disc Id': 'musicbrainz_discid',
66
- 'Acoustid/Id': 'acoustid_id',
67
- 'Acoustid/Fingerprint': 'acoustid_fingerprint',
68
- 'MusicIP/PUID': 'musicip_puid',
69
- 'WM/ARTISTS': 'artists',
70
- 'WM/InitialKey': 'key',
71
- ASIN: 'asin',
72
- 'WM/Work': 'work',
73
- 'WM/AuthorURL': 'website',
74
- 'WM/Picture': 'picture'
75
- };
76
- class AsfTagMapper extends GenericTagMapper_1.CommonTagMapper {
77
- static toRating(rating) {
78
- return {
79
- rating: parseFloat(rating + 1) / 5
80
- };
81
- }
82
- constructor() {
83
- super(['asf'], asfTagMap);
84
- }
85
- postMap(tag) {
86
- switch (tag.id) {
87
- case 'WM/SharedUserRating':
88
- const keys = tag.id.split(':');
89
- tag.value = AsfTagMapper.toRating(tag.value);
90
- tag.id = keys[0];
91
- break;
92
- }
93
- }
94
- }
95
- exports.AsfTagMapper = AsfTagMapper;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsfTagMapper = void 0;
4
+ const GenericTagMapper_1 = require("../common/GenericTagMapper");
5
+ /**
6
+ * ASF Metadata tag mappings.
7
+ * See http://msdn.microsoft.com/en-us/library/ms867702.aspx
8
+ */
9
+ const asfTagMap = {
10
+ Title: 'title',
11
+ Author: 'artist',
12
+ 'WM/AlbumArtist': 'albumartist',
13
+ 'WM/AlbumTitle': 'album',
14
+ 'WM/Year': 'date',
15
+ 'WM/OriginalReleaseTime': 'originaldate',
16
+ 'WM/OriginalReleaseYear': 'originalyear',
17
+ Description: 'comment',
18
+ 'WM/TrackNumber': 'track',
19
+ 'WM/PartOfSet': 'disk',
20
+ 'WM/Genre': 'genre',
21
+ 'WM/Composer': 'composer',
22
+ 'WM/Lyrics': 'lyrics',
23
+ 'WM/AlbumSortOrder': 'albumsort',
24
+ 'WM/TitleSortOrder': 'titlesort',
25
+ 'WM/ArtistSortOrder': 'artistsort',
26
+ 'WM/AlbumArtistSortOrder': 'albumartistsort',
27
+ 'WM/ComposerSortOrder': 'composersort',
28
+ 'WM/Writer': 'lyricist',
29
+ 'WM/Conductor': 'conductor',
30
+ 'WM/ModifiedBy': 'remixer',
31
+ 'WM/Engineer': 'engineer',
32
+ 'WM/Producer': 'producer',
33
+ 'WM/DJMixer': 'djmixer',
34
+ 'WM/Mixer': 'mixer',
35
+ 'WM/Publisher': 'label',
36
+ 'WM/ContentGroupDescription': 'grouping',
37
+ 'WM/SubTitle': 'subtitle',
38
+ 'WM/SetSubTitle': 'discsubtitle',
39
+ // 'WM/PartOfSet': 'totaldiscs',
40
+ 'WM/IsCompilation': 'compilation',
41
+ 'WM/SharedUserRating': 'rating',
42
+ 'WM/BeatsPerMinute': 'bpm',
43
+ 'WM/Mood': 'mood',
44
+ 'WM/Media': 'media',
45
+ 'WM/CatalogNo': 'catalognumber',
46
+ 'MusicBrainz/Album Status': 'releasestatus',
47
+ 'MusicBrainz/Album Type': 'releasetype',
48
+ 'MusicBrainz/Album Release Country': 'releasecountry',
49
+ 'WM/Script': 'script',
50
+ 'WM/Language': 'language',
51
+ Copyright: 'copyright',
52
+ LICENSE: 'license',
53
+ 'WM/EncodedBy': 'encodedby',
54
+ 'WM/EncodingSettings': 'encodersettings',
55
+ 'WM/Barcode': 'barcode',
56
+ 'WM/ISRC': 'isrc',
57
+ 'MusicBrainz/Track Id': 'musicbrainz_recordingid',
58
+ 'MusicBrainz/Release Track Id': 'musicbrainz_trackid',
59
+ 'MusicBrainz/Album Id': 'musicbrainz_albumid',
60
+ 'MusicBrainz/Artist Id': 'musicbrainz_artistid',
61
+ 'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',
62
+ 'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',
63
+ 'MusicBrainz/Work Id': 'musicbrainz_workid',
64
+ 'MusicBrainz/TRM Id': 'musicbrainz_trmid',
65
+ 'MusicBrainz/Disc Id': 'musicbrainz_discid',
66
+ 'Acoustid/Id': 'acoustid_id',
67
+ 'Acoustid/Fingerprint': 'acoustid_fingerprint',
68
+ 'MusicIP/PUID': 'musicip_puid',
69
+ 'WM/ARTISTS': 'artists',
70
+ 'WM/InitialKey': 'key',
71
+ ASIN: 'asin',
72
+ 'WM/Work': 'work',
73
+ 'WM/AuthorURL': 'website',
74
+ 'WM/Picture': 'picture'
75
+ };
76
+ class AsfTagMapper extends GenericTagMapper_1.CommonTagMapper {
77
+ static toRating(rating) {
78
+ return {
79
+ rating: parseFloat(rating + 1) / 5
80
+ };
81
+ }
82
+ constructor() {
83
+ super(['asf'], asfTagMap);
84
+ }
85
+ postMap(tag) {
86
+ switch (tag.id) {
87
+ case 'WM/SharedUserRating':
88
+ const keys = tag.id.split(':');
89
+ tag.value = AsfTagMapper.toRating(tag.value);
90
+ tag.id = keys[0];
91
+ break;
92
+ }
93
+ }
94
+ }
95
+ exports.AsfTagMapper = AsfTagMapper;
96
96
  //# sourceMappingURL=AsfTagMapper.js.map
@@ -1,13 +1,13 @@
1
- /// <reference types="node" />
2
- import { DataType } from './AsfObject';
3
- export declare type AttributeParser = (buf: Buffer) => boolean | string | number | bigint | Buffer;
4
- export declare class AsfUtil {
5
- static getParserForAttr(i: DataType): AttributeParser;
6
- static parseUnicodeAttr(uint8Array: Uint8Array): string;
7
- private static attributeParsers;
8
- private static parseByteArrayAttr;
9
- private static parseBoolAttr;
10
- private static parseDWordAttr;
11
- private static parseQWordAttr;
12
- private static parseWordAttr;
13
- }
1
+ /// <reference types="node" />
2
+ import { DataType } from './AsfObject';
3
+ export declare type AttributeParser = (buf: Buffer) => boolean | string | number | bigint | Buffer;
4
+ export declare class AsfUtil {
5
+ static getParserForAttr(i: DataType): AttributeParser;
6
+ static parseUnicodeAttr(uint8Array: Uint8Array): string;
7
+ private static attributeParsers;
8
+ private static parseByteArrayAttr;
9
+ private static parseBoolAttr;
10
+ private static parseDWordAttr;
11
+ private static parseQWordAttr;
12
+ private static parseWordAttr;
13
+ }
@@ -1,38 +1,38 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsfUtil = void 0;
4
- const Token = require("token-types");
5
- const util = require("../common/Util");
6
- class AsfUtil {
7
- static getParserForAttr(i) {
8
- return AsfUtil.attributeParsers[i];
9
- }
10
- static parseUnicodeAttr(uint8Array) {
11
- return util.stripNulls(util.decodeString(uint8Array, 'utf16le'));
12
- }
13
- static parseByteArrayAttr(buf) {
14
- return Buffer.from(buf);
15
- }
16
- static parseBoolAttr(buf, offset = 0) {
17
- return AsfUtil.parseWordAttr(buf, offset) === 1;
18
- }
19
- static parseDWordAttr(buf, offset = 0) {
20
- return buf.readUInt32LE(offset);
21
- }
22
- static parseQWordAttr(buf, offset = 0) {
23
- return Token.UINT64_LE.get(buf, offset);
24
- }
25
- static parseWordAttr(buf, offset = 0) {
26
- return buf.readUInt16LE(offset);
27
- }
28
- }
29
- exports.AsfUtil = AsfUtil;
30
- AsfUtil.attributeParsers = [
31
- AsfUtil.parseUnicodeAttr,
32
- AsfUtil.parseByteArrayAttr,
33
- AsfUtil.parseBoolAttr,
34
- AsfUtil.parseDWordAttr,
35
- AsfUtil.parseQWordAttr,
36
- AsfUtil.parseWordAttr,
37
- AsfUtil.parseByteArrayAttr
38
- ];
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsfUtil = void 0;
4
+ const Token = require("token-types");
5
+ const util = require("../common/Util");
6
+ class AsfUtil {
7
+ static getParserForAttr(i) {
8
+ return AsfUtil.attributeParsers[i];
9
+ }
10
+ static parseUnicodeAttr(uint8Array) {
11
+ return util.stripNulls(util.decodeString(uint8Array, 'utf16le'));
12
+ }
13
+ static parseByteArrayAttr(buf) {
14
+ return Buffer.from(buf);
15
+ }
16
+ static parseBoolAttr(buf, offset = 0) {
17
+ return AsfUtil.parseWordAttr(buf, offset) === 1;
18
+ }
19
+ static parseDWordAttr(buf, offset = 0) {
20
+ return buf.readUInt32LE(offset);
21
+ }
22
+ static parseQWordAttr(buf, offset = 0) {
23
+ return Token.UINT64_LE.get(buf, offset);
24
+ }
25
+ static parseWordAttr(buf, offset = 0) {
26
+ return buf.readUInt16LE(offset);
27
+ }
28
+ }
29
+ exports.AsfUtil = AsfUtil;
30
+ AsfUtil.attributeParsers = [
31
+ AsfUtil.parseUnicodeAttr,
32
+ AsfUtil.parseByteArrayAttr,
33
+ AsfUtil.parseBoolAttr,
34
+ AsfUtil.parseDWordAttr,
35
+ AsfUtil.parseQWordAttr,
36
+ AsfUtil.parseWordAttr,
37
+ AsfUtil.parseByteArrayAttr
38
+ ];