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.
- package/README.md +432 -432
- package/lib/ParserFactory.d.ts +49 -49
- package/lib/ParserFactory.js +251 -251
- package/lib/aiff/AiffParser.d.ts +15 -15
- package/lib/aiff/AiffParser.js +85 -85
- package/lib/aiff/AiffToken.d.ts +22 -22
- package/lib/aiff/AiffToken.js +43 -43
- package/lib/apev2/APEv2Parser.d.ts +30 -30
- package/lib/apev2/APEv2Parser.js +162 -162
- package/lib/apev2/APEv2TagMapper.d.ts +4 -4
- package/lib/apev2/APEv2TagMapper.js +87 -86
- package/lib/apev2/APEv2Token.d.ts +100 -100
- package/lib/apev2/APEv2Token.js +127 -126
- package/lib/asf/AsfObject.d.ts +319 -319
- package/lib/asf/AsfObject.js +384 -384
- package/lib/asf/AsfParser.d.ts +17 -17
- package/lib/asf/AsfParser.js +135 -135
- package/lib/asf/AsfTagMapper.d.ts +7 -7
- package/lib/asf/AsfTagMapper.js +96 -95
- package/lib/asf/AsfUtil.d.ts +13 -13
- package/lib/asf/AsfUtil.js +40 -40
- package/lib/asf/GUID.d.ts +86 -86
- package/lib/asf/GUID.js +123 -123
- package/lib/common/BasicParser.d.ts +17 -17
- package/lib/common/BasicParser.js +18 -18
- package/lib/common/CaseInsensitiveTagMap.d.ts +10 -10
- package/lib/common/CaseInsensitiveTagMap.js +22 -21
- package/lib/common/CombinedTagMapper.d.ts +19 -19
- package/lib/common/CombinedTagMapper.js +52 -51
- package/lib/common/FourCC.d.ts +6 -6
- package/lib/common/FourCC.js +29 -28
- package/lib/common/GenericTagMapper.d.ts +51 -51
- package/lib/common/GenericTagMapper.js +56 -55
- package/lib/common/GenericTagTypes.d.ts +33 -33
- package/lib/common/GenericTagTypes.js +132 -131
- package/lib/common/MetadataCollector.d.ts +76 -76
- package/lib/common/MetadataCollector.js +276 -274
- package/lib/common/RandomFileReader.d.ts +20 -20
- package/lib/common/RandomFileReader.js +37 -37
- package/lib/common/RandomUint8ArrayReader.d.ts +18 -18
- package/lib/common/RandomUint8ArrayReader.js +25 -25
- package/lib/common/Util.d.ts +57 -57
- package/lib/common/Util.js +170 -169
- package/lib/core.d.ts +48 -48
- package/lib/core.js +90 -90
- package/lib/dsdiff/DsdiffParser.d.ts +14 -14
- package/lib/dsdiff/DsdiffParser.js +143 -143
- package/lib/dsdiff/DsdiffToken.d.ts +9 -9
- package/lib/dsdiff/DsdiffToken.js +21 -21
- package/lib/dsf/DsfChunk.d.ts +86 -86
- package/lib/dsf/DsfChunk.js +54 -54
- package/lib/dsf/DsfParser.d.ts +9 -9
- package/lib/dsf/DsfParser.js +56 -56
- package/lib/flac/FlacParser.d.ts +28 -28
- package/lib/flac/FlacParser.js +175 -175
- package/lib/id3v1/ID3v1Parser.d.ts +13 -13
- package/lib/id3v1/ID3v1Parser.js +134 -134
- package/lib/id3v1/ID3v1TagMap.d.ts +4 -4
- package/lib/id3v1/ID3v1TagMap.js +23 -22
- package/lib/id3v2/AbstractID3Parser.d.ts +17 -17
- package/lib/id3v2/AbstractID3Parser.js +60 -60
- package/lib/id3v2/FrameParser.d.ts +32 -32
- package/lib/id3v2/FrameParser.js +323 -323
- package/lib/id3v2/ID3v22TagMapper.d.ts +9 -9
- package/lib/id3v2/ID3v22TagMapper.js +56 -54
- package/lib/id3v2/ID3v24TagMapper.d.ts +14 -14
- package/lib/id3v2/ID3v24TagMapper.js +194 -193
- package/lib/id3v2/ID3v2Parser.d.ts +29 -29
- package/lib/id3v2/ID3v2Parser.js +194 -194
- package/lib/id3v2/ID3v2Token.d.ts +73 -73
- package/lib/id3v2/ID3v2Token.js +106 -106
- package/lib/iff/index.d.ts +33 -33
- package/lib/iff/index.js +19 -19
- package/lib/index.d.ts +34 -34
- package/lib/index.js +64 -64
- package/lib/lyrics3/Lyrics3.d.ts +3 -3
- package/lib/lyrics3/Lyrics3.js +17 -17
- package/lib/matroska/MatroskaDtd.d.ts +8 -8
- package/lib/matroska/MatroskaDtd.js +279 -279
- package/lib/matroska/MatroskaParser.d.ts +37 -37
- package/lib/matroska/MatroskaParser.js +235 -234
- package/lib/matroska/MatroskaTagMapper.d.ts +4 -4
- package/lib/matroska/MatroskaTagMapper.js +36 -35
- package/lib/matroska/types.d.ts +175 -175
- package/lib/matroska/types.js +32 -32
- package/lib/mp4/Atom.d.ts +16 -16
- package/lib/mp4/Atom.js +70 -70
- package/lib/mp4/AtomToken.d.ts +395 -395
- package/lib/mp4/AtomToken.js +406 -406
- package/lib/mp4/MP4Parser.d.ts +30 -31
- package/lib/mp4/MP4Parser.js +511 -515
- package/lib/mp4/MP4TagMapper.d.ts +5 -5
- package/lib/mp4/MP4TagMapper.js +116 -115
- package/lib/mpeg/ExtendedLameHeader.d.ts +27 -27
- package/lib/mpeg/ExtendedLameHeader.js +31 -31
- package/lib/mpeg/MpegParser.d.ts +49 -49
- package/lib/mpeg/MpegParser.js +529 -529
- package/lib/mpeg/ReplayGainDataFormat.d.ts +55 -55
- package/lib/mpeg/ReplayGainDataFormat.js +69 -69
- package/lib/mpeg/XingTag.d.ts +45 -45
- package/lib/mpeg/XingTag.js +69 -69
- package/lib/musepack/index.d.ts +5 -5
- package/lib/musepack/index.js +32 -32
- package/lib/musepack/sv7/BitReader.d.ts +13 -13
- package/lib/musepack/sv7/BitReader.js +54 -54
- package/lib/musepack/sv7/MpcSv7Parser.d.ts +8 -8
- package/lib/musepack/sv7/MpcSv7Parser.js +46 -46
- package/lib/musepack/sv7/StreamVersion7.d.ts +28 -28
- package/lib/musepack/sv7/StreamVersion7.js +41 -41
- package/lib/musepack/sv8/MpcSv8Parser.d.ts +6 -6
- package/lib/musepack/sv8/MpcSv8Parser.js +55 -55
- package/lib/musepack/sv8/StreamVersion8.d.ts +40 -40
- package/lib/musepack/sv8/StreamVersion8.js +80 -80
- package/lib/ogg/Ogg.d.ts +72 -72
- package/lib/ogg/Ogg.js +2 -2
- package/lib/ogg/OggParser.d.ts +23 -23
- package/lib/ogg/OggParser.js +126 -126
- package/lib/ogg/opus/Opus.d.ts +48 -48
- package/lib/ogg/opus/Opus.js +28 -28
- package/lib/ogg/opus/OpusParser.d.ts +25 -25
- package/lib/ogg/opus/OpusParser.js +56 -56
- package/lib/ogg/speex/Speex.d.ts +36 -36
- package/lib/ogg/speex/Speex.js +31 -31
- package/lib/ogg/speex/SpeexParser.d.ts +22 -22
- package/lib/ogg/speex/SpeexParser.js +35 -35
- package/lib/ogg/theora/Theora.d.ts +20 -20
- package/lib/ogg/theora/Theora.js +23 -23
- package/lib/ogg/theora/TheoraParser.d.ts +28 -28
- package/lib/ogg/theora/TheoraParser.js +44 -44
- package/lib/ogg/vorbis/Vorbis.d.ts +79 -79
- package/lib/ogg/vorbis/Vorbis.js +78 -78
- package/lib/ogg/vorbis/VorbisDecoder.d.ts +12 -12
- package/lib/ogg/vorbis/VorbisDecoder.js +32 -32
- package/lib/ogg/vorbis/VorbisParser.d.ts +36 -36
- package/lib/ogg/vorbis/VorbisParser.js +128 -128
- package/lib/ogg/vorbis/VorbisTagMapper.d.ts +7 -7
- package/lib/ogg/vorbis/VorbisTagMapper.js +133 -132
- package/lib/riff/RiffChunk.d.ts +16 -16
- package/lib/riff/RiffChunk.js +32 -32
- package/lib/riff/RiffInfoTagMap.d.ts +10 -10
- package/lib/riff/RiffInfoTagMap.js +38 -37
- package/lib/type.d.ts +599 -599
- package/lib/type.js +14 -13
- package/lib/wav/WaveChunk.d.ts +64 -64
- package/lib/wav/WaveChunk.js +65 -65
- package/lib/wav/WaveParser.d.ts +24 -24
- package/lib/wav/WaveParser.js +144 -144
- package/lib/wavpack/WavPackParser.d.ts +14 -14
- package/lib/wavpack/WavPackParser.js +105 -105
- package/lib/wavpack/WavPackToken.d.ts +64 -64
- package/lib/wavpack/WavPackToken.js +76 -76
- package/package.json +142 -142
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { IGetToken } from 'strtok3/lib/core';
|
|
2
|
-
export interface IReplayGain {
|
|
3
|
-
type: NameCode;
|
|
4
|
-
origin: ReplayGainOriginator;
|
|
5
|
-
adjustment: number;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code
|
|
9
|
-
*/
|
|
10
|
-
declare enum NameCode {
|
|
11
|
-
/**
|
|
12
|
-
* not set
|
|
13
|
-
*/
|
|
14
|
-
not_set = 0,
|
|
15
|
-
/**
|
|
16
|
-
* Radio Gain Adjustment
|
|
17
|
-
*/
|
|
18
|
-
radio = 1,
|
|
19
|
-
/**
|
|
20
|
-
* Audiophile Gain Adjustment
|
|
21
|
-
*/
|
|
22
|
-
audiophile = 2
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code
|
|
26
|
-
*/
|
|
27
|
-
declare enum ReplayGainOriginator {
|
|
28
|
-
/**
|
|
29
|
-
* Replay Gain unspecified
|
|
30
|
-
*/
|
|
31
|
-
unspecified = 0,
|
|
32
|
-
/**
|
|
33
|
-
* Replay Gain pre-set by artist/producer/mastering engineer
|
|
34
|
-
*/
|
|
35
|
-
engineer = 1,
|
|
36
|
-
/**
|
|
37
|
-
* Replay Gain set by user
|
|
38
|
-
*/
|
|
39
|
-
user = 2,
|
|
40
|
-
/**
|
|
41
|
-
* Replay Gain determined automatically, as described on this site
|
|
42
|
-
*/
|
|
43
|
-
automatic = 3,
|
|
44
|
-
/**
|
|
45
|
-
* Set by simple RMS average
|
|
46
|
-
*/
|
|
47
|
-
rms_average = 4
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Replay Gain Data Format
|
|
51
|
-
*
|
|
52
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format
|
|
53
|
-
*/
|
|
54
|
-
export declare const ReplayGain: IGetToken<IReplayGain>;
|
|
55
|
-
export {};
|
|
1
|
+
import { IGetToken } from 'strtok3/lib/core';
|
|
2
|
+
export interface IReplayGain {
|
|
3
|
+
type: NameCode;
|
|
4
|
+
origin: ReplayGainOriginator;
|
|
5
|
+
adjustment: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code
|
|
9
|
+
*/
|
|
10
|
+
declare enum NameCode {
|
|
11
|
+
/**
|
|
12
|
+
* not set
|
|
13
|
+
*/
|
|
14
|
+
not_set = 0,
|
|
15
|
+
/**
|
|
16
|
+
* Radio Gain Adjustment
|
|
17
|
+
*/
|
|
18
|
+
radio = 1,
|
|
19
|
+
/**
|
|
20
|
+
* Audiophile Gain Adjustment
|
|
21
|
+
*/
|
|
22
|
+
audiophile = 2
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code
|
|
26
|
+
*/
|
|
27
|
+
declare enum ReplayGainOriginator {
|
|
28
|
+
/**
|
|
29
|
+
* Replay Gain unspecified
|
|
30
|
+
*/
|
|
31
|
+
unspecified = 0,
|
|
32
|
+
/**
|
|
33
|
+
* Replay Gain pre-set by artist/producer/mastering engineer
|
|
34
|
+
*/
|
|
35
|
+
engineer = 1,
|
|
36
|
+
/**
|
|
37
|
+
* Replay Gain set by user
|
|
38
|
+
*/
|
|
39
|
+
user = 2,
|
|
40
|
+
/**
|
|
41
|
+
* Replay Gain determined automatically, as described on this site
|
|
42
|
+
*/
|
|
43
|
+
automatic = 3,
|
|
44
|
+
/**
|
|
45
|
+
* Set by simple RMS average
|
|
46
|
+
*/
|
|
47
|
+
rms_average = 4
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Replay Gain Data Format
|
|
51
|
+
*
|
|
52
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format
|
|
53
|
+
*/
|
|
54
|
+
export declare const ReplayGain: IGetToken<IReplayGain>;
|
|
55
|
+
export {};
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ReplayGain = void 0;
|
|
4
|
-
const common = require("../common/Util");
|
|
5
|
-
/**
|
|
6
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code
|
|
7
|
-
*/
|
|
8
|
-
var NameCode;
|
|
9
|
-
(function (NameCode) {
|
|
10
|
-
/**
|
|
11
|
-
* not set
|
|
12
|
-
*/
|
|
13
|
-
NameCode[NameCode["not_set"] = 0] = "not_set";
|
|
14
|
-
/**
|
|
15
|
-
* Radio Gain Adjustment
|
|
16
|
-
*/
|
|
17
|
-
NameCode[NameCode["radio"] = 1] = "radio";
|
|
18
|
-
/**
|
|
19
|
-
* Audiophile Gain Adjustment
|
|
20
|
-
*/
|
|
21
|
-
NameCode[NameCode["audiophile"] = 2] = "audiophile";
|
|
22
|
-
})(NameCode || (NameCode = {}));
|
|
23
|
-
/**
|
|
24
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code
|
|
25
|
-
*/
|
|
26
|
-
var ReplayGainOriginator;
|
|
27
|
-
(function (ReplayGainOriginator) {
|
|
28
|
-
/**
|
|
29
|
-
* Replay Gain unspecified
|
|
30
|
-
*/
|
|
31
|
-
ReplayGainOriginator[ReplayGainOriginator["unspecified"] = 0] = "unspecified";
|
|
32
|
-
/**
|
|
33
|
-
* Replay Gain pre-set by artist/producer/mastering engineer
|
|
34
|
-
*/
|
|
35
|
-
ReplayGainOriginator[ReplayGainOriginator["engineer"] = 1] = "engineer";
|
|
36
|
-
/**
|
|
37
|
-
* Replay Gain set by user
|
|
38
|
-
*/
|
|
39
|
-
ReplayGainOriginator[ReplayGainOriginator["user"] = 2] = "user";
|
|
40
|
-
/**
|
|
41
|
-
* Replay Gain determined automatically, as described on this site
|
|
42
|
-
*/
|
|
43
|
-
ReplayGainOriginator[ReplayGainOriginator["automatic"] = 3] = "automatic";
|
|
44
|
-
/**
|
|
45
|
-
* Set by simple RMS average
|
|
46
|
-
*/
|
|
47
|
-
ReplayGainOriginator[ReplayGainOriginator["rms_average"] = 4] = "rms_average";
|
|
48
|
-
})(ReplayGainOriginator || (ReplayGainOriginator = {}));
|
|
49
|
-
/**
|
|
50
|
-
* Replay Gain Data Format
|
|
51
|
-
*
|
|
52
|
-
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format
|
|
53
|
-
*/
|
|
54
|
-
exports.ReplayGain = {
|
|
55
|
-
len: 2,
|
|
56
|
-
get: (buf, off) => {
|
|
57
|
-
const gain_type = common.getBitAllignedNumber(buf, off, 0, 3);
|
|
58
|
-
const sign = common.getBitAllignedNumber(buf, off, 6, 1);
|
|
59
|
-
const gain_adj = common.getBitAllignedNumber(buf, off, 7, 9) / 10.0;
|
|
60
|
-
if (gain_type > 0) {
|
|
61
|
-
return {
|
|
62
|
-
type: common.getBitAllignedNumber(buf, off, 0, 3),
|
|
63
|
-
origin: common.getBitAllignedNumber(buf, off, 3, 3),
|
|
64
|
-
adjustment: (sign ? -gain_adj : gain_adj)
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
return undefined;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReplayGain = void 0;
|
|
4
|
+
const common = require("../common/Util");
|
|
5
|
+
/**
|
|
6
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code
|
|
7
|
+
*/
|
|
8
|
+
var NameCode;
|
|
9
|
+
(function (NameCode) {
|
|
10
|
+
/**
|
|
11
|
+
* not set
|
|
12
|
+
*/
|
|
13
|
+
NameCode[NameCode["not_set"] = 0] = "not_set";
|
|
14
|
+
/**
|
|
15
|
+
* Radio Gain Adjustment
|
|
16
|
+
*/
|
|
17
|
+
NameCode[NameCode["radio"] = 1] = "radio";
|
|
18
|
+
/**
|
|
19
|
+
* Audiophile Gain Adjustment
|
|
20
|
+
*/
|
|
21
|
+
NameCode[NameCode["audiophile"] = 2] = "audiophile";
|
|
22
|
+
})(NameCode || (NameCode = {}));
|
|
23
|
+
/**
|
|
24
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code
|
|
25
|
+
*/
|
|
26
|
+
var ReplayGainOriginator;
|
|
27
|
+
(function (ReplayGainOriginator) {
|
|
28
|
+
/**
|
|
29
|
+
* Replay Gain unspecified
|
|
30
|
+
*/
|
|
31
|
+
ReplayGainOriginator[ReplayGainOriginator["unspecified"] = 0] = "unspecified";
|
|
32
|
+
/**
|
|
33
|
+
* Replay Gain pre-set by artist/producer/mastering engineer
|
|
34
|
+
*/
|
|
35
|
+
ReplayGainOriginator[ReplayGainOriginator["engineer"] = 1] = "engineer";
|
|
36
|
+
/**
|
|
37
|
+
* Replay Gain set by user
|
|
38
|
+
*/
|
|
39
|
+
ReplayGainOriginator[ReplayGainOriginator["user"] = 2] = "user";
|
|
40
|
+
/**
|
|
41
|
+
* Replay Gain determined automatically, as described on this site
|
|
42
|
+
*/
|
|
43
|
+
ReplayGainOriginator[ReplayGainOriginator["automatic"] = 3] = "automatic";
|
|
44
|
+
/**
|
|
45
|
+
* Set by simple RMS average
|
|
46
|
+
*/
|
|
47
|
+
ReplayGainOriginator[ReplayGainOriginator["rms_average"] = 4] = "rms_average";
|
|
48
|
+
})(ReplayGainOriginator || (ReplayGainOriginator = {}));
|
|
49
|
+
/**
|
|
50
|
+
* Replay Gain Data Format
|
|
51
|
+
*
|
|
52
|
+
* https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format
|
|
53
|
+
*/
|
|
54
|
+
exports.ReplayGain = {
|
|
55
|
+
len: 2,
|
|
56
|
+
get: (buf, off) => {
|
|
57
|
+
const gain_type = common.getBitAllignedNumber(buf, off, 0, 3);
|
|
58
|
+
const sign = common.getBitAllignedNumber(buf, off, 6, 1);
|
|
59
|
+
const gain_adj = common.getBitAllignedNumber(buf, off, 7, 9) / 10.0;
|
|
60
|
+
if (gain_type > 0) {
|
|
61
|
+
return {
|
|
62
|
+
type: common.getBitAllignedNumber(buf, off, 0, 3),
|
|
63
|
+
origin: common.getBitAllignedNumber(buf, off, 3, 3),
|
|
64
|
+
adjustment: (sign ? -gain_adj : gain_adj)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
};
|
package/lib/mpeg/XingTag.d.ts
CHANGED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import * as Token from
|
|
3
|
-
import { IGetToken, ITokenizer } from 'strtok3/lib/core';
|
|
4
|
-
import { IExtendedLameHeader } from './ExtendedLameHeader';
|
|
5
|
-
export interface IXingHeaderFlags {
|
|
6
|
-
frames: boolean;
|
|
7
|
-
bytes: boolean;
|
|
8
|
-
toc: boolean;
|
|
9
|
-
vbrScale: boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Info Tag: Xing, LAME
|
|
13
|
-
*/
|
|
14
|
-
export declare const InfoTagHeaderTag: Token.StringType;
|
|
15
|
-
/**
|
|
16
|
-
* LAME TAG value
|
|
17
|
-
* Did not find any official documentation for this
|
|
18
|
-
* Value e.g.: "3.98.4"
|
|
19
|
-
*/
|
|
20
|
-
export declare const LameEncoderVersion: Token.StringType;
|
|
21
|
-
export interface IXingInfoTag {
|
|
22
|
-
/**
|
|
23
|
-
* total bit stream frames from Vbr header data
|
|
24
|
-
*/
|
|
25
|
-
numFrames?: number;
|
|
26
|
-
/**
|
|
27
|
-
* Actual stream size = file size - header(s) size [bytes]
|
|
28
|
-
*/
|
|
29
|
-
streamSize?: number;
|
|
30
|
-
toc?: Buffer;
|
|
31
|
-
/**
|
|
32
|
-
* the number of header data bytes (from original file)
|
|
33
|
-
*/
|
|
34
|
-
vbrScale?: number;
|
|
35
|
-
lame?: {
|
|
36
|
-
version: string;
|
|
37
|
-
extended?: IExtendedLameHeader;
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Info Tag
|
|
42
|
-
* Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
43
|
-
*/
|
|
44
|
-
export declare const XingHeaderFlags: IGetToken<IXingHeaderFlags>;
|
|
45
|
-
export declare function readXingHeader(tokenizer: ITokenizer): Promise<IXingInfoTag>;
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as Token from 'token-types';
|
|
3
|
+
import { IGetToken, ITokenizer } from 'strtok3/lib/core';
|
|
4
|
+
import { IExtendedLameHeader } from './ExtendedLameHeader';
|
|
5
|
+
export interface IXingHeaderFlags {
|
|
6
|
+
frames: boolean;
|
|
7
|
+
bytes: boolean;
|
|
8
|
+
toc: boolean;
|
|
9
|
+
vbrScale: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Info Tag: Xing, LAME
|
|
13
|
+
*/
|
|
14
|
+
export declare const InfoTagHeaderTag: Token.StringType;
|
|
15
|
+
/**
|
|
16
|
+
* LAME TAG value
|
|
17
|
+
* Did not find any official documentation for this
|
|
18
|
+
* Value e.g.: "3.98.4"
|
|
19
|
+
*/
|
|
20
|
+
export declare const LameEncoderVersion: Token.StringType;
|
|
21
|
+
export interface IXingInfoTag {
|
|
22
|
+
/**
|
|
23
|
+
* total bit stream frames from Vbr header data
|
|
24
|
+
*/
|
|
25
|
+
numFrames?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Actual stream size = file size - header(s) size [bytes]
|
|
28
|
+
*/
|
|
29
|
+
streamSize?: number;
|
|
30
|
+
toc?: Buffer;
|
|
31
|
+
/**
|
|
32
|
+
* the number of header data bytes (from original file)
|
|
33
|
+
*/
|
|
34
|
+
vbrScale?: number;
|
|
35
|
+
lame?: {
|
|
36
|
+
version: string;
|
|
37
|
+
extended?: IExtendedLameHeader;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Info Tag
|
|
42
|
+
* Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
43
|
+
*/
|
|
44
|
+
export declare const XingHeaderFlags: IGetToken<IXingHeaderFlags>;
|
|
45
|
+
export declare function readXingHeader(tokenizer: ITokenizer): Promise<IXingInfoTag>;
|
package/lib/mpeg/XingTag.js
CHANGED
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readXingHeader = exports.XingHeaderFlags = exports.LameEncoderVersion = exports.InfoTagHeaderTag = void 0;
|
|
4
|
-
const Token = require("token-types");
|
|
5
|
-
const util = require("../common/Util");
|
|
6
|
-
const ExtendedLameHeader_1 = require("./ExtendedLameHeader");
|
|
7
|
-
/**
|
|
8
|
-
* Info Tag: Xing, LAME
|
|
9
|
-
*/
|
|
10
|
-
exports.InfoTagHeaderTag = new Token.StringType(4, 'ascii');
|
|
11
|
-
/**
|
|
12
|
-
* LAME TAG value
|
|
13
|
-
* Did not find any official documentation for this
|
|
14
|
-
* Value e.g.: "3.98.4"
|
|
15
|
-
*/
|
|
16
|
-
exports.LameEncoderVersion = new Token.StringType(6, 'ascii');
|
|
17
|
-
/**
|
|
18
|
-
* Info Tag
|
|
19
|
-
* Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
20
|
-
*/
|
|
21
|
-
exports.XingHeaderFlags = {
|
|
22
|
-
len: 4,
|
|
23
|
-
get: (buf, off) => {
|
|
24
|
-
return {
|
|
25
|
-
frames: util.isBitSet(buf, off, 31),
|
|
26
|
-
bytes: util.isBitSet(buf, off, 30),
|
|
27
|
-
toc: util.isBitSet(buf, off, 29),
|
|
28
|
-
vbrScale: util.isBitSet(buf, off, 28)
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
// /**
|
|
33
|
-
// * XING Header Tag
|
|
34
|
-
// * Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
35
|
-
// */
|
|
36
|
-
async function readXingHeader(tokenizer) {
|
|
37
|
-
const flags = await tokenizer.readToken(exports.XingHeaderFlags);
|
|
38
|
-
const xingInfoTag = {};
|
|
39
|
-
if (flags.frames) {
|
|
40
|
-
xingInfoTag.numFrames = await tokenizer.readToken(Token.UINT32_BE);
|
|
41
|
-
}
|
|
42
|
-
if (flags.bytes) {
|
|
43
|
-
xingInfoTag.streamSize = await tokenizer.readToken(Token.UINT32_BE);
|
|
44
|
-
}
|
|
45
|
-
if (flags.toc) {
|
|
46
|
-
xingInfoTag.toc = Buffer.alloc(100);
|
|
47
|
-
await tokenizer.readBuffer(xingInfoTag.toc);
|
|
48
|
-
}
|
|
49
|
-
if (flags.vbrScale) {
|
|
50
|
-
xingInfoTag.vbrScale = await tokenizer.readToken(Token.UINT32_BE);
|
|
51
|
-
}
|
|
52
|
-
const lameTag = await tokenizer.peekToken(new Token.StringType(4, 'ascii'));
|
|
53
|
-
if (lameTag === 'LAME') {
|
|
54
|
-
await tokenizer.ignore(4);
|
|
55
|
-
xingInfoTag.lame = {
|
|
56
|
-
version: await tokenizer.readToken(new Token.StringType(5, 'ascii'))
|
|
57
|
-
};
|
|
58
|
-
const match = xingInfoTag.lame.version.match(/\d+.\d+/g);
|
|
59
|
-
if (match) {
|
|
60
|
-
const majorMinorVersion = xingInfoTag.lame.version.match(/\d+.\d+/g)[0]; // e.g. 3.97
|
|
61
|
-
const version = majorMinorVersion.split('.').map(n => parseInt(n, 10));
|
|
62
|
-
if (version[0] >= 3 && version[1] >= 90) {
|
|
63
|
-
xingInfoTag.lame.extended = await tokenizer.readToken(ExtendedLameHeader_1.ExtendedLameHeader);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return xingInfoTag;
|
|
68
|
-
}
|
|
69
|
-
exports.readXingHeader = readXingHeader;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readXingHeader = exports.XingHeaderFlags = exports.LameEncoderVersion = exports.InfoTagHeaderTag = void 0;
|
|
4
|
+
const Token = require("token-types");
|
|
5
|
+
const util = require("../common/Util");
|
|
6
|
+
const ExtendedLameHeader_1 = require("./ExtendedLameHeader");
|
|
7
|
+
/**
|
|
8
|
+
* Info Tag: Xing, LAME
|
|
9
|
+
*/
|
|
10
|
+
exports.InfoTagHeaderTag = new Token.StringType(4, 'ascii');
|
|
11
|
+
/**
|
|
12
|
+
* LAME TAG value
|
|
13
|
+
* Did not find any official documentation for this
|
|
14
|
+
* Value e.g.: "3.98.4"
|
|
15
|
+
*/
|
|
16
|
+
exports.LameEncoderVersion = new Token.StringType(6, 'ascii');
|
|
17
|
+
/**
|
|
18
|
+
* Info Tag
|
|
19
|
+
* Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
20
|
+
*/
|
|
21
|
+
exports.XingHeaderFlags = {
|
|
22
|
+
len: 4,
|
|
23
|
+
get: (buf, off) => {
|
|
24
|
+
return {
|
|
25
|
+
frames: util.isBitSet(buf, off, 31),
|
|
26
|
+
bytes: util.isBitSet(buf, off, 30),
|
|
27
|
+
toc: util.isBitSet(buf, off, 29),
|
|
28
|
+
vbrScale: util.isBitSet(buf, off, 28)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
// /**
|
|
33
|
+
// * XING Header Tag
|
|
34
|
+
// * Ref: http://gabriel.mp3-tech.org/mp3infotag.html
|
|
35
|
+
// */
|
|
36
|
+
async function readXingHeader(tokenizer) {
|
|
37
|
+
const flags = await tokenizer.readToken(exports.XingHeaderFlags);
|
|
38
|
+
const xingInfoTag = {};
|
|
39
|
+
if (flags.frames) {
|
|
40
|
+
xingInfoTag.numFrames = await tokenizer.readToken(Token.UINT32_BE);
|
|
41
|
+
}
|
|
42
|
+
if (flags.bytes) {
|
|
43
|
+
xingInfoTag.streamSize = await tokenizer.readToken(Token.UINT32_BE);
|
|
44
|
+
}
|
|
45
|
+
if (flags.toc) {
|
|
46
|
+
xingInfoTag.toc = Buffer.alloc(100);
|
|
47
|
+
await tokenizer.readBuffer(xingInfoTag.toc);
|
|
48
|
+
}
|
|
49
|
+
if (flags.vbrScale) {
|
|
50
|
+
xingInfoTag.vbrScale = await tokenizer.readToken(Token.UINT32_BE);
|
|
51
|
+
}
|
|
52
|
+
const lameTag = await tokenizer.peekToken(new Token.StringType(4, 'ascii'));
|
|
53
|
+
if (lameTag === 'LAME') {
|
|
54
|
+
await tokenizer.ignore(4);
|
|
55
|
+
xingInfoTag.lame = {
|
|
56
|
+
version: await tokenizer.readToken(new Token.StringType(5, 'ascii'))
|
|
57
|
+
};
|
|
58
|
+
const match = xingInfoTag.lame.version.match(/\d+.\d+/g);
|
|
59
|
+
if (match) {
|
|
60
|
+
const majorMinorVersion = xingInfoTag.lame.version.match(/\d+.\d+/g)[0]; // e.g. 3.97
|
|
61
|
+
const version = majorMinorVersion.split('.').map(n => parseInt(n, 10));
|
|
62
|
+
if (version[0] >= 3 && version[1] >= 90) {
|
|
63
|
+
xingInfoTag.lame.extended = await tokenizer.readToken(ExtendedLameHeader_1.ExtendedLameHeader);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return xingInfoTag;
|
|
68
|
+
}
|
|
69
|
+
exports.readXingHeader = readXingHeader;
|
package/lib/musepack/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AbstractID3Parser } from '../id3v2/AbstractID3Parser';
|
|
2
|
-
declare class MusepackParser extends AbstractID3Parser {
|
|
3
|
-
_parse(): Promise<void>;
|
|
4
|
-
}
|
|
5
|
-
export default MusepackParser;
|
|
1
|
+
import { AbstractID3Parser } from '../id3v2/AbstractID3Parser';
|
|
2
|
+
declare class MusepackParser extends AbstractID3Parser {
|
|
3
|
+
_parse(): Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export default MusepackParser;
|
package/lib/musepack/index.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const initDebug = require("debug");
|
|
4
|
-
const Token = require("token-types");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const debug = initDebug('music-metadata:parser:musepack');
|
|
9
|
-
class MusepackParser extends AbstractID3Parser_1.AbstractID3Parser {
|
|
10
|
-
async _parse() {
|
|
11
|
-
const signature = await this.tokenizer.peekToken(new Token.StringType(3, 'binary'));
|
|
12
|
-
let mpcParser;
|
|
13
|
-
switch (signature) {
|
|
14
|
-
case 'MP+': {
|
|
15
|
-
debug('Musepack stream-version 7');
|
|
16
|
-
mpcParser = new MpcSv7Parser_1.MpcSv7Parser();
|
|
17
|
-
break;
|
|
18
|
-
}
|
|
19
|
-
case 'MPC': {
|
|
20
|
-
debug('Musepack stream-version 8');
|
|
21
|
-
mpcParser = new MpcSv8Parser_1.MpcSv8Parser();
|
|
22
|
-
break;
|
|
23
|
-
}
|
|
24
|
-
default: {
|
|
25
|
-
throw new Error('Invalid Musepack signature prefix');
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
mpcParser.init(this.metadata, this.tokenizer, this.options);
|
|
29
|
-
return mpcParser.parse();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.default = MusepackParser;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const initDebug = require("debug");
|
|
4
|
+
const Token = require("token-types");
|
|
5
|
+
const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
|
|
6
|
+
const MpcSv8Parser_1 = require("./sv8/MpcSv8Parser");
|
|
7
|
+
const MpcSv7Parser_1 = require("./sv7/MpcSv7Parser");
|
|
8
|
+
const debug = initDebug('music-metadata:parser:musepack');
|
|
9
|
+
class MusepackParser extends AbstractID3Parser_1.AbstractID3Parser {
|
|
10
|
+
async _parse() {
|
|
11
|
+
const signature = await this.tokenizer.peekToken(new Token.StringType(3, 'binary'));
|
|
12
|
+
let mpcParser;
|
|
13
|
+
switch (signature) {
|
|
14
|
+
case 'MP+': {
|
|
15
|
+
debug('Musepack stream-version 7');
|
|
16
|
+
mpcParser = new MpcSv7Parser_1.MpcSv7Parser();
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
19
|
+
case 'MPC': {
|
|
20
|
+
debug('Musepack stream-version 8');
|
|
21
|
+
mpcParser = new MpcSv8Parser_1.MpcSv8Parser();
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
default: {
|
|
25
|
+
throw new Error('Invalid Musepack signature prefix');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
mpcParser.init(this.metadata, this.tokenizer, this.options);
|
|
29
|
+
return mpcParser.parse();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.default = MusepackParser;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ITokenizer } from 'strtok3/lib/core';
|
|
2
|
-
export declare class BitReader {
|
|
3
|
-
private tokenizer;
|
|
4
|
-
pos: number;
|
|
5
|
-
private dword;
|
|
6
|
-
constructor(tokenizer: ITokenizer);
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
* @param bits 1..30 bits
|
|
10
|
-
*/
|
|
11
|
-
read(bits: number): Promise<number>;
|
|
12
|
-
ignore(bits: number): Promise<number>;
|
|
13
|
-
}
|
|
1
|
+
import { ITokenizer } from 'strtok3/lib/core';
|
|
2
|
+
export declare class BitReader {
|
|
3
|
+
private tokenizer;
|
|
4
|
+
pos: number;
|
|
5
|
+
private dword;
|
|
6
|
+
constructor(tokenizer: ITokenizer);
|
|
7
|
+
/**
|
|
8
|
+
*
|
|
9
|
+
* @param bits 1..30 bits
|
|
10
|
+
*/
|
|
11
|
+
read(bits: number): Promise<number>;
|
|
12
|
+
ignore(bits: number): Promise<number>;
|
|
13
|
+
}
|