music-metadata 7.11.6 → 7.11.7

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 +86 -86
  12. package/lib/apev2/APEv2Token.d.ts +100 -100
  13. package/lib/apev2/APEv2Token.js +126 -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 +95 -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 +21 -21
  28. package/lib/common/CombinedTagMapper.d.ts +19 -19
  29. package/lib/common/CombinedTagMapper.js +51 -51
  30. package/lib/common/FourCC.d.ts +6 -6
  31. package/lib/common/FourCC.js +28 -28
  32. package/lib/common/GenericTagMapper.d.ts +51 -51
  33. package/lib/common/GenericTagMapper.js +55 -55
  34. package/lib/common/GenericTagTypes.d.ts +33 -33
  35. package/lib/common/GenericTagTypes.js +131 -131
  36. package/lib/common/MetadataCollector.d.ts +76 -76
  37. package/lib/common/MetadataCollector.js +275 -275
  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 +58 -57
  43. package/lib/common/Util.js +162 -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 +22 -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 +329 -323
  64. package/lib/id3v2/ID3v22TagMapper.d.ts +9 -9
  65. package/lib/id3v2/ID3v22TagMapper.js +55 -55
  66. package/lib/id3v2/ID3v24TagMapper.d.ts +14 -14
  67. package/lib/id3v2/ID3v24TagMapper.js +193 -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 +45 -45
  75. package/lib/index.js +74 -74
  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 -235
  82. package/lib/matroska/MatroskaTagMapper.d.ts +4 -4
  83. package/lib/matroska/MatroskaTagMapper.js +35 -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 -30
  91. package/lib/mp4/MP4Parser.js +511 -511
  92. package/lib/mp4/MP4TagMapper.d.ts +5 -5
  93. package/lib/mp4/MP4TagMapper.js +115 -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 +132 -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 +37 -37
  142. package/lib/type.d.ts +599 -599
  143. package/lib/type.js +13 -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,175 +1,175 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FlacParser = void 0;
4
- const Token = require("token-types");
5
- const _debug = require("debug");
6
- const util = require("../common/Util");
7
- const Vorbis_1 = require("../ogg/vorbis/Vorbis");
8
- const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
9
- const FourCC_1 = require("../common/FourCC");
10
- const VorbisParser_1 = require("../ogg/vorbis/VorbisParser");
11
- const VorbisDecoder_1 = require("../ogg/vorbis/VorbisDecoder");
12
- const debug = _debug('music-metadata:parser:FLAC');
13
- /**
14
- * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:
15
- * ref: https://xiph.org/flac/format.html#metadata_block
16
- */
17
- var BlockType;
18
- (function (BlockType) {
19
- BlockType[BlockType["STREAMINFO"] = 0] = "STREAMINFO";
20
- BlockType[BlockType["PADDING"] = 1] = "PADDING";
21
- BlockType[BlockType["APPLICATION"] = 2] = "APPLICATION";
22
- BlockType[BlockType["SEEKTABLE"] = 3] = "SEEKTABLE";
23
- BlockType[BlockType["VORBIS_COMMENT"] = 4] = "VORBIS_COMMENT";
24
- BlockType[BlockType["CUESHEET"] = 5] = "CUESHEET";
25
- BlockType[BlockType["PICTURE"] = 6] = "PICTURE";
26
- })(BlockType || (BlockType = {}));
27
- class FlacParser extends AbstractID3Parser_1.AbstractID3Parser {
28
- constructor() {
29
- super(...arguments);
30
- this.padding = 0;
31
- }
32
- /**
33
- * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).
34
- * @param {INativeMetadataCollector} metadata Output
35
- * @param {ITokenizer} tokenizer Input
36
- * @param {IOptions} options Parsing options
37
- */
38
- init(metadata, tokenizer, options) {
39
- super.init(metadata, tokenizer, options);
40
- this.vorbisParser = new VorbisParser_1.VorbisParser(metadata, options);
41
- return this;
42
- }
43
- async _parse() {
44
- const fourCC = await this.tokenizer.readToken(FourCC_1.FourCcToken);
45
- if (fourCC.toString() !== 'fLaC') {
46
- throw new Error('Invalid FLAC preamble');
47
- }
48
- let blockHeader;
49
- do {
50
- // Read block header
51
- blockHeader = await this.tokenizer.readToken(Metadata.BlockHeader);
52
- // Parse block data
53
- await this.parseDataBlock(blockHeader);
54
- } while (!blockHeader.lastBlock);
55
- if (this.tokenizer.fileInfo.size && this.metadata.format.duration) {
56
- const dataSize = this.tokenizer.fileInfo.size - this.tokenizer.position;
57
- this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);
58
- }
59
- }
60
- parseDataBlock(blockHeader) {
61
- debug(`blockHeader type=${blockHeader.type}, length=${blockHeader.length}`);
62
- switch (blockHeader.type) {
63
- case BlockType.STREAMINFO:
64
- return this.parseBlockStreamInfo(blockHeader.length);
65
- case BlockType.PADDING:
66
- this.padding += blockHeader.length;
67
- break;
68
- case BlockType.APPLICATION:
69
- break;
70
- case BlockType.SEEKTABLE:
71
- break;
72
- case BlockType.VORBIS_COMMENT:
73
- return this.parseComment(blockHeader.length);
74
- case BlockType.CUESHEET:
75
- break;
76
- case BlockType.PICTURE:
77
- return this.parsePicture(blockHeader.length).then();
78
- default:
79
- this.metadata.addWarning('Unknown block type: ' + blockHeader.type);
80
- }
81
- // Ignore data block
82
- return this.tokenizer.ignore(blockHeader.length).then();
83
- }
84
- /**
85
- * Parse STREAMINFO
86
- */
87
- async parseBlockStreamInfo(dataLen) {
88
- if (dataLen !== Metadata.BlockStreamInfo.len)
89
- throw new Error('Unexpected block-stream-info length');
90
- const streamInfo = await this.tokenizer.readToken(Metadata.BlockStreamInfo);
91
- this.metadata.setFormat('container', 'FLAC');
92
- this.metadata.setFormat('codec', 'FLAC');
93
- this.metadata.setFormat('lossless', true);
94
- this.metadata.setFormat('numberOfChannels', streamInfo.channels);
95
- this.metadata.setFormat('bitsPerSample', streamInfo.bitsPerSample);
96
- this.metadata.setFormat('sampleRate', streamInfo.sampleRate);
97
- if (streamInfo.totalSamples > 0) {
98
- this.metadata.setFormat('duration', streamInfo.totalSamples / streamInfo.sampleRate);
99
- }
100
- }
101
- /**
102
- * Parse VORBIS_COMMENT
103
- * Ref: https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-640004.2.3
104
- */
105
- async parseComment(dataLen) {
106
- const data = await this.tokenizer.readToken(new Token.Uint8ArrayType(dataLen));
107
- const decoder = new VorbisDecoder_1.VorbisDecoder(data, 0);
108
- decoder.readStringUtf8(); // vendor (skip)
109
- const commentListLength = decoder.readInt32();
110
- for (let i = 0; i < commentListLength; i++) {
111
- const tag = decoder.parseUserComment();
112
- this.vorbisParser.addTag(tag.key, tag.value);
113
- }
114
- }
115
- async parsePicture(dataLen) {
116
- if (this.options.skipCovers) {
117
- return this.tokenizer.ignore(dataLen);
118
- }
119
- else {
120
- const picture = await this.tokenizer.readToken(new Vorbis_1.VorbisPictureToken(dataLen));
121
- this.vorbisParser.addTag('METADATA_BLOCK_PICTURE', picture);
122
- }
123
- }
124
- }
125
- exports.FlacParser = FlacParser;
126
- class Metadata {
127
- }
128
- Metadata.BlockHeader = {
129
- len: 4,
130
- get: (buf, off) => {
131
- return {
132
- lastBlock: util.getBit(buf, off, 7),
133
- type: util.getBitAllignedNumber(buf, off, 1, 7),
134
- length: Token.UINT24_BE.get(buf, off + 1)
135
- };
136
- }
137
- };
138
- /**
139
- * METADATA_BLOCK_DATA
140
- * Ref: https://xiph.org/flac/format.html#metadata_block_streaminfo
141
- */
142
- Metadata.BlockStreamInfo = {
143
- len: 34,
144
- get: (buf, off) => {
145
- return {
146
- // The minimum block size (in samples) used in the stream.
147
- minimumBlockSize: Token.UINT16_BE.get(buf, off),
148
- // The maximum block size (in samples) used in the stream.
149
- // (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.
150
- maximumBlockSize: Token.UINT16_BE.get(buf, off + 2) / 1000,
151
- // The minimum frame size (in bytes) used in the stream.
152
- // May be 0 to imply the value is not known.
153
- minimumFrameSize: Token.UINT24_BE.get(buf, off + 4),
154
- // The maximum frame size (in bytes) used in the stream.
155
- // May be 0 to imply the value is not known.
156
- maximumFrameSize: Token.UINT24_BE.get(buf, off + 7),
157
- // Sample rate in Hz. Though 20 bits are available,
158
- // the maximum sample rate is limited by the structure of frame headers to 655350Hz.
159
- // Also, a value of 0 is invalid.
160
- sampleRate: Token.UINT24_BE.get(buf, off + 10) >> 4,
161
- // probably slower: sampleRate: common.getBitAllignedNumber(buf, off + 10, 0, 20),
162
- // (number of channels)-1. FLAC supports from 1 to 8 channels
163
- channels: util.getBitAllignedNumber(buf, off + 12, 4, 3) + 1,
164
- // bits per sample)-1.
165
- // FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.
166
- bitsPerSample: util.getBitAllignedNumber(buf, off + 12, 7, 5) + 1,
167
- // Total samples in stream.
168
- // 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels.
169
- // A value of zero here means the number of total samples is unknown.
170
- totalSamples: util.getBitAllignedNumber(buf, off + 13, 4, 36),
171
- // the MD5 hash of the file (see notes for usage... it's a littly tricky)
172
- fileMD5: new Token.Uint8ArrayType(16).get(buf, off + 18)
173
- };
174
- }
175
- };
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FlacParser = void 0;
4
+ const Token = require("token-types");
5
+ const _debug = require("debug");
6
+ const util = require("../common/Util");
7
+ const Vorbis_1 = require("../ogg/vorbis/Vorbis");
8
+ const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
9
+ const FourCC_1 = require("../common/FourCC");
10
+ const VorbisParser_1 = require("../ogg/vorbis/VorbisParser");
11
+ const VorbisDecoder_1 = require("../ogg/vorbis/VorbisDecoder");
12
+ const debug = _debug('music-metadata:parser:FLAC');
13
+ /**
14
+ * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:
15
+ * ref: https://xiph.org/flac/format.html#metadata_block
16
+ */
17
+ var BlockType;
18
+ (function (BlockType) {
19
+ BlockType[BlockType["STREAMINFO"] = 0] = "STREAMINFO";
20
+ BlockType[BlockType["PADDING"] = 1] = "PADDING";
21
+ BlockType[BlockType["APPLICATION"] = 2] = "APPLICATION";
22
+ BlockType[BlockType["SEEKTABLE"] = 3] = "SEEKTABLE";
23
+ BlockType[BlockType["VORBIS_COMMENT"] = 4] = "VORBIS_COMMENT";
24
+ BlockType[BlockType["CUESHEET"] = 5] = "CUESHEET";
25
+ BlockType[BlockType["PICTURE"] = 6] = "PICTURE";
26
+ })(BlockType || (BlockType = {}));
27
+ class FlacParser extends AbstractID3Parser_1.AbstractID3Parser {
28
+ constructor() {
29
+ super(...arguments);
30
+ this.padding = 0;
31
+ }
32
+ /**
33
+ * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).
34
+ * @param {INativeMetadataCollector} metadata Output
35
+ * @param {ITokenizer} tokenizer Input
36
+ * @param {IOptions} options Parsing options
37
+ */
38
+ init(metadata, tokenizer, options) {
39
+ super.init(metadata, tokenizer, options);
40
+ this.vorbisParser = new VorbisParser_1.VorbisParser(metadata, options);
41
+ return this;
42
+ }
43
+ async _parse() {
44
+ const fourCC = await this.tokenizer.readToken(FourCC_1.FourCcToken);
45
+ if (fourCC.toString() !== 'fLaC') {
46
+ throw new Error('Invalid FLAC preamble');
47
+ }
48
+ let blockHeader;
49
+ do {
50
+ // Read block header
51
+ blockHeader = await this.tokenizer.readToken(Metadata.BlockHeader);
52
+ // Parse block data
53
+ await this.parseDataBlock(blockHeader);
54
+ } while (!blockHeader.lastBlock);
55
+ if (this.tokenizer.fileInfo.size && this.metadata.format.duration) {
56
+ const dataSize = this.tokenizer.fileInfo.size - this.tokenizer.position;
57
+ this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);
58
+ }
59
+ }
60
+ parseDataBlock(blockHeader) {
61
+ debug(`blockHeader type=${blockHeader.type}, length=${blockHeader.length}`);
62
+ switch (blockHeader.type) {
63
+ case BlockType.STREAMINFO:
64
+ return this.parseBlockStreamInfo(blockHeader.length);
65
+ case BlockType.PADDING:
66
+ this.padding += blockHeader.length;
67
+ break;
68
+ case BlockType.APPLICATION:
69
+ break;
70
+ case BlockType.SEEKTABLE:
71
+ break;
72
+ case BlockType.VORBIS_COMMENT:
73
+ return this.parseComment(blockHeader.length);
74
+ case BlockType.CUESHEET:
75
+ break;
76
+ case BlockType.PICTURE:
77
+ return this.parsePicture(blockHeader.length).then();
78
+ default:
79
+ this.metadata.addWarning('Unknown block type: ' + blockHeader.type);
80
+ }
81
+ // Ignore data block
82
+ return this.tokenizer.ignore(blockHeader.length).then();
83
+ }
84
+ /**
85
+ * Parse STREAMINFO
86
+ */
87
+ async parseBlockStreamInfo(dataLen) {
88
+ if (dataLen !== Metadata.BlockStreamInfo.len)
89
+ throw new Error('Unexpected block-stream-info length');
90
+ const streamInfo = await this.tokenizer.readToken(Metadata.BlockStreamInfo);
91
+ this.metadata.setFormat('container', 'FLAC');
92
+ this.metadata.setFormat('codec', 'FLAC');
93
+ this.metadata.setFormat('lossless', true);
94
+ this.metadata.setFormat('numberOfChannels', streamInfo.channels);
95
+ this.metadata.setFormat('bitsPerSample', streamInfo.bitsPerSample);
96
+ this.metadata.setFormat('sampleRate', streamInfo.sampleRate);
97
+ if (streamInfo.totalSamples > 0) {
98
+ this.metadata.setFormat('duration', streamInfo.totalSamples / streamInfo.sampleRate);
99
+ }
100
+ }
101
+ /**
102
+ * Parse VORBIS_COMMENT
103
+ * Ref: https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-640004.2.3
104
+ */
105
+ async parseComment(dataLen) {
106
+ const data = await this.tokenizer.readToken(new Token.Uint8ArrayType(dataLen));
107
+ const decoder = new VorbisDecoder_1.VorbisDecoder(data, 0);
108
+ decoder.readStringUtf8(); // vendor (skip)
109
+ const commentListLength = decoder.readInt32();
110
+ for (let i = 0; i < commentListLength; i++) {
111
+ const tag = decoder.parseUserComment();
112
+ this.vorbisParser.addTag(tag.key, tag.value);
113
+ }
114
+ }
115
+ async parsePicture(dataLen) {
116
+ if (this.options.skipCovers) {
117
+ return this.tokenizer.ignore(dataLen);
118
+ }
119
+ else {
120
+ const picture = await this.tokenizer.readToken(new Vorbis_1.VorbisPictureToken(dataLen));
121
+ this.vorbisParser.addTag('METADATA_BLOCK_PICTURE', picture);
122
+ }
123
+ }
124
+ }
125
+ exports.FlacParser = FlacParser;
126
+ class Metadata {
127
+ }
128
+ Metadata.BlockHeader = {
129
+ len: 4,
130
+ get: (buf, off) => {
131
+ return {
132
+ lastBlock: util.getBit(buf, off, 7),
133
+ type: util.getBitAllignedNumber(buf, off, 1, 7),
134
+ length: Token.UINT24_BE.get(buf, off + 1)
135
+ };
136
+ }
137
+ };
138
+ /**
139
+ * METADATA_BLOCK_DATA
140
+ * Ref: https://xiph.org/flac/format.html#metadata_block_streaminfo
141
+ */
142
+ Metadata.BlockStreamInfo = {
143
+ len: 34,
144
+ get: (buf, off) => {
145
+ return {
146
+ // The minimum block size (in samples) used in the stream.
147
+ minimumBlockSize: Token.UINT16_BE.get(buf, off),
148
+ // The maximum block size (in samples) used in the stream.
149
+ // (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.
150
+ maximumBlockSize: Token.UINT16_BE.get(buf, off + 2) / 1000,
151
+ // The minimum frame size (in bytes) used in the stream.
152
+ // May be 0 to imply the value is not known.
153
+ minimumFrameSize: Token.UINT24_BE.get(buf, off + 4),
154
+ // The maximum frame size (in bytes) used in the stream.
155
+ // May be 0 to imply the value is not known.
156
+ maximumFrameSize: Token.UINT24_BE.get(buf, off + 7),
157
+ // Sample rate in Hz. Though 20 bits are available,
158
+ // the maximum sample rate is limited by the structure of frame headers to 655350Hz.
159
+ // Also, a value of 0 is invalid.
160
+ sampleRate: Token.UINT24_BE.get(buf, off + 10) >> 4,
161
+ // probably slower: sampleRate: common.getBitAllignedNumber(buf, off + 10, 0, 20),
162
+ // (number of channels)-1. FLAC supports from 1 to 8 channels
163
+ channels: util.getBitAllignedNumber(buf, off + 12, 4, 3) + 1,
164
+ // bits per sample)-1.
165
+ // FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.
166
+ bitsPerSample: util.getBitAllignedNumber(buf, off + 12, 7, 5) + 1,
167
+ // Total samples in stream.
168
+ // 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels.
169
+ // A value of zero here means the number of total samples is unknown.
170
+ totalSamples: util.getBitAllignedNumber(buf, off + 13, 4, 36),
171
+ // the MD5 hash of the file (see notes for usage... it's a littly tricky)
172
+ fileMD5: new Token.Uint8ArrayType(16).get(buf, off + 18)
173
+ };
174
+ }
175
+ };
@@ -1,13 +1,13 @@
1
- import { BasicParser } from '../common/BasicParser';
2
- import { IRandomReader } from '../type';
3
- /**
4
- * ID3v1 Genre mappings
5
- * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres
6
- */
7
- export declare const Genres: string[];
8
- export declare class ID3v1Parser extends BasicParser {
9
- private static getGenre;
10
- parse(): Promise<void>;
11
- private addTag;
12
- }
13
- export declare function hasID3v1Header(reader: IRandomReader): Promise<boolean>;
1
+ import { BasicParser } from '../common/BasicParser';
2
+ import { IRandomReader } from '../type';
3
+ /**
4
+ * ID3v1 Genre mappings
5
+ * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres
6
+ */
7
+ export declare const Genres: string[];
8
+ export declare class ID3v1Parser extends BasicParser {
9
+ private static getGenre;
10
+ parse(): Promise<void>;
11
+ private addTag;
12
+ }
13
+ export declare function hasID3v1Header(reader: IRandomReader): Promise<boolean>;