music-metadata 7.11.7 → 7.11.8
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 +433 -432
- package/lib/ParserFactory.d.ts +48 -49
- package/lib/ParserFactory.js +251 -251
- package/lib/aiff/AiffParser.d.ts +14 -15
- package/lib/aiff/AiffParser.js +84 -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 +161 -162
- package/lib/apev2/APEv2TagMapper.d.ts +4 -4
- package/lib/apev2/APEv2TagMapper.js +86 -86
- package/lib/apev2/APEv2Token.d.ts +100 -100
- package/lib/apev2/APEv2Token.js +126 -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 +95 -95
- package/lib/asf/AsfUtil.d.ts +13 -13
- package/lib/asf/AsfUtil.js +40 -40
- package/lib/asf/GUID.d.ts +84 -86
- package/lib/asf/GUID.js +121 -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 +21 -21
- package/lib/common/CombinedTagMapper.d.ts +19 -19
- package/lib/common/CombinedTagMapper.js +51 -51
- package/lib/common/FourCC.d.ts +6 -6
- package/lib/common/FourCC.js +28 -28
- package/lib/common/GenericTagMapper.d.ts +51 -51
- package/lib/common/GenericTagMapper.js +55 -55
- package/lib/common/GenericTagTypes.d.ts +33 -33
- package/lib/common/GenericTagTypes.js +131 -131
- package/lib/common/MetadataCollector.d.ts +76 -76
- package/lib/common/MetadataCollector.js +275 -275
- 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 -58
- package/lib/common/Util.js +157 -162
- 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 +22 -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 -329
- package/lib/id3v2/ID3v22TagMapper.d.ts +9 -9
- package/lib/id3v2/ID3v22TagMapper.js +55 -55
- package/lib/id3v2/ID3v24TagMapper.d.ts +14 -14
- package/lib/id3v2/ID3v24TagMapper.js +193 -193
- package/lib/id3v2/ID3v2Parser.d.ts +29 -29
- package/lib/id3v2/ID3v2Parser.js +184 -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 -45
- package/lib/index.js +74 -74
- 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 -235
- package/lib/matroska/MatroskaTagMapper.d.ts +4 -4
- package/lib/matroska/MatroskaTagMapper.js +35 -35
- package/lib/matroska/types.d.ts +175 -175
- package/lib/matroska/types.js +33 -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 +115 -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 +524 -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 +69 -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 +132 -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 +37 -37
- package/lib/type.d.ts +592 -599
- package/lib/type.js +5 -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 +99 -105
- package/lib/wavpack/WavPackToken.d.ts +64 -64
- package/lib/wavpack/WavPackToken.js +76 -76
- package/package.json +150 -142
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { INativeTagMap } from '../common/GenericTagTypes';
|
|
2
|
-
import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
|
|
3
|
-
/**
|
|
4
|
-
* ID3v2.2 tag mappings
|
|
5
|
-
*/
|
|
6
|
-
export declare const id3v22TagMap: INativeTagMap;
|
|
7
|
-
export declare class ID3v22TagMapper extends CaseInsensitiveTagMap {
|
|
8
|
-
constructor();
|
|
9
|
-
}
|
|
1
|
+
import { INativeTagMap } from '../common/GenericTagTypes';
|
|
2
|
+
import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
|
|
3
|
+
/**
|
|
4
|
+
* ID3v2.2 tag mappings
|
|
5
|
+
*/
|
|
6
|
+
export declare const id3v22TagMap: INativeTagMap;
|
|
7
|
+
export declare class ID3v22TagMapper extends CaseInsensitiveTagMap {
|
|
8
|
+
constructor();
|
|
9
|
+
}
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ID3v22TagMapper = exports.id3v22TagMap = void 0;
|
|
4
|
-
const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
|
|
5
|
-
/**
|
|
6
|
-
* ID3v2.2 tag mappings
|
|
7
|
-
*/
|
|
8
|
-
exports.id3v22TagMap = {
|
|
9
|
-
TT2: 'title',
|
|
10
|
-
TP1: 'artist',
|
|
11
|
-
TP2: 'albumartist',
|
|
12
|
-
TAL: 'album',
|
|
13
|
-
TYE: 'year',
|
|
14
|
-
COM: 'comment',
|
|
15
|
-
TRK: 'track',
|
|
16
|
-
TPA: 'disk',
|
|
17
|
-
TCO: 'genre',
|
|
18
|
-
PIC: 'picture',
|
|
19
|
-
TCM: 'composer',
|
|
20
|
-
TOR: 'originaldate',
|
|
21
|
-
TOT: 'originalalbum',
|
|
22
|
-
TXT: 'lyricist',
|
|
23
|
-
TP3: 'conductor',
|
|
24
|
-
TPB: 'label',
|
|
25
|
-
TT1: 'grouping',
|
|
26
|
-
TT3: 'subtitle',
|
|
27
|
-
TLA: 'language',
|
|
28
|
-
TCR: 'copyright',
|
|
29
|
-
WCP: 'license',
|
|
30
|
-
TEN: 'encodedby',
|
|
31
|
-
TSS: 'encodersettings',
|
|
32
|
-
WAR: 'website',
|
|
33
|
-
'COM:iTunPGAP': 'gapless'
|
|
34
|
-
/* ToDo: iTunes tags:
|
|
35
|
-
'COM:iTunNORM': ,
|
|
36
|
-
'COM:iTunSMPB': 'encoder delay',
|
|
37
|
-
'COM:iTunes_CDDB_IDs'
|
|
38
|
-
*/ ,
|
|
39
|
-
PCS: 'podcast',
|
|
40
|
-
TCP: "compilation",
|
|
41
|
-
TDR: 'date',
|
|
42
|
-
TS2: 'albumartistsort',
|
|
43
|
-
TSA: 'albumsort',
|
|
44
|
-
TSC: 'composersort',
|
|
45
|
-
TSP: 'artistsort',
|
|
46
|
-
TST: 'titlesort',
|
|
47
|
-
WFD: 'podcasturl',
|
|
48
|
-
TBP: 'bpm'
|
|
49
|
-
};
|
|
50
|
-
class ID3v22TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
|
|
51
|
-
constructor() {
|
|
52
|
-
super(['ID3v2.2'], exports.id3v22TagMap);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.ID3v22TagMapper = ID3v22TagMapper;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ID3v22TagMapper = exports.id3v22TagMap = void 0;
|
|
4
|
+
const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
|
|
5
|
+
/**
|
|
6
|
+
* ID3v2.2 tag mappings
|
|
7
|
+
*/
|
|
8
|
+
exports.id3v22TagMap = {
|
|
9
|
+
TT2: 'title',
|
|
10
|
+
TP1: 'artist',
|
|
11
|
+
TP2: 'albumartist',
|
|
12
|
+
TAL: 'album',
|
|
13
|
+
TYE: 'year',
|
|
14
|
+
COM: 'comment',
|
|
15
|
+
TRK: 'track',
|
|
16
|
+
TPA: 'disk',
|
|
17
|
+
TCO: 'genre',
|
|
18
|
+
PIC: 'picture',
|
|
19
|
+
TCM: 'composer',
|
|
20
|
+
TOR: 'originaldate',
|
|
21
|
+
TOT: 'originalalbum',
|
|
22
|
+
TXT: 'lyricist',
|
|
23
|
+
TP3: 'conductor',
|
|
24
|
+
TPB: 'label',
|
|
25
|
+
TT1: 'grouping',
|
|
26
|
+
TT3: 'subtitle',
|
|
27
|
+
TLA: 'language',
|
|
28
|
+
TCR: 'copyright',
|
|
29
|
+
WCP: 'license',
|
|
30
|
+
TEN: 'encodedby',
|
|
31
|
+
TSS: 'encodersettings',
|
|
32
|
+
WAR: 'website',
|
|
33
|
+
'COM:iTunPGAP': 'gapless'
|
|
34
|
+
/* ToDo: iTunes tags:
|
|
35
|
+
'COM:iTunNORM': ,
|
|
36
|
+
'COM:iTunSMPB': 'encoder delay',
|
|
37
|
+
'COM:iTunes_CDDB_IDs'
|
|
38
|
+
*/ ,
|
|
39
|
+
PCS: 'podcast',
|
|
40
|
+
TCP: "compilation",
|
|
41
|
+
TDR: 'date',
|
|
42
|
+
TS2: 'albumartistsort',
|
|
43
|
+
TSA: 'albumsort',
|
|
44
|
+
TSC: 'composersort',
|
|
45
|
+
TSP: 'artistsort',
|
|
46
|
+
TST: 'titlesort',
|
|
47
|
+
WFD: 'podcasturl',
|
|
48
|
+
TBP: 'bpm'
|
|
49
|
+
};
|
|
50
|
+
class ID3v22TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
|
|
51
|
+
constructor() {
|
|
52
|
+
super(['ID3v2.2'], exports.id3v22TagMap);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.ID3v22TagMapper = ID3v22TagMapper;
|
|
56
56
|
//# sourceMappingURL=ID3v22TagMapper.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { INativeMetadataCollector } from '../common/MetadataCollector';
|
|
2
|
-
import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
|
|
3
|
-
import { IRating, ITag } from '../type';
|
|
4
|
-
export declare class ID3v24TagMapper extends CaseInsensitiveTagMap {
|
|
5
|
-
static toRating(popm: any): IRating;
|
|
6
|
-
constructor();
|
|
7
|
-
/**
|
|
8
|
-
* Handle post mapping exceptions / correction
|
|
9
|
-
* @param
|
|
10
|
-
* @param warnings
|
|
11
|
-
* @return Common value e.g. "Buena Vista Social Club"
|
|
12
|
-
*/
|
|
13
|
-
protected postMap(tag: ITag, warnings: INativeMetadataCollector): void;
|
|
14
|
-
}
|
|
1
|
+
import { INativeMetadataCollector } from '../common/MetadataCollector';
|
|
2
|
+
import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap';
|
|
3
|
+
import { IRating, ITag } from '../type';
|
|
4
|
+
export declare class ID3v24TagMapper extends CaseInsensitiveTagMap {
|
|
5
|
+
static toRating(popm: any): IRating;
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* Handle post mapping exceptions / correction
|
|
9
|
+
* @param tag to post map
|
|
10
|
+
* @param warnings Wil be used to register (collect) warnings
|
|
11
|
+
* @return Common value e.g. "Buena Vista Social Club"
|
|
12
|
+
*/
|
|
13
|
+
protected postMap(tag: ITag, warnings: INativeMetadataCollector): void;
|
|
14
|
+
}
|
|
@@ -1,194 +1,194 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ID3v24TagMapper = void 0;
|
|
4
|
-
const GenericTagMapper_1 = require("../common/GenericTagMapper");
|
|
5
|
-
const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
|
|
6
|
-
const util = require("../common/Util");
|
|
7
|
-
/**
|
|
8
|
-
* ID3v2.3/ID3v2.4 tag mappings
|
|
9
|
-
*/
|
|
10
|
-
const id3v24TagMap = {
|
|
11
|
-
// id3v2.3
|
|
12
|
-
TIT2: 'title',
|
|
13
|
-
TPE1: 'artist',
|
|
14
|
-
'TXXX:Artists': 'artists',
|
|
15
|
-
TPE2: 'albumartist',
|
|
16
|
-
TALB: 'album',
|
|
17
|
-
TDRV: 'date',
|
|
18
|
-
/**
|
|
19
|
-
* Original release year
|
|
20
|
-
*/
|
|
21
|
-
TORY: 'originalyear',
|
|
22
|
-
TPOS: 'disk',
|
|
23
|
-
TCON: 'genre',
|
|
24
|
-
APIC: 'picture',
|
|
25
|
-
TCOM: 'composer',
|
|
26
|
-
'USLT:description': 'lyrics',
|
|
27
|
-
TSOA: 'albumsort',
|
|
28
|
-
TSOT: 'titlesort',
|
|
29
|
-
TOAL: 'originalalbum',
|
|
30
|
-
TSOP: 'artistsort',
|
|
31
|
-
TSO2: 'albumartistsort',
|
|
32
|
-
TSOC: 'composersort',
|
|
33
|
-
TEXT: 'lyricist',
|
|
34
|
-
'TXXX:Writer': 'writer',
|
|
35
|
-
TPE3: 'conductor',
|
|
36
|
-
// 'IPLS:instrument': 'performer:instrument', // ToDo
|
|
37
|
-
TPE4: 'remixer',
|
|
38
|
-
'IPLS:arranger': 'arranger',
|
|
39
|
-
'IPLS:engineer': 'engineer',
|
|
40
|
-
'IPLS:producer': 'producer',
|
|
41
|
-
'IPLS:DJ-mix': 'djmixer',
|
|
42
|
-
'IPLS:mix': 'mixer',
|
|
43
|
-
TPUB: 'label',
|
|
44
|
-
TIT1: 'grouping',
|
|
45
|
-
TIT3: 'subtitle',
|
|
46
|
-
TRCK: 'track',
|
|
47
|
-
TCMP: 'compilation',
|
|
48
|
-
POPM: 'rating',
|
|
49
|
-
TBPM: 'bpm',
|
|
50
|
-
TMED: 'media',
|
|
51
|
-
'TXXX:CATALOGNUMBER': 'catalognumber',
|
|
52
|
-
'TXXX:MusicBrainz Album Status': 'releasestatus',
|
|
53
|
-
'TXXX:MusicBrainz Album Type': 'releasetype',
|
|
54
|
-
/**
|
|
55
|
-
* Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0
|
|
56
|
-
*/
|
|
57
|
-
'TXXX:MusicBrainz Album Release Country': 'releasecountry',
|
|
58
|
-
/**
|
|
59
|
-
* Release country as implemented // ToDo: report
|
|
60
|
-
*/
|
|
61
|
-
'TXXX:RELEASECOUNTRY': 'releasecountry',
|
|
62
|
-
'TXXX:SCRIPT': 'script',
|
|
63
|
-
TLAN: 'language',
|
|
64
|
-
TCOP: 'copyright',
|
|
65
|
-
WCOP: 'license',
|
|
66
|
-
TENC: 'encodedby',
|
|
67
|
-
TSSE: 'encodersettings',
|
|
68
|
-
'TXXX:BARCODE': 'barcode',
|
|
69
|
-
'TXXX:ISRC': 'isrc',
|
|
70
|
-
TSRC: 'isrc',
|
|
71
|
-
'TXXX:ASIN': 'asin',
|
|
72
|
-
'TXXX:originalyear': 'originalyear',
|
|
73
|
-
'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',
|
|
74
|
-
'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',
|
|
75
|
-
'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',
|
|
76
|
-
'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',
|
|
77
|
-
'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',
|
|
78
|
-
'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',
|
|
79
|
-
'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',
|
|
80
|
-
'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',
|
|
81
|
-
'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',
|
|
82
|
-
'TXXX:ACOUSTID_ID': 'acoustid_id',
|
|
83
|
-
'TXXX:Acoustid Id': 'acoustid_id',
|
|
84
|
-
'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',
|
|
85
|
-
'TXXX:MusicIP PUID': 'musicip_puid',
|
|
86
|
-
'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',
|
|
87
|
-
WOAR: 'website',
|
|
88
|
-
// id3v2.4
|
|
89
|
-
// ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames
|
|
90
|
-
TDRC: 'date',
|
|
91
|
-
TYER: 'year',
|
|
92
|
-
TDOR: 'originaldate',
|
|
93
|
-
// 'TMCL:instrument': 'performer:instrument',
|
|
94
|
-
'TIPL:arranger': 'arranger',
|
|
95
|
-
'TIPL:engineer': 'engineer',
|
|
96
|
-
'TIPL:producer': 'producer',
|
|
97
|
-
'TIPL:DJ-mix': 'djmixer',
|
|
98
|
-
'TIPL:mix': 'mixer',
|
|
99
|
-
TMOO: 'mood',
|
|
100
|
-
// additional mappings:
|
|
101
|
-
SYLT: 'lyrics',
|
|
102
|
-
TSST: 'discsubtitle',
|
|
103
|
-
TKEY: 'key',
|
|
104
|
-
COMM: 'comment',
|
|
105
|
-
TOPE: 'originalartist',
|
|
106
|
-
// Windows Media Player
|
|
107
|
-
'PRIV:AverageLevel': 'averageLevel',
|
|
108
|
-
'PRIV:PeakLevel': 'peakLevel',
|
|
109
|
-
// Discogs
|
|
110
|
-
'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',
|
|
111
|
-
'TXXX:DISCOGS_ARTISTS': 'artists',
|
|
112
|
-
'TXXX:DISCOGS_ARTIST_NAME': 'artists',
|
|
113
|
-
'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',
|
|
114
|
-
'TXXX:DISCOGS_CATALOG': 'catalognumber',
|
|
115
|
-
'TXXX:DISCOGS_COUNTRY': 'releasecountry',
|
|
116
|
-
'TXXX:DISCOGS_DATE': 'originaldate',
|
|
117
|
-
'TXXX:DISCOGS_LABEL': 'label',
|
|
118
|
-
'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',
|
|
119
|
-
'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',
|
|
120
|
-
'TXXX:DISCOGS_RATING': 'discogs_rating',
|
|
121
|
-
'TXXX:DISCOGS_RELEASED': 'date',
|
|
122
|
-
'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',
|
|
123
|
-
'TXXX:DISCOGS_VOTES': 'discogs_votes',
|
|
124
|
-
'TXXX:CATALOGID': 'catalognumber',
|
|
125
|
-
'TXXX:STYLE': 'genre',
|
|
126
|
-
'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',
|
|
127
|
-
'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',
|
|
128
|
-
'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',
|
|
129
|
-
'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',
|
|
130
|
-
'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',
|
|
131
|
-
'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',
|
|
132
|
-
'TXXX:MP3GAIN_UNDO': 'replaygain_undo',
|
|
133
|
-
MVNM: 'movement',
|
|
134
|
-
MVIN: 'movementIndex',
|
|
135
|
-
PCST: 'podcast',
|
|
136
|
-
TCAT: 'category',
|
|
137
|
-
TDES: 'description',
|
|
138
|
-
TDRL: 'date',
|
|
139
|
-
TGID: 'podcastId',
|
|
140
|
-
TKWD: 'keywords',
|
|
141
|
-
WFED: 'podcasturl'
|
|
142
|
-
};
|
|
143
|
-
class ID3v24TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
|
|
144
|
-
static toRating(popm) {
|
|
145
|
-
return {
|
|
146
|
-
source: popm.email,
|
|
147
|
-
rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
constructor() {
|
|
151
|
-
super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Handle post mapping exceptions / correction
|
|
155
|
-
* @param
|
|
156
|
-
* @param warnings
|
|
157
|
-
* @return Common value e.g. "Buena Vista Social Club"
|
|
158
|
-
*/
|
|
159
|
-
postMap(tag, warnings) {
|
|
160
|
-
switch (tag.id) {
|
|
161
|
-
case 'UFID': // decode MusicBrainz Recording Id
|
|
162
|
-
if (tag.value.owner_identifier === 'http://musicbrainz.org') {
|
|
163
|
-
tag.id += ':' + tag.value.owner_identifier;
|
|
164
|
-
tag.value = util.decodeString(tag.value.identifier, 'latin1'); // latin1 == iso-8859-1
|
|
165
|
-
}
|
|
166
|
-
break;
|
|
167
|
-
case 'PRIV':
|
|
168
|
-
switch (tag.value.owner_identifier) {
|
|
169
|
-
// decode Windows Media Player
|
|
170
|
-
case 'AverageLevel':
|
|
171
|
-
case 'PeakValue':
|
|
172
|
-
tag.id += ':' + tag.value.owner_identifier;
|
|
173
|
-
tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE(0) : null;
|
|
174
|
-
if (tag.value === null) {
|
|
175
|
-
warnings.addWarning(`Failed to parse PRIV:PeakValue`);
|
|
176
|
-
}
|
|
177
|
-
break;
|
|
178
|
-
default:
|
|
179
|
-
warnings.addWarning(`Unknown PRIV owner-identifier: ${tag.value.owner_identifier}`);
|
|
180
|
-
}
|
|
181
|
-
break;
|
|
182
|
-
case 'COMM':
|
|
183
|
-
tag.value = tag.value ? tag.value.text : null;
|
|
184
|
-
break;
|
|
185
|
-
case 'POPM':
|
|
186
|
-
tag.value = ID3v24TagMapper.toRating(tag.value);
|
|
187
|
-
break;
|
|
188
|
-
default:
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
exports.ID3v24TagMapper = ID3v24TagMapper;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ID3v24TagMapper = void 0;
|
|
4
|
+
const GenericTagMapper_1 = require("../common/GenericTagMapper");
|
|
5
|
+
const CaseInsensitiveTagMap_1 = require("../common/CaseInsensitiveTagMap");
|
|
6
|
+
const util = require("../common/Util");
|
|
7
|
+
/**
|
|
8
|
+
* ID3v2.3/ID3v2.4 tag mappings
|
|
9
|
+
*/
|
|
10
|
+
const id3v24TagMap = {
|
|
11
|
+
// id3v2.3
|
|
12
|
+
TIT2: 'title',
|
|
13
|
+
TPE1: 'artist',
|
|
14
|
+
'TXXX:Artists': 'artists',
|
|
15
|
+
TPE2: 'albumartist',
|
|
16
|
+
TALB: 'album',
|
|
17
|
+
TDRV: 'date',
|
|
18
|
+
/**
|
|
19
|
+
* Original release year
|
|
20
|
+
*/
|
|
21
|
+
TORY: 'originalyear',
|
|
22
|
+
TPOS: 'disk',
|
|
23
|
+
TCON: 'genre',
|
|
24
|
+
APIC: 'picture',
|
|
25
|
+
TCOM: 'composer',
|
|
26
|
+
'USLT:description': 'lyrics',
|
|
27
|
+
TSOA: 'albumsort',
|
|
28
|
+
TSOT: 'titlesort',
|
|
29
|
+
TOAL: 'originalalbum',
|
|
30
|
+
TSOP: 'artistsort',
|
|
31
|
+
TSO2: 'albumartistsort',
|
|
32
|
+
TSOC: 'composersort',
|
|
33
|
+
TEXT: 'lyricist',
|
|
34
|
+
'TXXX:Writer': 'writer',
|
|
35
|
+
TPE3: 'conductor',
|
|
36
|
+
// 'IPLS:instrument': 'performer:instrument', // ToDo
|
|
37
|
+
TPE4: 'remixer',
|
|
38
|
+
'IPLS:arranger': 'arranger',
|
|
39
|
+
'IPLS:engineer': 'engineer',
|
|
40
|
+
'IPLS:producer': 'producer',
|
|
41
|
+
'IPLS:DJ-mix': 'djmixer',
|
|
42
|
+
'IPLS:mix': 'mixer',
|
|
43
|
+
TPUB: 'label',
|
|
44
|
+
TIT1: 'grouping',
|
|
45
|
+
TIT3: 'subtitle',
|
|
46
|
+
TRCK: 'track',
|
|
47
|
+
TCMP: 'compilation',
|
|
48
|
+
POPM: 'rating',
|
|
49
|
+
TBPM: 'bpm',
|
|
50
|
+
TMED: 'media',
|
|
51
|
+
'TXXX:CATALOGNUMBER': 'catalognumber',
|
|
52
|
+
'TXXX:MusicBrainz Album Status': 'releasestatus',
|
|
53
|
+
'TXXX:MusicBrainz Album Type': 'releasetype',
|
|
54
|
+
/**
|
|
55
|
+
* Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0
|
|
56
|
+
*/
|
|
57
|
+
'TXXX:MusicBrainz Album Release Country': 'releasecountry',
|
|
58
|
+
/**
|
|
59
|
+
* Release country as implemented // ToDo: report
|
|
60
|
+
*/
|
|
61
|
+
'TXXX:RELEASECOUNTRY': 'releasecountry',
|
|
62
|
+
'TXXX:SCRIPT': 'script',
|
|
63
|
+
TLAN: 'language',
|
|
64
|
+
TCOP: 'copyright',
|
|
65
|
+
WCOP: 'license',
|
|
66
|
+
TENC: 'encodedby',
|
|
67
|
+
TSSE: 'encodersettings',
|
|
68
|
+
'TXXX:BARCODE': 'barcode',
|
|
69
|
+
'TXXX:ISRC': 'isrc',
|
|
70
|
+
TSRC: 'isrc',
|
|
71
|
+
'TXXX:ASIN': 'asin',
|
|
72
|
+
'TXXX:originalyear': 'originalyear',
|
|
73
|
+
'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',
|
|
74
|
+
'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',
|
|
75
|
+
'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',
|
|
76
|
+
'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',
|
|
77
|
+
'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',
|
|
78
|
+
'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',
|
|
79
|
+
'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',
|
|
80
|
+
'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',
|
|
81
|
+
'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',
|
|
82
|
+
'TXXX:ACOUSTID_ID': 'acoustid_id',
|
|
83
|
+
'TXXX:Acoustid Id': 'acoustid_id',
|
|
84
|
+
'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',
|
|
85
|
+
'TXXX:MusicIP PUID': 'musicip_puid',
|
|
86
|
+
'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',
|
|
87
|
+
WOAR: 'website',
|
|
88
|
+
// id3v2.4
|
|
89
|
+
// ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames
|
|
90
|
+
TDRC: 'date',
|
|
91
|
+
TYER: 'year',
|
|
92
|
+
TDOR: 'originaldate',
|
|
93
|
+
// 'TMCL:instrument': 'performer:instrument',
|
|
94
|
+
'TIPL:arranger': 'arranger',
|
|
95
|
+
'TIPL:engineer': 'engineer',
|
|
96
|
+
'TIPL:producer': 'producer',
|
|
97
|
+
'TIPL:DJ-mix': 'djmixer',
|
|
98
|
+
'TIPL:mix': 'mixer',
|
|
99
|
+
TMOO: 'mood',
|
|
100
|
+
// additional mappings:
|
|
101
|
+
SYLT: 'lyrics',
|
|
102
|
+
TSST: 'discsubtitle',
|
|
103
|
+
TKEY: 'key',
|
|
104
|
+
COMM: 'comment',
|
|
105
|
+
TOPE: 'originalartist',
|
|
106
|
+
// Windows Media Player
|
|
107
|
+
'PRIV:AverageLevel': 'averageLevel',
|
|
108
|
+
'PRIV:PeakLevel': 'peakLevel',
|
|
109
|
+
// Discogs
|
|
110
|
+
'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',
|
|
111
|
+
'TXXX:DISCOGS_ARTISTS': 'artists',
|
|
112
|
+
'TXXX:DISCOGS_ARTIST_NAME': 'artists',
|
|
113
|
+
'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',
|
|
114
|
+
'TXXX:DISCOGS_CATALOG': 'catalognumber',
|
|
115
|
+
'TXXX:DISCOGS_COUNTRY': 'releasecountry',
|
|
116
|
+
'TXXX:DISCOGS_DATE': 'originaldate',
|
|
117
|
+
'TXXX:DISCOGS_LABEL': 'label',
|
|
118
|
+
'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',
|
|
119
|
+
'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',
|
|
120
|
+
'TXXX:DISCOGS_RATING': 'discogs_rating',
|
|
121
|
+
'TXXX:DISCOGS_RELEASED': 'date',
|
|
122
|
+
'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',
|
|
123
|
+
'TXXX:DISCOGS_VOTES': 'discogs_votes',
|
|
124
|
+
'TXXX:CATALOGID': 'catalognumber',
|
|
125
|
+
'TXXX:STYLE': 'genre',
|
|
126
|
+
'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',
|
|
127
|
+
'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',
|
|
128
|
+
'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',
|
|
129
|
+
'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',
|
|
130
|
+
'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',
|
|
131
|
+
'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',
|
|
132
|
+
'TXXX:MP3GAIN_UNDO': 'replaygain_undo',
|
|
133
|
+
MVNM: 'movement',
|
|
134
|
+
MVIN: 'movementIndex',
|
|
135
|
+
PCST: 'podcast',
|
|
136
|
+
TCAT: 'category',
|
|
137
|
+
TDES: 'description',
|
|
138
|
+
TDRL: 'date',
|
|
139
|
+
TGID: 'podcastId',
|
|
140
|
+
TKWD: 'keywords',
|
|
141
|
+
WFED: 'podcasturl'
|
|
142
|
+
};
|
|
143
|
+
class ID3v24TagMapper extends CaseInsensitiveTagMap_1.CaseInsensitiveTagMap {
|
|
144
|
+
static toRating(popm) {
|
|
145
|
+
return {
|
|
146
|
+
source: popm.email,
|
|
147
|
+
rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
constructor() {
|
|
151
|
+
super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Handle post mapping exceptions / correction
|
|
155
|
+
* @param tag to post map
|
|
156
|
+
* @param warnings Wil be used to register (collect) warnings
|
|
157
|
+
* @return Common value e.g. "Buena Vista Social Club"
|
|
158
|
+
*/
|
|
159
|
+
postMap(tag, warnings) {
|
|
160
|
+
switch (tag.id) {
|
|
161
|
+
case 'UFID': // decode MusicBrainz Recording Id
|
|
162
|
+
if (tag.value.owner_identifier === 'http://musicbrainz.org') {
|
|
163
|
+
tag.id += ':' + tag.value.owner_identifier;
|
|
164
|
+
tag.value = util.decodeString(tag.value.identifier, 'latin1'); // latin1 == iso-8859-1
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
case 'PRIV':
|
|
168
|
+
switch (tag.value.owner_identifier) {
|
|
169
|
+
// decode Windows Media Player
|
|
170
|
+
case 'AverageLevel':
|
|
171
|
+
case 'PeakValue':
|
|
172
|
+
tag.id += ':' + tag.value.owner_identifier;
|
|
173
|
+
tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE(0) : null;
|
|
174
|
+
if (tag.value === null) {
|
|
175
|
+
warnings.addWarning(`Failed to parse PRIV:PeakValue`);
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
default:
|
|
179
|
+
warnings.addWarning(`Unknown PRIV owner-identifier: ${tag.value.owner_identifier}`);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
case 'COMM':
|
|
183
|
+
tag.value = tag.value ? tag.value.text : null;
|
|
184
|
+
break;
|
|
185
|
+
case 'POPM':
|
|
186
|
+
tag.value = ID3v24TagMapper.toRating(tag.value);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.ID3v24TagMapper = ID3v24TagMapper;
|
|
194
194
|
//# sourceMappingURL=ID3v24TagMapper.js.map
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { ITokenizer } from 'strtok3/lib/core';
|
|
3
|
-
import { IOptions } from '../type';
|
|
4
|
-
import { INativeMetadataCollector } from '../common/MetadataCollector';
|
|
5
|
-
export declare class ID3v2Parser {
|
|
6
|
-
static removeUnsyncBytes(buffer: Buffer): Buffer;
|
|
7
|
-
private static getFrameHeaderLength;
|
|
8
|
-
private static readFrameFlags;
|
|
9
|
-
private static readFrameData;
|
|
10
|
-
/**
|
|
11
|
-
* Create a combined tag key, of tag & description
|
|
12
|
-
* @param
|
|
13
|
-
* @param
|
|
14
|
-
* @returns
|
|
15
|
-
*/
|
|
16
|
-
private static makeDescriptionTagName;
|
|
17
|
-
private tokenizer;
|
|
18
|
-
private id3Header;
|
|
19
|
-
private metadata;
|
|
20
|
-
private headerType;
|
|
21
|
-
private options;
|
|
22
|
-
parse(metadata: INativeMetadataCollector, tokenizer: ITokenizer, options: IOptions): Promise<void>;
|
|
23
|
-
parseExtendedHeader(): Promise<void>;
|
|
24
|
-
parseExtendedHeaderData(dataRemaining: number, extendedHeaderSize: number): Promise<void>;
|
|
25
|
-
parseId3Data(dataLen: number): Promise<void>;
|
|
26
|
-
private addTag;
|
|
27
|
-
private parseMetadata;
|
|
28
|
-
private readFrameHeader;
|
|
29
|
-
}
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ITokenizer } from 'strtok3/lib/core';
|
|
3
|
+
import { IOptions } from '../type';
|
|
4
|
+
import { INativeMetadataCollector } from '../common/MetadataCollector';
|
|
5
|
+
export declare class ID3v2Parser {
|
|
6
|
+
static removeUnsyncBytes(buffer: Buffer): Buffer;
|
|
7
|
+
private static getFrameHeaderLength;
|
|
8
|
+
private static readFrameFlags;
|
|
9
|
+
private static readFrameData;
|
|
10
|
+
/**
|
|
11
|
+
* Create a combined tag key, of tag & description
|
|
12
|
+
* @param tag e.g.: COM
|
|
13
|
+
* @param description e.g. iTunPGAP
|
|
14
|
+
* @returns string e.g. COM:iTunPGAP
|
|
15
|
+
*/
|
|
16
|
+
private static makeDescriptionTagName;
|
|
17
|
+
private tokenizer;
|
|
18
|
+
private id3Header;
|
|
19
|
+
private metadata;
|
|
20
|
+
private headerType;
|
|
21
|
+
private options;
|
|
22
|
+
parse(metadata: INativeMetadataCollector, tokenizer: ITokenizer, options: IOptions): Promise<void>;
|
|
23
|
+
parseExtendedHeader(): Promise<void>;
|
|
24
|
+
parseExtendedHeaderData(dataRemaining: number, extendedHeaderSize: number): Promise<void>;
|
|
25
|
+
parseId3Data(dataLen: number): Promise<void>;
|
|
26
|
+
private addTag;
|
|
27
|
+
private parseMetadata;
|
|
28
|
+
private readFrameHeader;
|
|
29
|
+
}
|