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,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 type_1 = require("../type");
5
- const GUID_1 = require("./GUID");
6
- const AsfObject = require("./AsfObject");
7
- const _debug = require("debug");
8
- const BasicParser_1 = require("../common/BasicParser");
9
- const debug = _debug('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 = 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 = _debug('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,95 +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
+ //# 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(buf: any): 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(buf: any): 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,40 +1,40 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsfUtil = void 0;
4
- const util = require("../common/Util");
5
- const Token = require("token-types");
6
- class AsfUtil {
7
- static getParserForAttr(i) {
8
- return AsfUtil.attributeParsers[i];
9
- }
10
- static parseUnicodeAttr(buf) {
11
- return util.stripNulls(util.decodeString(buf, 'utf16le'));
12
- }
13
- static parseByteArrayAttr(buf) {
14
- const newBuf = Buffer.alloc(buf.length);
15
- buf.copy(newBuf);
16
- return newBuf;
17
- }
18
- static parseBoolAttr(buf, offset = 0) {
19
- return AsfUtil.parseWordAttr(buf, offset) === 1;
20
- }
21
- static parseDWordAttr(buf, offset = 0) {
22
- return buf.readUInt32LE(offset);
23
- }
24
- static parseQWordAttr(buf, offset = 0) {
25
- return Token.UINT64_LE.get(buf, offset);
26
- }
27
- static parseWordAttr(buf, offset = 0) {
28
- return buf.readUInt16LE(offset);
29
- }
30
- }
31
- exports.AsfUtil = AsfUtil;
32
- AsfUtil.attributeParsers = [
33
- AsfUtil.parseUnicodeAttr,
34
- AsfUtil.parseByteArrayAttr,
35
- AsfUtil.parseBoolAttr,
36
- AsfUtil.parseDWordAttr,
37
- AsfUtil.parseQWordAttr,
38
- AsfUtil.parseWordAttr,
39
- AsfUtil.parseByteArrayAttr
40
- ];
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(buf) {
11
+ return util.stripNulls(util.decodeString(buf, 'utf16le'));
12
+ }
13
+ static parseByteArrayAttr(buf) {
14
+ const newBuf = Buffer.alloc(buf.length);
15
+ buf.copy(newBuf);
16
+ return newBuf;
17
+ }
18
+ static parseBoolAttr(buf, offset = 0) {
19
+ return AsfUtil.parseWordAttr(buf, offset) === 1;
20
+ }
21
+ static parseDWordAttr(buf, offset = 0) {
22
+ return buf.readUInt32LE(offset);
23
+ }
24
+ static parseQWordAttr(buf, offset = 0) {
25
+ return Token.UINT64_LE.get(buf, offset);
26
+ }
27
+ static parseWordAttr(buf, offset = 0) {
28
+ return buf.readUInt16LE(offset);
29
+ }
30
+ }
31
+ exports.AsfUtil = AsfUtil;
32
+ AsfUtil.attributeParsers = [
33
+ AsfUtil.parseUnicodeAttr,
34
+ AsfUtil.parseByteArrayAttr,
35
+ AsfUtil.parseBoolAttr,
36
+ AsfUtil.parseDWordAttr,
37
+ AsfUtil.parseQWordAttr,
38
+ AsfUtil.parseWordAttr,
39
+ AsfUtil.parseByteArrayAttr
40
+ ];