music-metadata 7.11.3 → 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.
- 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 +58 -57
- package/lib/common/Util.js +163 -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 +329 -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 +45 -34
- package/lib/index.js +74 -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 -30
- package/lib/mp4/MP4Parser.js +511 -511
- 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,128 +1,128 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VorbisParser = void 0;
|
|
4
|
-
const Token = require("token-types");
|
|
5
|
-
const _debug = require("debug");
|
|
6
|
-
const VorbisDecoder_1 = require("./VorbisDecoder");
|
|
7
|
-
const Vorbis_1 = require("./Vorbis");
|
|
8
|
-
const debug = _debug('music-metadata:parser:ogg:vorbis1');
|
|
9
|
-
/**
|
|
10
|
-
* Vorbis 1 Parser.
|
|
11
|
-
* Used by OggParser
|
|
12
|
-
*/
|
|
13
|
-
class VorbisParser {
|
|
14
|
-
constructor(metadata, options) {
|
|
15
|
-
this.metadata = metadata;
|
|
16
|
-
this.options = options;
|
|
17
|
-
this.pageSegments = [];
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Vorbis 1 parser
|
|
21
|
-
* @param header Ogg Page Header
|
|
22
|
-
* @param pageData Page data
|
|
23
|
-
*/
|
|
24
|
-
parsePage(header, pageData) {
|
|
25
|
-
if (header.headerType.firstPage) {
|
|
26
|
-
this.parseFirstPage(header, pageData);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
if (header.headerType.continued) {
|
|
30
|
-
if (this.pageSegments.length === 0) {
|
|
31
|
-
throw new Error("Cannot continue on previous page");
|
|
32
|
-
}
|
|
33
|
-
this.pageSegments.push(pageData);
|
|
34
|
-
}
|
|
35
|
-
if (header.headerType.lastPage || !header.headerType.continued) {
|
|
36
|
-
// Flush page segments
|
|
37
|
-
if (this.pageSegments.length > 0) {
|
|
38
|
-
const fullPage = Buffer.concat(this.pageSegments);
|
|
39
|
-
this.parseFullPage(fullPage);
|
|
40
|
-
}
|
|
41
|
-
// Reset page segments
|
|
42
|
-
this.pageSegments = header.headerType.lastPage ? [] : [pageData];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (header.headerType.lastPage) {
|
|
46
|
-
this.calculateDuration(header);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
flush() {
|
|
50
|
-
this.parseFullPage(Buffer.concat(this.pageSegments));
|
|
51
|
-
}
|
|
52
|
-
parseUserComment(pageData, offset) {
|
|
53
|
-
const decoder = new VorbisDecoder_1.VorbisDecoder(pageData, offset);
|
|
54
|
-
const tag = decoder.parseUserComment();
|
|
55
|
-
this.addTag(tag.key, tag.value);
|
|
56
|
-
return tag.len;
|
|
57
|
-
}
|
|
58
|
-
addTag(id, value) {
|
|
59
|
-
if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {
|
|
60
|
-
if (this.options.skipCovers) {
|
|
61
|
-
debug(`Ignore picture`);
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
value = Vorbis_1.VorbisPictureToken.fromBase64(value);
|
|
65
|
-
debug(`Push picture: id=${id}, format=${value.format}`);
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
debug(`Push tag: id=${id}, value=${value}`);
|
|
69
|
-
}
|
|
70
|
-
this.metadata.addTag('vorbis', id, value);
|
|
71
|
-
}
|
|
72
|
-
calculateDuration(header) {
|
|
73
|
-
if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {
|
|
74
|
-
// Calculate duration
|
|
75
|
-
this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);
|
|
76
|
-
this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Parse first Ogg/Vorbis page
|
|
81
|
-
* @param {IPageHeader} header
|
|
82
|
-
* @param {Buffer} pageData
|
|
83
|
-
*/
|
|
84
|
-
parseFirstPage(header, pageData) {
|
|
85
|
-
this.metadata.setFormat('codec', 'Vorbis I');
|
|
86
|
-
debug("Parse first page");
|
|
87
|
-
// Parse Vorbis common header
|
|
88
|
-
const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
|
|
89
|
-
if (commonHeader.vorbis !== 'vorbis')
|
|
90
|
-
throw new Error('Metadata does not look like Vorbis');
|
|
91
|
-
if (commonHeader.packetType === 1) {
|
|
92
|
-
const idHeader = Vorbis_1.IdentificationHeader.get(pageData, Vorbis_1.CommonHeader.len);
|
|
93
|
-
this.metadata.setFormat('sampleRate', idHeader.sampleRate);
|
|
94
|
-
this.metadata.setFormat('bitrate', idHeader.bitrateNominal);
|
|
95
|
-
this.metadata.setFormat('numberOfChannels', idHeader.channelMode);
|
|
96
|
-
debug("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);
|
|
97
|
-
}
|
|
98
|
-
else
|
|
99
|
-
throw new Error('First Ogg page should be type 1: the identification header');
|
|
100
|
-
}
|
|
101
|
-
parseFullPage(pageData) {
|
|
102
|
-
// New page
|
|
103
|
-
const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
|
|
104
|
-
debug("Parse full page: type=%s, byteLength=%s", commonHeader.packetType, pageData.byteLength);
|
|
105
|
-
switch (commonHeader.packetType) {
|
|
106
|
-
case 3: // type 3: comment header
|
|
107
|
-
return this.parseUserCommentList(pageData, Vorbis_1.CommonHeader.len);
|
|
108
|
-
case 1: // type 1: the identification header
|
|
109
|
-
case 5: // type 5: setup header type
|
|
110
|
-
break; // ignore
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2
|
|
115
|
-
*/
|
|
116
|
-
parseUserCommentList(pageData, offset) {
|
|
117
|
-
const strLen = Token.UINT32_LE.get(pageData, offset);
|
|
118
|
-
offset += 4;
|
|
119
|
-
// const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);
|
|
120
|
-
offset += strLen;
|
|
121
|
-
let userCommentListLength = Token.UINT32_LE.get(pageData, offset);
|
|
122
|
-
offset += 4;
|
|
123
|
-
while (userCommentListLength-- > 0) {
|
|
124
|
-
offset += this.parseUserComment(pageData, offset);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
exports.VorbisParser = VorbisParser;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VorbisParser = void 0;
|
|
4
|
+
const Token = require("token-types");
|
|
5
|
+
const _debug = require("debug");
|
|
6
|
+
const VorbisDecoder_1 = require("./VorbisDecoder");
|
|
7
|
+
const Vorbis_1 = require("./Vorbis");
|
|
8
|
+
const debug = _debug('music-metadata:parser:ogg:vorbis1');
|
|
9
|
+
/**
|
|
10
|
+
* Vorbis 1 Parser.
|
|
11
|
+
* Used by OggParser
|
|
12
|
+
*/
|
|
13
|
+
class VorbisParser {
|
|
14
|
+
constructor(metadata, options) {
|
|
15
|
+
this.metadata = metadata;
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.pageSegments = [];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Vorbis 1 parser
|
|
21
|
+
* @param header Ogg Page Header
|
|
22
|
+
* @param pageData Page data
|
|
23
|
+
*/
|
|
24
|
+
parsePage(header, pageData) {
|
|
25
|
+
if (header.headerType.firstPage) {
|
|
26
|
+
this.parseFirstPage(header, pageData);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
if (header.headerType.continued) {
|
|
30
|
+
if (this.pageSegments.length === 0) {
|
|
31
|
+
throw new Error("Cannot continue on previous page");
|
|
32
|
+
}
|
|
33
|
+
this.pageSegments.push(pageData);
|
|
34
|
+
}
|
|
35
|
+
if (header.headerType.lastPage || !header.headerType.continued) {
|
|
36
|
+
// Flush page segments
|
|
37
|
+
if (this.pageSegments.length > 0) {
|
|
38
|
+
const fullPage = Buffer.concat(this.pageSegments);
|
|
39
|
+
this.parseFullPage(fullPage);
|
|
40
|
+
}
|
|
41
|
+
// Reset page segments
|
|
42
|
+
this.pageSegments = header.headerType.lastPage ? [] : [pageData];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (header.headerType.lastPage) {
|
|
46
|
+
this.calculateDuration(header);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
flush() {
|
|
50
|
+
this.parseFullPage(Buffer.concat(this.pageSegments));
|
|
51
|
+
}
|
|
52
|
+
parseUserComment(pageData, offset) {
|
|
53
|
+
const decoder = new VorbisDecoder_1.VorbisDecoder(pageData, offset);
|
|
54
|
+
const tag = decoder.parseUserComment();
|
|
55
|
+
this.addTag(tag.key, tag.value);
|
|
56
|
+
return tag.len;
|
|
57
|
+
}
|
|
58
|
+
addTag(id, value) {
|
|
59
|
+
if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {
|
|
60
|
+
if (this.options.skipCovers) {
|
|
61
|
+
debug(`Ignore picture`);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
value = Vorbis_1.VorbisPictureToken.fromBase64(value);
|
|
65
|
+
debug(`Push picture: id=${id}, format=${value.format}`);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
debug(`Push tag: id=${id}, value=${value}`);
|
|
69
|
+
}
|
|
70
|
+
this.metadata.addTag('vorbis', id, value);
|
|
71
|
+
}
|
|
72
|
+
calculateDuration(header) {
|
|
73
|
+
if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {
|
|
74
|
+
// Calculate duration
|
|
75
|
+
this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);
|
|
76
|
+
this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Parse first Ogg/Vorbis page
|
|
81
|
+
* @param {IPageHeader} header
|
|
82
|
+
* @param {Buffer} pageData
|
|
83
|
+
*/
|
|
84
|
+
parseFirstPage(header, pageData) {
|
|
85
|
+
this.metadata.setFormat('codec', 'Vorbis I');
|
|
86
|
+
debug("Parse first page");
|
|
87
|
+
// Parse Vorbis common header
|
|
88
|
+
const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
|
|
89
|
+
if (commonHeader.vorbis !== 'vorbis')
|
|
90
|
+
throw new Error('Metadata does not look like Vorbis');
|
|
91
|
+
if (commonHeader.packetType === 1) {
|
|
92
|
+
const idHeader = Vorbis_1.IdentificationHeader.get(pageData, Vorbis_1.CommonHeader.len);
|
|
93
|
+
this.metadata.setFormat('sampleRate', idHeader.sampleRate);
|
|
94
|
+
this.metadata.setFormat('bitrate', idHeader.bitrateNominal);
|
|
95
|
+
this.metadata.setFormat('numberOfChannels', idHeader.channelMode);
|
|
96
|
+
debug("sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);
|
|
97
|
+
}
|
|
98
|
+
else
|
|
99
|
+
throw new Error('First Ogg page should be type 1: the identification header');
|
|
100
|
+
}
|
|
101
|
+
parseFullPage(pageData) {
|
|
102
|
+
// New page
|
|
103
|
+
const commonHeader = Vorbis_1.CommonHeader.get(pageData, 0);
|
|
104
|
+
debug("Parse full page: type=%s, byteLength=%s", commonHeader.packetType, pageData.byteLength);
|
|
105
|
+
switch (commonHeader.packetType) {
|
|
106
|
+
case 3: // type 3: comment header
|
|
107
|
+
return this.parseUserCommentList(pageData, Vorbis_1.CommonHeader.len);
|
|
108
|
+
case 1: // type 1: the identification header
|
|
109
|
+
case 5: // type 5: setup header type
|
|
110
|
+
break; // ignore
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2
|
|
115
|
+
*/
|
|
116
|
+
parseUserCommentList(pageData, offset) {
|
|
117
|
+
const strLen = Token.UINT32_LE.get(pageData, offset);
|
|
118
|
+
offset += 4;
|
|
119
|
+
// const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);
|
|
120
|
+
offset += strLen;
|
|
121
|
+
let userCommentListLength = Token.UINT32_LE.get(pageData, offset);
|
|
122
|
+
offset += 4;
|
|
123
|
+
while (userCommentListLength-- > 0) {
|
|
124
|
+
offset += this.parseUserComment(pageData, offset);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.VorbisParser = VorbisParser;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { CommonTagMapper } from '../../common/GenericTagMapper';
|
|
2
|
-
import { IRating, ITag } from '../../type';
|
|
3
|
-
export declare class VorbisTagMapper extends CommonTagMapper {
|
|
4
|
-
static toRating(email: string, 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 VorbisTagMapper extends CommonTagMapper {
|
|
4
|
+
static toRating(email: string, rating: string): IRating;
|
|
5
|
+
constructor();
|
|
6
|
+
protected postMap(tag: ITag): void;
|
|
7
|
+
}
|
|
@@ -1,132 +1,133 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VorbisTagMapper = void 0;
|
|
4
|
-
const GenericTagMapper_1 = require("../../common/GenericTagMapper");
|
|
5
|
-
/**
|
|
6
|
-
* Vorbis tag mappings
|
|
7
|
-
*
|
|
8
|
-
* Mapping from native header format to one or possibly more 'common' entries
|
|
9
|
-
* The common entries aim to read the same information from different media files
|
|
10
|
-
* independent of the underlying format
|
|
11
|
-
*/
|
|
12
|
-
const vorbisTagMap = {
|
|
13
|
-
TITLE: 'title',
|
|
14
|
-
ARTIST: 'artist',
|
|
15
|
-
ARTISTS: 'artists',
|
|
16
|
-
ALBUMARTIST: 'albumartist',
|
|
17
|
-
'ALBUM ARTIST': 'albumartist',
|
|
18
|
-
ALBUM: 'album',
|
|
19
|
-
DATE: 'date',
|
|
20
|
-
ORIGINALDATE: 'originaldate',
|
|
21
|
-
ORIGINALYEAR: 'originalyear',
|
|
22
|
-
COMMENT: 'comment',
|
|
23
|
-
TRACKNUMBER: 'track',
|
|
24
|
-
DISCNUMBER: 'disk',
|
|
25
|
-
GENRE: 'genre',
|
|
26
|
-
METADATA_BLOCK_PICTURE: 'picture',
|
|
27
|
-
COMPOSER: 'composer',
|
|
28
|
-
LYRICS: 'lyrics',
|
|
29
|
-
ALBUMSORT: 'albumsort',
|
|
30
|
-
TITLESORT: 'titlesort',
|
|
31
|
-
WORK: 'work',
|
|
32
|
-
ARTISTSORT: 'artistsort',
|
|
33
|
-
ALBUMARTISTSORT: 'albumartistsort',
|
|
34
|
-
COMPOSERSORT: 'composersort',
|
|
35
|
-
LYRICIST: 'lyricist',
|
|
36
|
-
WRITER: 'writer',
|
|
37
|
-
CONDUCTOR: 'conductor',
|
|
38
|
-
// 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo
|
|
39
|
-
REMIXER: 'remixer',
|
|
40
|
-
ARRANGER: 'arranger',
|
|
41
|
-
ENGINEER: 'engineer',
|
|
42
|
-
PRODUCER: 'producer',
|
|
43
|
-
DJMIXER: 'djmixer',
|
|
44
|
-
MIXER: 'mixer',
|
|
45
|
-
LABEL: 'label',
|
|
46
|
-
GROUPING: 'grouping',
|
|
47
|
-
SUBTITLE: 'subtitle',
|
|
48
|
-
DISCSUBTITLE: 'discsubtitle',
|
|
49
|
-
TRACKTOTAL: 'totaltracks',
|
|
50
|
-
DISCTOTAL: 'totaldiscs',
|
|
51
|
-
COMPILATION: 'compilation',
|
|
52
|
-
RATING: 'rating',
|
|
53
|
-
BPM: 'bpm',
|
|
54
|
-
KEY: 'key',
|
|
55
|
-
MOOD: 'mood',
|
|
56
|
-
MEDIA: 'media',
|
|
57
|
-
CATALOGNUMBER: 'catalognumber',
|
|
58
|
-
RELEASESTATUS: 'releasestatus',
|
|
59
|
-
RELEASETYPE: 'releasetype',
|
|
60
|
-
RELEASECOUNTRY: 'releasecountry',
|
|
61
|
-
SCRIPT: 'script',
|
|
62
|
-
LANGUAGE: 'language',
|
|
63
|
-
COPYRIGHT: 'copyright',
|
|
64
|
-
LICENSE: 'license',
|
|
65
|
-
ENCODEDBY: 'encodedby',
|
|
66
|
-
ENCODERSETTINGS: 'encodersettings',
|
|
67
|
-
BARCODE: 'barcode',
|
|
68
|
-
ISRC: 'isrc',
|
|
69
|
-
ASIN: 'asin',
|
|
70
|
-
MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',
|
|
71
|
-
MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',
|
|
72
|
-
MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',
|
|
73
|
-
MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',
|
|
74
|
-
MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',
|
|
75
|
-
MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',
|
|
76
|
-
MUSICBRAINZ_WORKID: 'musicbrainz_workid',
|
|
77
|
-
MUSICBRAINZ_TRMID: 'musicbrainz_trmid',
|
|
78
|
-
MUSICBRAINZ_DISCID: 'musicbrainz_discid',
|
|
79
|
-
ACOUSTID_ID: 'acoustid_id',
|
|
80
|
-
ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',
|
|
81
|
-
MUSICIP_PUID: 'musicip_puid',
|
|
82
|
-
// 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo
|
|
83
|
-
WEBSITE: 'website',
|
|
84
|
-
NOTES: 'notes',
|
|
85
|
-
TOTALTRACKS: 'totaltracks',
|
|
86
|
-
TOTALDISCS: 'totaldiscs',
|
|
87
|
-
// Discogs
|
|
88
|
-
DISCOGS_ARTIST_ID: 'discogs_artist_id',
|
|
89
|
-
DISCOGS_ARTISTS: 'artists',
|
|
90
|
-
DISCOGS_ARTIST_NAME: 'artists',
|
|
91
|
-
DISCOGS_ALBUM_ARTISTS: 'albumartist',
|
|
92
|
-
DISCOGS_CATALOG: 'catalognumber',
|
|
93
|
-
DISCOGS_COUNTRY: 'releasecountry',
|
|
94
|
-
DISCOGS_DATE: 'originaldate',
|
|
95
|
-
DISCOGS_LABEL: 'label',
|
|
96
|
-
DISCOGS_LABEL_ID: 'discogs_label_id',
|
|
97
|
-
DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',
|
|
98
|
-
DISCOGS_RATING: 'discogs_rating',
|
|
99
|
-
DISCOGS_RELEASED: 'date',
|
|
100
|
-
DISCOGS_RELEASE_ID: 'discogs_release_id',
|
|
101
|
-
DISCOGS_VOTES: 'discogs_votes',
|
|
102
|
-
CATALOGID: 'catalognumber',
|
|
103
|
-
STYLE: 'genre',
|
|
104
|
-
//
|
|
105
|
-
REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',
|
|
106
|
-
REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',
|
|
107
|
-
REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',
|
|
108
|
-
REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',
|
|
109
|
-
// To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:
|
|
110
|
-
REPLAYGAIN_MINMAX: 'replaygain_track_minmax',
|
|
111
|
-
REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',
|
|
112
|
-
REPLAYGAIN_UNDO: 'replaygain_undo'
|
|
113
|
-
};
|
|
114
|
-
class VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {
|
|
115
|
-
static toRating(email, rating) {
|
|
116
|
-
return {
|
|
117
|
-
source: email ? email.toLowerCase() : email,
|
|
118
|
-
rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
constructor() {
|
|
122
|
-
super(['vorbis'], vorbisTagMap);
|
|
123
|
-
}
|
|
124
|
-
postMap(tag) {
|
|
125
|
-
if (tag.id.indexOf('RATING:') === 0) {
|
|
126
|
-
const keys = tag.id.split(':');
|
|
127
|
-
tag.value = VorbisTagMapper.toRating(keys[1], tag.value);
|
|
128
|
-
tag.id = keys[0];
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exports.VorbisTagMapper = VorbisTagMapper;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VorbisTagMapper = void 0;
|
|
4
|
+
const GenericTagMapper_1 = require("../../common/GenericTagMapper");
|
|
5
|
+
/**
|
|
6
|
+
* Vorbis tag mappings
|
|
7
|
+
*
|
|
8
|
+
* Mapping from native header format to one or possibly more 'common' entries
|
|
9
|
+
* The common entries aim to read the same information from different media files
|
|
10
|
+
* independent of the underlying format
|
|
11
|
+
*/
|
|
12
|
+
const vorbisTagMap = {
|
|
13
|
+
TITLE: 'title',
|
|
14
|
+
ARTIST: 'artist',
|
|
15
|
+
ARTISTS: 'artists',
|
|
16
|
+
ALBUMARTIST: 'albumartist',
|
|
17
|
+
'ALBUM ARTIST': 'albumartist',
|
|
18
|
+
ALBUM: 'album',
|
|
19
|
+
DATE: 'date',
|
|
20
|
+
ORIGINALDATE: 'originaldate',
|
|
21
|
+
ORIGINALYEAR: 'originalyear',
|
|
22
|
+
COMMENT: 'comment',
|
|
23
|
+
TRACKNUMBER: 'track',
|
|
24
|
+
DISCNUMBER: 'disk',
|
|
25
|
+
GENRE: 'genre',
|
|
26
|
+
METADATA_BLOCK_PICTURE: 'picture',
|
|
27
|
+
COMPOSER: 'composer',
|
|
28
|
+
LYRICS: 'lyrics',
|
|
29
|
+
ALBUMSORT: 'albumsort',
|
|
30
|
+
TITLESORT: 'titlesort',
|
|
31
|
+
WORK: 'work',
|
|
32
|
+
ARTISTSORT: 'artistsort',
|
|
33
|
+
ALBUMARTISTSORT: 'albumartistsort',
|
|
34
|
+
COMPOSERSORT: 'composersort',
|
|
35
|
+
LYRICIST: 'lyricist',
|
|
36
|
+
WRITER: 'writer',
|
|
37
|
+
CONDUCTOR: 'conductor',
|
|
38
|
+
// 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo
|
|
39
|
+
REMIXER: 'remixer',
|
|
40
|
+
ARRANGER: 'arranger',
|
|
41
|
+
ENGINEER: 'engineer',
|
|
42
|
+
PRODUCER: 'producer',
|
|
43
|
+
DJMIXER: 'djmixer',
|
|
44
|
+
MIXER: 'mixer',
|
|
45
|
+
LABEL: 'label',
|
|
46
|
+
GROUPING: 'grouping',
|
|
47
|
+
SUBTITLE: 'subtitle',
|
|
48
|
+
DISCSUBTITLE: 'discsubtitle',
|
|
49
|
+
TRACKTOTAL: 'totaltracks',
|
|
50
|
+
DISCTOTAL: 'totaldiscs',
|
|
51
|
+
COMPILATION: 'compilation',
|
|
52
|
+
RATING: 'rating',
|
|
53
|
+
BPM: 'bpm',
|
|
54
|
+
KEY: 'key',
|
|
55
|
+
MOOD: 'mood',
|
|
56
|
+
MEDIA: 'media',
|
|
57
|
+
CATALOGNUMBER: 'catalognumber',
|
|
58
|
+
RELEASESTATUS: 'releasestatus',
|
|
59
|
+
RELEASETYPE: 'releasetype',
|
|
60
|
+
RELEASECOUNTRY: 'releasecountry',
|
|
61
|
+
SCRIPT: 'script',
|
|
62
|
+
LANGUAGE: 'language',
|
|
63
|
+
COPYRIGHT: 'copyright',
|
|
64
|
+
LICENSE: 'license',
|
|
65
|
+
ENCODEDBY: 'encodedby',
|
|
66
|
+
ENCODERSETTINGS: 'encodersettings',
|
|
67
|
+
BARCODE: 'barcode',
|
|
68
|
+
ISRC: 'isrc',
|
|
69
|
+
ASIN: 'asin',
|
|
70
|
+
MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',
|
|
71
|
+
MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',
|
|
72
|
+
MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',
|
|
73
|
+
MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',
|
|
74
|
+
MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',
|
|
75
|
+
MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',
|
|
76
|
+
MUSICBRAINZ_WORKID: 'musicbrainz_workid',
|
|
77
|
+
MUSICBRAINZ_TRMID: 'musicbrainz_trmid',
|
|
78
|
+
MUSICBRAINZ_DISCID: 'musicbrainz_discid',
|
|
79
|
+
ACOUSTID_ID: 'acoustid_id',
|
|
80
|
+
ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',
|
|
81
|
+
MUSICIP_PUID: 'musicip_puid',
|
|
82
|
+
// 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo
|
|
83
|
+
WEBSITE: 'website',
|
|
84
|
+
NOTES: 'notes',
|
|
85
|
+
TOTALTRACKS: 'totaltracks',
|
|
86
|
+
TOTALDISCS: 'totaldiscs',
|
|
87
|
+
// Discogs
|
|
88
|
+
DISCOGS_ARTIST_ID: 'discogs_artist_id',
|
|
89
|
+
DISCOGS_ARTISTS: 'artists',
|
|
90
|
+
DISCOGS_ARTIST_NAME: 'artists',
|
|
91
|
+
DISCOGS_ALBUM_ARTISTS: 'albumartist',
|
|
92
|
+
DISCOGS_CATALOG: 'catalognumber',
|
|
93
|
+
DISCOGS_COUNTRY: 'releasecountry',
|
|
94
|
+
DISCOGS_DATE: 'originaldate',
|
|
95
|
+
DISCOGS_LABEL: 'label',
|
|
96
|
+
DISCOGS_LABEL_ID: 'discogs_label_id',
|
|
97
|
+
DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',
|
|
98
|
+
DISCOGS_RATING: 'discogs_rating',
|
|
99
|
+
DISCOGS_RELEASED: 'date',
|
|
100
|
+
DISCOGS_RELEASE_ID: 'discogs_release_id',
|
|
101
|
+
DISCOGS_VOTES: 'discogs_votes',
|
|
102
|
+
CATALOGID: 'catalognumber',
|
|
103
|
+
STYLE: 'genre',
|
|
104
|
+
//
|
|
105
|
+
REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',
|
|
106
|
+
REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',
|
|
107
|
+
REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',
|
|
108
|
+
REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',
|
|
109
|
+
// To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:
|
|
110
|
+
REPLAYGAIN_MINMAX: 'replaygain_track_minmax',
|
|
111
|
+
REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',
|
|
112
|
+
REPLAYGAIN_UNDO: 'replaygain_undo'
|
|
113
|
+
};
|
|
114
|
+
class VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {
|
|
115
|
+
static toRating(email, rating) {
|
|
116
|
+
return {
|
|
117
|
+
source: email ? email.toLowerCase() : email,
|
|
118
|
+
rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
constructor() {
|
|
122
|
+
super(['vorbis'], vorbisTagMap);
|
|
123
|
+
}
|
|
124
|
+
postMap(tag) {
|
|
125
|
+
if (tag.id.indexOf('RATING:') === 0) {
|
|
126
|
+
const keys = tag.id.split(':');
|
|
127
|
+
tag.value = VorbisTagMapper.toRating(keys[1], tag.value);
|
|
128
|
+
tag.id = keys[0];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.VorbisTagMapper = VorbisTagMapper;
|
|
133
|
+
//# sourceMappingURL=VorbisTagMapper.js.map
|
package/lib/riff/RiffChunk.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export { IChunkHeader } from '../iff';
|
|
4
|
-
/**
|
|
5
|
-
* Common RIFF chunk header
|
|
6
|
-
*/
|
|
7
|
-
export declare const Header: IGetToken<IChunkHeader>;
|
|
8
|
-
/**
|
|
9
|
-
* Token to parse RIFF-INFO tag value
|
|
10
|
-
*/
|
|
11
|
-
export declare class ListInfoTagValue implements IGetToken<string> {
|
|
12
|
-
private tagHeader;
|
|
13
|
-
len: number;
|
|
14
|
-
constructor(tagHeader: IChunkHeader);
|
|
15
|
-
get(buf: any, off: any): string;
|
|
16
|
-
}
|
|
1
|
+
import { IGetToken } from 'strtok3/lib/core';
|
|
2
|
+
import { IChunkHeader } from '../iff';
|
|
3
|
+
export { IChunkHeader } from '../iff';
|
|
4
|
+
/**
|
|
5
|
+
* Common RIFF chunk header
|
|
6
|
+
*/
|
|
7
|
+
export declare const Header: IGetToken<IChunkHeader>;
|
|
8
|
+
/**
|
|
9
|
+
* Token to parse RIFF-INFO tag value
|
|
10
|
+
*/
|
|
11
|
+
export declare class ListInfoTagValue implements IGetToken<string> {
|
|
12
|
+
private tagHeader;
|
|
13
|
+
len: number;
|
|
14
|
+
constructor(tagHeader: IChunkHeader);
|
|
15
|
+
get(buf: any, off: any): string;
|
|
16
|
+
}
|
package/lib/riff/RiffChunk.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ListInfoTagValue = exports.Header = void 0;
|
|
4
|
-
const Token = require("token-types");
|
|
5
|
-
/**
|
|
6
|
-
* Common RIFF chunk header
|
|
7
|
-
*/
|
|
8
|
-
exports.Header = {
|
|
9
|
-
len: 8,
|
|
10
|
-
get: (buf, off) => {
|
|
11
|
-
return {
|
|
12
|
-
// Group-ID
|
|
13
|
-
chunkID: buf.toString('binary', off, off + 4),
|
|
14
|
-
// Size
|
|
15
|
-
chunkSize: Token.UINT32_LE.get(buf, 4)
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Token to parse RIFF-INFO tag value
|
|
21
|
-
*/
|
|
22
|
-
class ListInfoTagValue {
|
|
23
|
-
constructor(tagHeader) {
|
|
24
|
-
this.tagHeader = tagHeader;
|
|
25
|
-
this.len = tagHeader.chunkSize;
|
|
26
|
-
this.len += this.len & 1; // if it is an odd length, round up to even
|
|
27
|
-
}
|
|
28
|
-
get(buf, off) {
|
|
29
|
-
return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
exports.ListInfoTagValue = ListInfoTagValue;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ListInfoTagValue = exports.Header = void 0;
|
|
4
|
+
const Token = require("token-types");
|
|
5
|
+
/**
|
|
6
|
+
* Common RIFF chunk header
|
|
7
|
+
*/
|
|
8
|
+
exports.Header = {
|
|
9
|
+
len: 8,
|
|
10
|
+
get: (buf, off) => {
|
|
11
|
+
return {
|
|
12
|
+
// Group-ID
|
|
13
|
+
chunkID: buf.toString('binary', off, off + 4),
|
|
14
|
+
// Size
|
|
15
|
+
chunkSize: Token.UINT32_LE.get(buf, 4)
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Token to parse RIFF-INFO tag value
|
|
21
|
+
*/
|
|
22
|
+
class ListInfoTagValue {
|
|
23
|
+
constructor(tagHeader) {
|
|
24
|
+
this.tagHeader = tagHeader;
|
|
25
|
+
this.len = tagHeader.chunkSize;
|
|
26
|
+
this.len += this.len & 1; // if it is an odd length, round up to even
|
|
27
|
+
}
|
|
28
|
+
get(buf, off) {
|
|
29
|
+
return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ListInfoTagValue = ListInfoTagValue;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { INativeTagMap } from '../common/GenericTagTypes';
|
|
2
|
-
import { CommonTagMapper } from '../common/GenericTagMapper';
|
|
3
|
-
/**
|
|
4
|
-
* RIFF Info Tags; part of the EXIF 2.3
|
|
5
|
-
* Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
|
|
6
|
-
*/
|
|
7
|
-
export declare const riffInfoTagMap: INativeTagMap;
|
|
8
|
-
export declare class RiffInfoTagMapper extends CommonTagMapper {
|
|
9
|
-
constructor();
|
|
10
|
-
}
|
|
1
|
+
import { INativeTagMap } from '../common/GenericTagTypes';
|
|
2
|
+
import { CommonTagMapper } from '../common/GenericTagMapper';
|
|
3
|
+
/**
|
|
4
|
+
* RIFF Info Tags; part of the EXIF 2.3
|
|
5
|
+
* Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info
|
|
6
|
+
*/
|
|
7
|
+
export declare const riffInfoTagMap: INativeTagMap;
|
|
8
|
+
export declare class RiffInfoTagMapper extends CommonTagMapper {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|