@dragon708/docmind-markdown 1.2.5 → 1.2.6
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/node_modules/music-metadata/LICENSE.txt +3 -3
- package/node_modules/music-metadata/README.md +246 -690
- package/node_modules/music-metadata/lib/ParserFactory.d.ts +31 -27
- package/node_modules/music-metadata/lib/ParserFactory.js +219 -108
- package/node_modules/music-metadata/lib/aiff/AiffParser.d.ts +2 -2
- package/node_modules/music-metadata/lib/aiff/AiffParser.js +38 -34
- package/node_modules/music-metadata/lib/aiff/AiffTagMap.d.ts +1 -1
- package/node_modules/music-metadata/lib/aiff/AiffTagMap.js +7 -2
- package/node_modules/music-metadata/lib/aiff/AiffToken.d.ts +6 -32
- package/node_modules/music-metadata/lib/aiff/AiffToken.js +17 -27
- package/node_modules/music-metadata/lib/apev2/APEv2Parser.d.ts +8 -24
- package/node_modules/music-metadata/lib/apev2/APEv2Parser.js +66 -78
- package/node_modules/music-metadata/lib/apev2/APEv2TagMapper.d.ts +1 -1
- package/node_modules/music-metadata/lib/apev2/APEv2TagMapper.js +8 -4
- package/node_modules/music-metadata/lib/apev2/APEv2Token.d.ts +11 -10
- package/node_modules/music-metadata/lib/apev2/APEv2Token.js +27 -16
- package/node_modules/music-metadata/lib/asf/AsfObject.d.ts +53 -59
- package/node_modules/music-metadata/lib/asf/AsfObject.js +131 -97
- package/node_modules/music-metadata/lib/asf/AsfParser.d.ts +1 -1
- package/node_modules/music-metadata/lib/asf/AsfParser.js +43 -42
- package/node_modules/music-metadata/lib/asf/AsfTagMapper.d.ts +2 -2
- package/node_modules/music-metadata/lib/asf/AsfTagMapper.js +10 -6
- package/node_modules/music-metadata/lib/asf/AsfUtil.d.ts +13 -4
- package/node_modules/music-metadata/lib/asf/AsfUtil.js +36 -30
- package/node_modules/music-metadata/lib/asf/GUID.d.ts +84 -0
- package/node_modules/music-metadata/lib/asf/GUID.js +121 -0
- package/node_modules/music-metadata/lib/common/BasicParser.d.ts +9 -9
- package/node_modules/music-metadata/lib/common/BasicParser.js +7 -2
- package/node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.d.ts +3 -3
- package/node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.js +7 -2
- package/node_modules/music-metadata/lib/common/CombinedTagMapper.d.ts +5 -5
- package/node_modules/music-metadata/lib/common/CombinedTagMapper.js +28 -24
- package/node_modules/music-metadata/lib/common/FourCC.d.ts +1 -1
- package/node_modules/music-metadata/lib/common/FourCC.js +11 -10
- package/node_modules/music-metadata/lib/common/GenericTagMapper.d.ts +13 -13
- package/node_modules/music-metadata/lib/common/GenericTagMapper.js +12 -7
- package/node_modules/music-metadata/lib/common/GenericTagTypes.d.ts +6 -7
- package/node_modules/music-metadata/lib/common/GenericTagTypes.js +85 -86
- package/node_modules/music-metadata/lib/common/MetadataCollector.d.ts +10 -20
- package/node_modules/music-metadata/lib/common/MetadataCollector.js +69 -100
- package/node_modules/music-metadata/lib/common/RandomFileReader.d.ts +22 -0
- package/node_modules/music-metadata/lib/common/RandomFileReader.js +34 -0
- package/node_modules/music-metadata/lib/common/RandomUint8ArrayReader.d.ts +18 -0
- package/node_modules/music-metadata/lib/common/RandomUint8ArrayReader.js +25 -0
- package/node_modules/music-metadata/lib/common/Util.d.ts +12 -11
- package/node_modules/music-metadata/lib/common/Util.js +53 -47
- package/node_modules/music-metadata/lib/core.d.ts +15 -42
- package/node_modules/music-metadata/lib/core.js +38 -74
- package/node_modules/music-metadata/lib/dsdiff/DsdiffParser.d.ts +1 -16
- package/node_modules/music-metadata/lib/dsdiff/DsdiffParser.js +44 -55
- package/node_modules/music-metadata/lib/dsdiff/DsdiffToken.d.ts +3 -3
- package/node_modules/music-metadata/lib/dsdiff/DsdiffToken.js +7 -4
- package/node_modules/music-metadata/lib/dsf/DsfChunk.d.ts +10 -11
- package/node_modules/music-metadata/lib/dsf/DsfChunk.js +19 -15
- package/node_modules/music-metadata/lib/dsf/DsfParser.d.ts +1 -16
- package/node_modules/music-metadata/lib/dsf/DsfParser.js +20 -21
- package/node_modules/music-metadata/lib/flac/FlacParser.d.ts +15 -16
- package/node_modules/music-metadata/lib/flac/FlacParser.js +119 -69
- package/node_modules/music-metadata/lib/id3v1/ID3v1Parser.d.ts +3 -7
- package/node_modules/music-metadata/lib/id3v1/ID3v1Parser.js +36 -39
- package/node_modules/music-metadata/lib/id3v1/ID3v1TagMap.d.ts +1 -1
- package/node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js +7 -2
- package/node_modules/music-metadata/lib/id3v2/AbstractID3Parser.d.ts +2 -2
- package/node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js +19 -15
- package/node_modules/music-metadata/lib/id3v2/FrameParser.d.ts +3 -64
- package/node_modules/music-metadata/lib/id3v2/FrameParser.js +103 -244
- package/node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.d.ts +2 -2
- package/node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js +16 -6
- package/node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.d.ts +5 -5
- package/node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js +35 -36
- package/node_modules/music-metadata/lib/id3v2/ID3v2Parser.d.ts +6 -11
- package/node_modules/music-metadata/lib/id3v2/ID3v2Parser.js +104 -91
- package/node_modules/music-metadata/lib/id3v2/ID3v2Token.d.ts +29 -67
- package/node_modules/music-metadata/lib/id3v2/ID3v2Token.js +36 -76
- package/node_modules/music-metadata/lib/iff/index.d.ts +1 -1
- package/node_modules/music-metadata/lib/iff/index.js +7 -4
- package/node_modules/music-metadata/lib/index.d.ts +31 -8
- package/node_modules/music-metadata/lib/index.js +53 -32
- package/node_modules/music-metadata/lib/lyrics3/Lyrics3.d.ts +2 -2
- package/node_modules/music-metadata/lib/lyrics3/Lyrics3.js +13 -13
- package/node_modules/music-metadata/lib/matroska/MatroskaDtd.d.ts +2 -2
- package/node_modules/music-metadata/lib/matroska/MatroskaDtd.js +242 -246
- package/node_modules/music-metadata/lib/matroska/MatroskaParser.d.ts +24 -6
- package/node_modules/music-metadata/lib/matroska/MatroskaParser.js +218 -124
- package/node_modules/music-metadata/lib/matroska/MatroskaTagMapper.d.ts +1 -1
- package/node_modules/music-metadata/lib/matroska/MatroskaTagMapper.js +7 -3
- package/node_modules/music-metadata/lib/matroska/types.d.ts +76 -43
- package/node_modules/music-metadata/lib/matroska/types.js +33 -27
- package/node_modules/music-metadata/lib/mp4/Atom.d.ts +7 -7
- package/node_modules/music-metadata/lib/mp4/Atom.js +22 -15
- package/node_modules/music-metadata/lib/mp4/AtomToken.d.ts +18 -110
- package/node_modules/music-metadata/lib/mp4/AtomToken.js +66 -184
- package/node_modules/music-metadata/lib/mp4/MP4Parser.d.ts +4 -6
- package/node_modules/music-metadata/lib/mp4/MP4Parser.js +128 -255
- package/node_modules/music-metadata/lib/mp4/MP4TagMapper.d.ts +4 -4
- package/node_modules/music-metadata/lib/mp4/MP4TagMapper.js +12 -8
- package/node_modules/music-metadata/lib/mpeg/ExtendedLameHeader.d.ts +5 -5
- package/node_modules/music-metadata/lib/mpeg/ExtendedLameHeader.js +10 -7
- package/node_modules/music-metadata/lib/mpeg/MpegParser.d.ts +4 -17
- package/node_modules/music-metadata/lib/mpeg/MpegParser.js +131 -176
- package/node_modules/music-metadata/lib/mpeg/ReplayGainDataFormat.d.ts +14 -16
- package/node_modules/music-metadata/lib/mpeg/ReplayGainDataFormat.js +19 -14
- package/node_modules/music-metadata/lib/mpeg/XingTag.d.ts +7 -6
- package/node_modules/music-metadata/lib/mpeg/XingTag.js +18 -14
- package/node_modules/music-metadata/lib/musepack/index.d.ts +5 -0
- package/node_modules/music-metadata/lib/musepack/index.js +32 -0
- package/node_modules/music-metadata/lib/musepack/sv7/BitReader.d.ts +2 -2
- package/node_modules/music-metadata/lib/musepack/sv7/BitReader.js +24 -16
- package/node_modules/music-metadata/lib/musepack/sv7/MpcSv7Parser.d.ts +1 -1
- package/node_modules/music-metadata/lib/musepack/sv7/MpcSv7Parser.js +15 -16
- package/node_modules/music-metadata/lib/musepack/sv7/StreamVersion7.d.ts +1 -1
- package/node_modules/music-metadata/lib/musepack/sv7/StreamVersion7.js +7 -5
- package/node_modules/music-metadata/lib/musepack/sv8/MpcSv8Parser.d.ts +1 -1
- package/node_modules/music-metadata/lib/musepack/sv8/MpcSv8Parser.js +17 -18
- package/node_modules/music-metadata/lib/musepack/sv8/StreamVersion8.d.ts +3 -5
- package/node_modules/music-metadata/lib/musepack/sv8/StreamVersion8.js +12 -14
- package/node_modules/music-metadata/lib/ogg/{OggToken.d.ts → Ogg.d.ts} +6 -17
- package/node_modules/music-metadata/lib/ogg/Ogg.js +2 -0
- package/node_modules/music-metadata/lib/ogg/OggParser.d.ts +12 -16
- package/node_modules/music-metadata/lib/ogg/OggParser.js +102 -101
- package/node_modules/music-metadata/lib/ogg/opus/Opus.d.ts +2 -17
- package/node_modules/music-metadata/lib/ogg/opus/Opus.js +14 -13
- package/node_modules/music-metadata/lib/ogg/opus/OpusParser.d.ts +25 -0
- package/node_modules/music-metadata/lib/ogg/opus/{OpusStream.js → OpusParser.js} +18 -18
- package/node_modules/music-metadata/lib/ogg/speex/Speex.d.ts +1 -1
- package/node_modules/music-metadata/lib/ogg/speex/Speex.js +19 -16
- package/node_modules/music-metadata/lib/ogg/speex/SpeexParser.d.ts +22 -0
- package/node_modules/music-metadata/lib/ogg/speex/{SpeexStream.js → SpeexParser.js} +13 -9
- package/node_modules/music-metadata/lib/ogg/theora/Theora.d.ts +1 -1
- package/node_modules/music-metadata/lib/ogg/theora/Theora.js +11 -8
- package/node_modules/music-metadata/lib/ogg/theora/TheoraParser.d.ts +28 -0
- package/node_modules/music-metadata/lib/ogg/theora/TheoraParser.js +44 -0
- package/node_modules/music-metadata/lib/ogg/vorbis/Vorbis.d.ts +7 -6
- package/node_modules/music-metadata/lib/ogg/vorbis/Vorbis.js +29 -34
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisDecoder.d.ts +1 -1
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisDecoder.js +9 -6
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisParser.d.ts +36 -0
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisParser.js +128 -0
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.d.ts +3 -3
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js +9 -5
- package/node_modules/music-metadata/lib/riff/RiffChunk.d.ts +5 -5
- package/node_modules/music-metadata/lib/riff/RiffChunk.js +9 -5
- package/node_modules/music-metadata/lib/riff/RiffInfoTagMap.d.ts +2 -2
- package/node_modules/music-metadata/lib/riff/RiffInfoTagMap.js +25 -20
- package/node_modules/music-metadata/lib/type.d.ts +52 -121
- package/node_modules/music-metadata/lib/type.js +6 -2
- package/node_modules/music-metadata/lib/wav/BwfChunk.d.ts +1 -1
- package/node_modules/music-metadata/lib/wav/BwfChunk.js +11 -8
- package/node_modules/music-metadata/lib/wav/WaveChunk.d.ts +20 -50
- package/node_modules/music-metadata/lib/wav/WaveChunk.js +32 -45
- package/node_modules/music-metadata/lib/wav/WaveParser.d.ts +2 -2
- package/node_modules/music-metadata/lib/wav/WaveParser.js +39 -46
- package/node_modules/music-metadata/lib/wavpack/WavPackParser.d.ts +2 -18
- package/node_modules/music-metadata/lib/wavpack/WavPackParser.js +32 -42
- package/node_modules/music-metadata/lib/wavpack/WavPackToken.d.ts +18 -14
- package/node_modules/music-metadata/lib/wavpack/WavPackToken.js +30 -24
- package/node_modules/music-metadata/package.json +74 -81
- package/package.json +1 -5
- package/node_modules/@borewit/text-codec/LICENSE.txt +0 -9
- package/node_modules/@borewit/text-codec/README.md +0 -87
- package/node_modules/@borewit/text-codec/lib/index.d.ts +0 -6
- package/node_modules/@borewit/text-codec/lib/index.js +0 -380
- package/node_modules/@borewit/text-codec/package.json +0 -70
- package/node_modules/music-metadata/lib/ParseError.d.ts +0 -87
- package/node_modules/music-metadata/lib/ParseError.js +0 -38
- package/node_modules/music-metadata/lib/aiff/AiffLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/aiff/AiffLoader.js +0 -8
- package/node_modules/music-metadata/lib/apev2/Apev2Loader.d.ts +0 -2
- package/node_modules/music-metadata/lib/apev2/Apev2Loader.js +0 -8
- package/node_modules/music-metadata/lib/asf/AsfGuid.d.ts +0 -83
- package/node_modules/music-metadata/lib/asf/AsfGuid.js +0 -109
- package/node_modules/music-metadata/lib/asf/AsfLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/asf/AsfLoader.js +0 -8
- package/node_modules/music-metadata/lib/dsdiff/DsdiffLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/dsdiff/DsdiffLoader.js +0 -8
- package/node_modules/music-metadata/lib/dsf/DsfLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/dsf/DsfLoader.js +0 -8
- package/node_modules/music-metadata/lib/ebml/EbmlIterator.d.ts +0 -67
- package/node_modules/music-metadata/lib/ebml/EbmlIterator.js +0 -218
- package/node_modules/music-metadata/lib/ebml/types.d.ts +0 -37
- package/node_modules/music-metadata/lib/ebml/types.js +0 -8
- package/node_modules/music-metadata/lib/flac/FlacLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/flac/FlacLoader.js +0 -8
- package/node_modules/music-metadata/lib/flac/FlacToken.d.ts +0 -45
- package/node_modules/music-metadata/lib/flac/FlacToken.js +0 -63
- package/node_modules/music-metadata/lib/id3v2/FrameHeader.d.ts +0 -31
- package/node_modules/music-metadata/lib/id3v2/FrameHeader.js +0 -73
- package/node_modules/music-metadata/lib/id3v2/ID3v2ChapterToken.d.ts +0 -11
- package/node_modules/music-metadata/lib/id3v2/ID3v2ChapterToken.js +0 -17
- package/node_modules/music-metadata/lib/lrc/LyricsParser.d.ts +0 -9
- package/node_modules/music-metadata/lib/lrc/LyricsParser.js +0 -45
- package/node_modules/music-metadata/lib/matroska/MatroskaLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/matroska/MatroskaLoader.js +0 -8
- package/node_modules/music-metadata/lib/mp4/Mp4Loader.d.ts +0 -2
- package/node_modules/music-metadata/lib/mp4/Mp4Loader.js +0 -8
- package/node_modules/music-metadata/lib/mpeg/MpegLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/mpeg/MpegLoader.js +0 -8
- package/node_modules/music-metadata/lib/musepack/MusepackConentError.d.ts +0 -15
- package/node_modules/music-metadata/lib/musepack/MusepackConentError.js +0 -3
- package/node_modules/music-metadata/lib/musepack/MusepackLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/musepack/MusepackLoader.js +0 -8
- package/node_modules/music-metadata/lib/musepack/MusepackParser.d.ts +0 -4
- package/node_modules/music-metadata/lib/musepack/MusepackParser.js +0 -30
- package/node_modules/music-metadata/lib/ogg/OggLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/ogg/OggLoader.js +0 -8
- package/node_modules/music-metadata/lib/ogg/OggToken.js +0 -41
- package/node_modules/music-metadata/lib/ogg/flac/FlacStream.d.ts +0 -29
- package/node_modules/music-metadata/lib/ogg/flac/FlacStream.js +0 -74
- package/node_modules/music-metadata/lib/ogg/opus/OpusStream.d.ts +0 -24
- package/node_modules/music-metadata/lib/ogg/speex/SpeexStream.d.ts +0 -20
- package/node_modules/music-metadata/lib/ogg/theora/TheoraStream.d.ts +0 -25
- package/node_modules/music-metadata/lib/ogg/theora/TheoraStream.js +0 -39
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisStream.d.ts +0 -53
- package/node_modules/music-metadata/lib/ogg/vorbis/VorbisStream.js +0 -136
- package/node_modules/music-metadata/lib/wav/WaveLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/wav/WaveLoader.js +0 -8
- package/node_modules/music-metadata/lib/wavpack/WavPackLoader.d.ts +0 -2
- package/node_modules/music-metadata/lib/wavpack/WavPackLoader.js +0 -8
- package/node_modules/music-metadata/node_modules/file-type/core.d.ts +0 -253
- package/node_modules/music-metadata/node_modules/file-type/core.js +0 -2899
- package/node_modules/music-metadata/node_modules/file-type/index.d.ts +0 -98
- package/node_modules/music-metadata/node_modules/file-type/index.js +0 -163
- package/node_modules/music-metadata/node_modules/file-type/license +0 -9
- package/node_modules/music-metadata/node_modules/file-type/package.json +0 -290
- package/node_modules/music-metadata/node_modules/file-type/readme.md +0 -667
- package/node_modules/music-metadata/node_modules/file-type/supported.js +0 -360
- package/node_modules/music-metadata/node_modules/file-type/util.js +0 -60
- package/node_modules/music-metadata/node_modules/strtok3/LICENSE.txt +0 -21
- package/node_modules/music-metadata/node_modules/strtok3/README.md +0 -399
- package/node_modules/music-metadata/node_modules/strtok3/lib/AbstractTokenizer.d.ts +0 -76
- package/node_modules/music-metadata/node_modules/strtok3/lib/AbstractTokenizer.js +0 -111
- package/node_modules/music-metadata/node_modules/strtok3/lib/BlobTokenizer.d.ts +0 -29
- package/node_modules/music-metadata/node_modules/strtok3/lib/BlobTokenizer.js +0 -53
- package/node_modules/music-metadata/node_modules/strtok3/lib/BufferTokenizer.d.ts +0 -29
- package/node_modules/music-metadata/node_modules/strtok3/lib/BufferTokenizer.js +0 -52
- package/node_modules/music-metadata/node_modules/strtok3/lib/FileTokenizer.d.ts +0 -37
- package/node_modules/music-metadata/node_modules/strtok3/lib/FileTokenizer.js +0 -61
- package/node_modules/music-metadata/node_modules/strtok3/lib/ReadStreamTokenizer.d.ts +0 -34
- package/node_modules/music-metadata/node_modules/strtok3/lib/ReadStreamTokenizer.js +0 -107
- package/node_modules/music-metadata/node_modules/strtok3/lib/core.d.ts +0 -40
- package/node_modules/music-metadata/node_modules/strtok3/lib/core.js +0 -62
- package/node_modules/music-metadata/node_modules/strtok3/lib/index.d.ts +0 -16
- package/node_modules/music-metadata/node_modules/strtok3/lib/index.js +0 -22
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/AbstractStreamReader.d.ts +0 -54
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/AbstractStreamReader.js +0 -71
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/Deferred.d.ts +0 -6
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/Deferred.js +0 -10
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/Errors.d.ts +0 -10
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/Errors.js +0 -16
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/StreamReader.d.ts +0 -29
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/StreamReader.js +0 -83
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamByobReader.d.ts +0 -14
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamByobReader.js +0 -27
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamDefaultReader.d.ts +0 -19
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamDefaultReader.js +0 -62
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamReader.d.ts +0 -14
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamReader.js +0 -13
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamReaderFactory.d.ts +0 -5
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/WebStreamReaderFactory.js +0 -19
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/index.d.ts +0 -6
- package/node_modules/music-metadata/node_modules/strtok3/lib/stream/index.js +0 -5
- package/node_modules/music-metadata/node_modules/strtok3/lib/types.d.ts +0 -139
- package/node_modules/music-metadata/node_modules/strtok3/lib/types.js +0 -1
- package/node_modules/music-metadata/node_modules/strtok3/package.json +0 -94
- package/node_modules/music-metadata/node_modules/token-types/LICENSE.txt +0 -9
- package/node_modules/music-metadata/node_modules/token-types/README.md +0 -120
- package/node_modules/music-metadata/node_modules/token-types/lib/index.d.ts +0 -135
- package/node_modules/music-metadata/node_modules/token-types/lib/index.js +0 -401
- package/node_modules/music-metadata/node_modules/token-types/package.json +0 -81
- package/node_modules/sprintf-js/.npmignore +0 -1
- package/node_modules/sprintf-js/LICENSE +0 -24
- package/node_modules/sprintf-js/README.md +0 -88
- package/node_modules/sprintf-js/bower.json +0 -14
- package/node_modules/sprintf-js/demo/angular.html +0 -20
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js +0 -4
- package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +0 -1
- package/node_modules/sprintf-js/dist/angular-sprintf.min.map +0 -1
- package/node_modules/sprintf-js/dist/sprintf.min.js +0 -4
- package/node_modules/sprintf-js/dist/sprintf.min.js.map +0 -1
- package/node_modules/sprintf-js/dist/sprintf.min.map +0 -1
- package/node_modules/sprintf-js/gruntfile.js +0 -36
- package/node_modules/sprintf-js/package.json +0 -22
- package/node_modules/sprintf-js/src/angular-sprintf.js +0 -18
- package/node_modules/sprintf-js/src/sprintf.js +0 -208
- package/node_modules/sprintf-js/test/test.js +0 -82
- package/node_modules/uint8array-extras/index.d.ts +0 -331
- package/node_modules/uint8array-extras/index.js +0 -318
- package/node_modules/uint8array-extras/license +0 -9
- package/node_modules/uint8array-extras/package.json +0 -54
- package/node_modules/uint8array-extras/readme.md +0 -318
- package/node_modules/win-guid/LICENSE.txt +0 -9
- package/node_modules/win-guid/README.md +0 -113
- package/node_modules/win-guid/lib/guid.d.ts +0 -20
- package/node_modules/win-guid/lib/guid.js +0 -107
- package/node_modules/win-guid/package.json +0 -55
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/LICENSE +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/README.md +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/index.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/append/constant.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/append.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/count.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/help.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/store/constant.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/store/false.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/store/true.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/store.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/subparsers.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action/version.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/action_container.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/argparse.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/argument/error.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/argument/exclusive.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/argument/group.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/argument_parser.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/const.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/help/added_formatters.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/help/formatter.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/namespace.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/lib/utils.js +0 -0
- /package/node_modules/{argparse → mammoth/node_modules/argparse}/package.json +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Extended Lame Header
|
|
3
3
|
*/
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import { IGetToken } from 'strtok3/lib/core';
|
|
5
|
+
import { IReplayGain } from './ReplayGainDataFormat';
|
|
6
6
|
/**
|
|
7
7
|
* LAME Tag, extends the Xing header format
|
|
8
8
|
* First added in LAME 3.12 for VBR
|
|
@@ -12,9 +12,9 @@ export interface IExtendedLameHeader {
|
|
|
12
12
|
revision: number;
|
|
13
13
|
vbr_method: number;
|
|
14
14
|
lowpass_filter: number;
|
|
15
|
-
track_peak?: number
|
|
16
|
-
track_gain
|
|
17
|
-
album_gain
|
|
15
|
+
track_peak?: number;
|
|
16
|
+
track_gain: IReplayGain;
|
|
17
|
+
album_gain: IReplayGain;
|
|
18
18
|
music_length: number;
|
|
19
19
|
music_crc: number;
|
|
20
20
|
header_crc: number;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
/**
|
|
2
3
|
* Extended Lame Header
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ExtendedLameHeader = void 0;
|
|
7
|
+
const Token = require("token-types");
|
|
8
|
+
const common = require("../common/Util");
|
|
9
|
+
const ReplayGainDataFormat_1 = require("./ReplayGainDataFormat");
|
|
7
10
|
/**
|
|
8
11
|
* Info Tag
|
|
9
12
|
* @link http://gabriel.mp3-tech.org/mp3infotag.html
|
|
10
13
|
* @link https://github.com/quodlibet/mutagen/blob/abd58ee58772224334a18817c3fb31103572f70e/mutagen/mp3/_util.py#L112
|
|
11
14
|
*/
|
|
12
|
-
|
|
15
|
+
exports.ExtendedLameHeader = {
|
|
13
16
|
len: 27,
|
|
14
17
|
get: (buf, off) => {
|
|
15
18
|
const track_peak = Token.UINT32_BE.get(buf, off + 2);
|
|
@@ -17,9 +20,9 @@ export const ExtendedLameHeader = {
|
|
|
17
20
|
revision: common.getBitAllignedNumber(buf, off, 0, 4),
|
|
18
21
|
vbr_method: common.getBitAllignedNumber(buf, off, 4, 4),
|
|
19
22
|
lowpass_filter: 100 * Token.UINT8.get(buf, off + 1),
|
|
20
|
-
track_peak: track_peak === 0 ?
|
|
21
|
-
track_gain: ReplayGain.get(buf, 6),
|
|
22
|
-
album_gain: ReplayGain.get(buf, 8),
|
|
23
|
+
track_peak: track_peak === 0 ? undefined : track_peak / Math.pow(2, 23),
|
|
24
|
+
track_gain: ReplayGainDataFormat_1.ReplayGain.get(buf, 6),
|
|
25
|
+
album_gain: ReplayGainDataFormat_1.ReplayGain.get(buf, 8),
|
|
23
26
|
music_length: Token.UINT32_BE.get(buf, off + 20),
|
|
24
27
|
music_crc: Token.UINT8.get(buf, off + 24),
|
|
25
28
|
header_crc: Token.UINT16_BE.get(buf, off + 24)
|
|
@@ -1,26 +1,14 @@
|
|
|
1
|
-
import { AbstractID3Parser } from '../id3v2/AbstractID3Parser
|
|
2
|
-
declare const MpegContentError_base: {
|
|
3
|
-
new (message: string): {
|
|
4
|
-
readonly fileType: string;
|
|
5
|
-
toString(): string;
|
|
6
|
-
name: "UnexpectedFileContentError";
|
|
7
|
-
message: string;
|
|
8
|
-
stack?: string;
|
|
9
|
-
};
|
|
10
|
-
captureStackTrace(targetObject: object, constructorOpt?: Function): void;
|
|
11
|
-
prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
|
|
12
|
-
stackTraceLimit: number;
|
|
13
|
-
};
|
|
14
|
-
export declare class MpegContentError extends MpegContentError_base {
|
|
15
|
-
}
|
|
1
|
+
import { AbstractID3Parser } from '../id3v2/AbstractID3Parser';
|
|
16
2
|
export declare class MpegParser extends AbstractID3Parser {
|
|
17
3
|
private frameCount;
|
|
18
4
|
private syncFrameCount;
|
|
5
|
+
private countSkipFrameData;
|
|
19
6
|
private totalDataLength;
|
|
20
|
-
private audioFrameHeader
|
|
7
|
+
private audioFrameHeader;
|
|
21
8
|
private bitrates;
|
|
22
9
|
private offset;
|
|
23
10
|
private frame_size;
|
|
11
|
+
private crc;
|
|
24
12
|
private calculateEofDuration;
|
|
25
13
|
private samplesPerFrame;
|
|
26
14
|
private buf_frame_header;
|
|
@@ -59,4 +47,3 @@ export declare class MpegParser extends AbstractID3Parser {
|
|
|
59
47
|
private skipFrameData;
|
|
60
48
|
private areAllSame;
|
|
61
49
|
}
|
|
62
|
-
export {};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MpegParser = void 0;
|
|
4
|
+
const Token = require("token-types");
|
|
5
|
+
const core_1 = require("strtok3/lib/core");
|
|
6
|
+
const debug_1 = require("debug");
|
|
7
|
+
const common = require("../common/Util");
|
|
8
|
+
const AbstractID3Parser_1 = require("../id3v2/AbstractID3Parser");
|
|
9
|
+
const XingTag_1 = require("./XingTag");
|
|
10
|
+
const debug = (0, debug_1.default)('music-metadata:parser:mpeg');
|
|
11
11
|
/**
|
|
12
12
|
* Cache buffer size used for searching synchronization preabmle
|
|
13
13
|
*/
|
|
@@ -22,8 +22,8 @@ const MPEG4 = {
|
|
|
22
22
|
*/
|
|
23
23
|
AudioObjectTypes: [
|
|
24
24
|
'AAC Main',
|
|
25
|
-
'AAC LC',
|
|
26
|
-
'AAC SSR',
|
|
25
|
+
'AAC LC',
|
|
26
|
+
'AAC SSR',
|
|
27
27
|
'AAC LTP' // Long Term Prediction
|
|
28
28
|
],
|
|
29
29
|
/**
|
|
@@ -31,7 +31,7 @@ const MPEG4 = {
|
|
|
31
31
|
* https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Sampling_Frequencies
|
|
32
32
|
*/
|
|
33
33
|
SamplingFrequencies: [
|
|
34
|
-
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350,
|
|
34
|
+
96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350, undefined, undefined, -1
|
|
35
35
|
]
|
|
36
36
|
/**
|
|
37
37
|
* Channel Configurations
|
|
@@ -55,24 +55,6 @@ const MPEG4_ChannelConfigurations = [
|
|
|
55
55
|
*/
|
|
56
56
|
class MpegFrameHeader {
|
|
57
57
|
constructor(buf, off) {
|
|
58
|
-
// E(15,12): Bitrate index
|
|
59
|
-
this.bitrateIndex = null;
|
|
60
|
-
// F(11,10): Sampling rate frequency index
|
|
61
|
-
this.sampRateFreqIndex = null;
|
|
62
|
-
// G(9): Padding bit
|
|
63
|
-
this.padding = null;
|
|
64
|
-
// H(8): Private bit
|
|
65
|
-
this.privateBit = null;
|
|
66
|
-
// I(7,6): Channel Mode
|
|
67
|
-
this.channelModeIndex = null;
|
|
68
|
-
// J(5,4): Mode extension (Only used in Joint stereo)
|
|
69
|
-
this.modeExtension = null;
|
|
70
|
-
// L(2): Original
|
|
71
|
-
this.isOriginalMedia = null;
|
|
72
|
-
this.version = null;
|
|
73
|
-
this.bitrate = null;
|
|
74
|
-
this.samplingRate = null;
|
|
75
|
-
this.frameLength = 0;
|
|
76
58
|
// B(20,19): MPEG Audio versionIndex ID
|
|
77
59
|
this.versionIndex = common.getBitAllignedNumber(buf, off + 1, 3, 2);
|
|
78
60
|
// C(18,17): Layer description
|
|
@@ -87,7 +69,7 @@ class MpegFrameHeader {
|
|
|
87
69
|
this.isProtectedByCRC = !common.isBitSet(buf, off + 1, 7);
|
|
88
70
|
}
|
|
89
71
|
calcDuration(numFrames) {
|
|
90
|
-
return
|
|
72
|
+
return numFrames * this.calcSamplesPerFrame() / this.samplingRate;
|
|
91
73
|
}
|
|
92
74
|
calcSamplesPerFrame() {
|
|
93
75
|
return MpegFrameHeader.samplesInFrameTable[this.version === 1 ? 0 : 1][this.layer];
|
|
@@ -100,7 +82,7 @@ class MpegFrameHeader {
|
|
|
100
82
|
if (this.version === 1) {
|
|
101
83
|
return 17;
|
|
102
84
|
}
|
|
103
|
-
if (this.version === 2 || this.version === 2.5) {
|
|
85
|
+
else if (this.version === 2 || this.version === 2.5) {
|
|
104
86
|
return 9;
|
|
105
87
|
}
|
|
106
88
|
}
|
|
@@ -108,11 +90,10 @@ class MpegFrameHeader {
|
|
|
108
90
|
if (this.version === 1) {
|
|
109
91
|
return 32;
|
|
110
92
|
}
|
|
111
|
-
if (this.version === 2 || this.version === 2.5) {
|
|
93
|
+
else if (this.version === 2 || this.version === 2.5) {
|
|
112
94
|
return 17;
|
|
113
95
|
}
|
|
114
96
|
}
|
|
115
|
-
return null;
|
|
116
97
|
}
|
|
117
98
|
calcSlotSize() {
|
|
118
99
|
return [null, 4, 1, 1][this.layer];
|
|
@@ -143,19 +124,19 @@ class MpegFrameHeader {
|
|
|
143
124
|
// Calculate bitrate
|
|
144
125
|
const bitrateInKbps = this.calcBitrate();
|
|
145
126
|
if (!bitrateInKbps) {
|
|
146
|
-
throw new
|
|
127
|
+
throw new Error('Cannot determine bit-rate');
|
|
147
128
|
}
|
|
148
129
|
this.bitrate = bitrateInKbps * 1000;
|
|
149
130
|
// Calculate sampling rate
|
|
150
131
|
this.samplingRate = this.calcSamplingRate();
|
|
151
132
|
if (this.samplingRate == null) {
|
|
152
|
-
throw new
|
|
133
|
+
throw new Error('Cannot determine sampling-rate');
|
|
153
134
|
}
|
|
154
135
|
}
|
|
155
136
|
parseAdtsHeader(buf, off) {
|
|
156
|
-
debug(
|
|
137
|
+
debug(`layer=0 => ADTS`);
|
|
157
138
|
this.version = this.versionIndex === 2 ? 4 : 2;
|
|
158
|
-
this.container =
|
|
139
|
+
this.container = 'ADTS/MPEG-' + this.version;
|
|
159
140
|
const profileIndex = common.getBitAllignedNumber(buf, off + 2, 0, 2);
|
|
160
141
|
this.codec = 'AAC';
|
|
161
142
|
this.codecProfile = MPEG4.AudioObjectTypes[profileIndex];
|
|
@@ -165,22 +146,19 @@ class MpegFrameHeader {
|
|
|
165
146
|
debug(`sampling-rate=${this.samplingRate}`);
|
|
166
147
|
const channelIndex = common.getBitAllignedNumber(buf, off + 2, 7, 3);
|
|
167
148
|
this.mp4ChannelConfig = MPEG4_ChannelConfigurations[channelIndex];
|
|
168
|
-
debug(`channel-config=${this.mp4ChannelConfig
|
|
149
|
+
debug(`channel-config=${this.mp4ChannelConfig.join('+')}`);
|
|
169
150
|
this.frameLength = common.getBitAllignedNumber(buf, off + 3, 6, 2) << 11;
|
|
170
151
|
}
|
|
171
152
|
calcBitrate() {
|
|
172
153
|
if (this.bitrateIndex === 0x00 || // free
|
|
173
154
|
this.bitrateIndex === 0x0F) { // reserved
|
|
174
|
-
return
|
|
175
|
-
}
|
|
176
|
-
if (this.version && this.bitrateIndex) {
|
|
177
|
-
const codecIndex = 10 * Math.floor(this.version) + this.layer;
|
|
178
|
-
return MpegFrameHeader.bitrate_index[this.bitrateIndex][codecIndex];
|
|
155
|
+
return;
|
|
179
156
|
}
|
|
180
|
-
|
|
157
|
+
const codecIndex = `${Math.floor(this.version)}${this.layer}`;
|
|
158
|
+
return MpegFrameHeader.bitrate_index[this.bitrateIndex][codecIndex];
|
|
181
159
|
}
|
|
182
160
|
calcSamplingRate() {
|
|
183
|
-
if (this.sampRateFreqIndex === 0x03
|
|
161
|
+
if (this.sampRateFreqIndex === 0x03)
|
|
184
162
|
return null; // 'reserved'
|
|
185
163
|
return MpegFrameHeader.sampling_rate_freq_index[this.version][this.sampRateFreqIndex];
|
|
186
164
|
}
|
|
@@ -191,29 +169,29 @@ MpegFrameHeader.VersionID = [2.5, null, 2, 1];
|
|
|
191
169
|
MpegFrameHeader.LayerDescription = [0, 3, 2, 1];
|
|
192
170
|
MpegFrameHeader.ChannelMode = ['stereo', 'joint_stereo', 'dual_channel', 'mono'];
|
|
193
171
|
MpegFrameHeader.bitrate_index = {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
172
|
+
0x01: { 11: 32, 12: 32, 13: 32, 21: 32, 22: 8, 23: 8 },
|
|
173
|
+
0x02: { 11: 64, 12: 48, 13: 40, 21: 48, 22: 16, 23: 16 },
|
|
174
|
+
0x03: { 11: 96, 12: 56, 13: 48, 21: 56, 22: 24, 23: 24 },
|
|
175
|
+
0x04: { 11: 128, 12: 64, 13: 56, 21: 64, 22: 32, 23: 32 },
|
|
176
|
+
0x05: { 11: 160, 12: 80, 13: 64, 21: 80, 22: 40, 23: 40 },
|
|
177
|
+
0x06: { 11: 192, 12: 96, 13: 80, 21: 96, 22: 48, 23: 48 },
|
|
178
|
+
0x07: { 11: 224, 12: 112, 13: 96, 21: 112, 22: 56, 23: 56 },
|
|
179
|
+
0x08: { 11: 256, 12: 128, 13: 112, 21: 128, 22: 64, 23: 64 },
|
|
180
|
+
0x09: { 11: 288, 12: 160, 13: 128, 21: 144, 22: 80, 23: 80 },
|
|
181
|
+
0x0A: { 11: 320, 12: 192, 13: 160, 21: 160, 22: 96, 23: 96 },
|
|
182
|
+
0x0B: { 11: 352, 12: 224, 13: 192, 21: 176, 22: 112, 23: 112 },
|
|
183
|
+
0x0C: { 11: 384, 12: 256, 13: 224, 21: 192, 22: 128, 23: 128 },
|
|
184
|
+
0x0D: { 11: 416, 12: 320, 13: 256, 21: 224, 22: 144, 23: 144 },
|
|
185
|
+
0x0E: { 11: 448, 12: 384, 13: 320, 21: 256, 22: 160, 23: 160 }
|
|
208
186
|
};
|
|
209
187
|
MpegFrameHeader.sampling_rate_freq_index = {
|
|
210
|
-
1: {
|
|
211
|
-
2: {
|
|
212
|
-
2.5: {
|
|
188
|
+
1: { 0x00: 44100, 0x01: 48000, 0x02: 32000 },
|
|
189
|
+
2: { 0x00: 22050, 0x01: 24000, 0x02: 16000 },
|
|
190
|
+
2.5: { 0x00: 11025, 0x01: 12000, 0x02: 8000 }
|
|
213
191
|
};
|
|
214
192
|
MpegFrameHeader.samplesInFrameTable = [
|
|
215
193
|
/* Layer I II III */
|
|
216
|
-
[0, 384, 1152, 1152],
|
|
194
|
+
[0, 384, 1152, 1152],
|
|
217
195
|
[0, 384, 1152, 576] // MPEG-2(.5
|
|
218
196
|
];
|
|
219
197
|
/**
|
|
@@ -226,26 +204,20 @@ const FrameHeader = {
|
|
|
226
204
|
}
|
|
227
205
|
};
|
|
228
206
|
function getVbrCodecProfile(vbrScale) {
|
|
229
|
-
return
|
|
207
|
+
return 'V' + Math.floor((100 - vbrScale) / 10);
|
|
230
208
|
}
|
|
231
|
-
|
|
209
|
+
class MpegParser extends AbstractID3Parser_1.AbstractID3Parser {
|
|
232
210
|
constructor() {
|
|
233
211
|
super(...arguments);
|
|
234
212
|
this.frameCount = 0;
|
|
235
213
|
this.syncFrameCount = -1;
|
|
214
|
+
this.countSkipFrameData = 0;
|
|
236
215
|
this.totalDataLength = 0;
|
|
237
216
|
this.bitrates = [];
|
|
238
|
-
this.offset = 0;
|
|
239
|
-
this.frame_size = 0;
|
|
240
217
|
this.calculateEofDuration = false;
|
|
241
|
-
this.
|
|
242
|
-
this.buf_frame_header = new Uint8Array(4);
|
|
243
|
-
/**
|
|
244
|
-
* Number of bytes already parsed since beginning of stream / file
|
|
245
|
-
*/
|
|
246
|
-
this.mpegOffset = null;
|
|
218
|
+
this.buf_frame_header = Buffer.alloc(4);
|
|
247
219
|
this.syncPeek = {
|
|
248
|
-
buf:
|
|
220
|
+
buf: Buffer.alloc(maxPeekLen),
|
|
249
221
|
len: 0
|
|
250
222
|
};
|
|
251
223
|
}
|
|
@@ -254,7 +226,6 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
254
226
|
*/
|
|
255
227
|
async postId3v2Parse() {
|
|
256
228
|
this.metadata.setFormat('lossless', false);
|
|
257
|
-
this.metadata.setAudioOnly();
|
|
258
229
|
try {
|
|
259
230
|
let quit = false;
|
|
260
231
|
while (!quit) {
|
|
@@ -263,18 +234,14 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
263
234
|
}
|
|
264
235
|
}
|
|
265
236
|
catch (err) {
|
|
266
|
-
if (err instanceof EndOfStreamError) {
|
|
267
|
-
debug(
|
|
237
|
+
if (err instanceof core_1.EndOfStreamError) {
|
|
238
|
+
debug(`End-of-stream`);
|
|
268
239
|
if (this.calculateEofDuration) {
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
debug(`Calculate duration at EOF: ${duration} sec.`, duration);
|
|
275
|
-
this.metadata.setFormat('duration', duration);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
240
|
+
const numberOfSamples = this.frameCount * this.samplesPerFrame;
|
|
241
|
+
this.metadata.setFormat('numberOfSamples', numberOfSamples);
|
|
242
|
+
const duration = numberOfSamples / this.metadata.format.sampleRate;
|
|
243
|
+
debug(`Calculate duration at EOF: ${duration} sec.`, duration);
|
|
244
|
+
this.metadata.setFormat('duration', duration);
|
|
278
245
|
}
|
|
279
246
|
}
|
|
280
247
|
else {
|
|
@@ -287,27 +254,21 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
287
254
|
*/
|
|
288
255
|
finalize() {
|
|
289
256
|
const format = this.metadata.format;
|
|
290
|
-
const hasID3v1 =
|
|
291
|
-
if (
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
this.metadata.setFormat('bitrate', mpegSize * 8 / format.duration);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
if (this.tokenizer.fileInfo.size && format.codecProfile === 'CBR') {
|
|
299
|
-
const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);
|
|
300
|
-
if (this.frame_size !== null && this.samplesPerFrame !== null) {
|
|
301
|
-
const numberOfSamples = Math.round(mpegSize / this.frame_size) * this.samplesPerFrame;
|
|
302
|
-
this.metadata.setFormat('numberOfSamples', numberOfSamples);
|
|
303
|
-
if (format.sampleRate && !format.duration) {
|
|
304
|
-
const duration = numberOfSamples / format.sampleRate;
|
|
305
|
-
debug("Calculate CBR duration based on file size: %s", duration);
|
|
306
|
-
this.metadata.setFormat('duration', duration);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
257
|
+
const hasID3v1 = this.metadata.native.hasOwnProperty('ID3v1');
|
|
258
|
+
if (format.duration && this.tokenizer.fileInfo.size) {
|
|
259
|
+
const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);
|
|
260
|
+
if (format.codecProfile && format.codecProfile[0] === 'V') {
|
|
261
|
+
this.metadata.setFormat('bitrate', mpegSize * 8 / format.duration);
|
|
309
262
|
}
|
|
310
263
|
}
|
|
264
|
+
else if (this.tokenizer.fileInfo.size && format.codecProfile === 'CBR') {
|
|
265
|
+
const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);
|
|
266
|
+
const numberOfSamples = Math.round(mpegSize / this.frame_size) * this.samplesPerFrame;
|
|
267
|
+
this.metadata.setFormat('numberOfSamples', numberOfSamples);
|
|
268
|
+
const duration = numberOfSamples / format.sampleRate;
|
|
269
|
+
debug("Calculate CBR duration based on file size: %s", duration);
|
|
270
|
+
this.metadata.setFormat('duration', duration);
|
|
271
|
+
}
|
|
311
272
|
}
|
|
312
273
|
async sync() {
|
|
313
274
|
let gotFirstSync = false;
|
|
@@ -315,7 +276,7 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
315
276
|
let bo = 0;
|
|
316
277
|
this.syncPeek.len = await this.tokenizer.peekBuffer(this.syncPeek.buf, { length: maxPeekLen, mayBeLess: true });
|
|
317
278
|
if (this.syncPeek.len <= 163) {
|
|
318
|
-
throw new EndOfStreamError();
|
|
279
|
+
throw new core_1.EndOfStreamError();
|
|
319
280
|
}
|
|
320
281
|
while (true) {
|
|
321
282
|
if (gotFirstSync && (this.syncPeek.buf[bo] & 0xE0) === 0xE0) {
|
|
@@ -331,17 +292,21 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
331
292
|
this.syncFrameCount = this.frameCount;
|
|
332
293
|
return; // sync
|
|
333
294
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
if (
|
|
338
|
-
|
|
295
|
+
else {
|
|
296
|
+
gotFirstSync = false;
|
|
297
|
+
bo = this.syncPeek.buf.indexOf(MpegFrameHeader.SyncByte1, bo);
|
|
298
|
+
if (bo === -1) {
|
|
299
|
+
if (this.syncPeek.len < this.syncPeek.buf.length) {
|
|
300
|
+
throw new core_1.EndOfStreamError();
|
|
301
|
+
}
|
|
302
|
+
await this.tokenizer.ignore(this.syncPeek.len);
|
|
303
|
+
break; // continue with next buffer
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
++bo;
|
|
307
|
+
gotFirstSync = true;
|
|
339
308
|
}
|
|
340
|
-
await this.tokenizer.ignore(this.syncPeek.len);
|
|
341
|
-
break; // continue with next buffer
|
|
342
309
|
}
|
|
343
|
-
++bo;
|
|
344
|
-
gotFirstSync = true;
|
|
345
310
|
}
|
|
346
311
|
}
|
|
347
312
|
}
|
|
@@ -353,18 +318,15 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
353
318
|
if (this.frameCount === 0) {
|
|
354
319
|
this.mpegOffset = this.tokenizer.position - 1;
|
|
355
320
|
}
|
|
356
|
-
await this.tokenizer.peekBuffer(this.buf_frame_header
|
|
321
|
+
await this.tokenizer.peekBuffer(this.buf_frame_header, { offset: 1, length: 3 });
|
|
357
322
|
let header;
|
|
358
323
|
try {
|
|
359
324
|
header = FrameHeader.get(this.buf_frame_header, 0);
|
|
360
325
|
}
|
|
361
326
|
catch (err) {
|
|
362
327
|
await this.tokenizer.ignore(1);
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
return false; // sync
|
|
366
|
-
}
|
|
367
|
-
throw err;
|
|
328
|
+
this.metadata.addWarning('Parse error: ' + err.message);
|
|
329
|
+
return false; // sync
|
|
368
330
|
}
|
|
369
331
|
await this.tokenizer.ignore(3);
|
|
370
332
|
this.metadata.setFormat('container', header.container);
|
|
@@ -372,7 +334,7 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
372
334
|
this.metadata.setFormat('lossless', false);
|
|
373
335
|
this.metadata.setFormat('sampleRate', header.samplingRate);
|
|
374
336
|
this.frameCount++;
|
|
375
|
-
return header.version
|
|
337
|
+
return header.version >= 2 && header.layer === 0 ? this.parseAdts(header) : this.parseAudioFrameHeader(header);
|
|
376
338
|
}
|
|
377
339
|
/**
|
|
378
340
|
* @return {Promise<boolean>} true if parser should quit
|
|
@@ -385,26 +347,23 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
385
347
|
}
|
|
386
348
|
const slot_size = header.calcSlotSize();
|
|
387
349
|
if (slot_size === null) {
|
|
388
|
-
throw new
|
|
350
|
+
throw new Error('invalid slot_size');
|
|
389
351
|
}
|
|
390
352
|
const samples_per_frame = header.calcSamplesPerFrame();
|
|
391
353
|
debug(`samples_per_frame=${samples_per_frame}`);
|
|
392
354
|
const bps = samples_per_frame / 8.0;
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
}
|
|
355
|
+
const fsize = (bps * header.bitrate / header.samplingRate) +
|
|
356
|
+
((header.padding) ? slot_size : 0);
|
|
357
|
+
this.frame_size = Math.floor(fsize);
|
|
397
358
|
this.audioFrameHeader = header;
|
|
398
|
-
|
|
399
|
-
this.bitrates.push(header.bitrate);
|
|
400
|
-
}
|
|
359
|
+
this.bitrates.push(header.bitrate);
|
|
401
360
|
// xtra header only exists in first frame
|
|
402
361
|
if (this.frameCount === 1) {
|
|
403
362
|
this.offset = FrameHeader.len;
|
|
404
363
|
await this.skipSideInformation();
|
|
405
364
|
return false;
|
|
406
365
|
}
|
|
407
|
-
if (this.frameCount ===
|
|
366
|
+
if (this.frameCount === 3) {
|
|
408
367
|
// the stream is CBR if the first 3 frame bitrates are the same
|
|
409
368
|
if (this.areAllSame(this.bitrates)) {
|
|
410
369
|
// Actual calculation will be done in finalize
|
|
@@ -432,22 +391,22 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
432
391
|
await this.parseCrc();
|
|
433
392
|
return false;
|
|
434
393
|
}
|
|
435
|
-
|
|
436
|
-
|
|
394
|
+
else {
|
|
395
|
+
await this.skipSideInformation();
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
437
398
|
}
|
|
438
399
|
async parseAdts(header) {
|
|
439
|
-
const buf =
|
|
400
|
+
const buf = Buffer.alloc(3);
|
|
440
401
|
await this.tokenizer.readBuffer(buf);
|
|
441
402
|
header.frameLength += common.getBitAllignedNumber(buf, 0, 0, 11);
|
|
442
403
|
this.totalDataLength += header.frameLength;
|
|
443
404
|
this.samplesPerFrame = 1024;
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
debug(`frame-count=${this.frameCount}, size=${header.frameLength} bytes, bit-rate=${bitrate}`);
|
|
450
|
-
}
|
|
405
|
+
const framesPerSec = header.samplingRate / this.samplesPerFrame;
|
|
406
|
+
const bytesPerFrame = this.frameCount === 0 ? 0 : this.totalDataLength / this.frameCount;
|
|
407
|
+
const bitrate = 8 * bytesPerFrame * framesPerSec + 0.5;
|
|
408
|
+
this.metadata.setFormat('bitrate', bitrate);
|
|
409
|
+
debug(`frame-count=${this.frameCount}, size=${header.frameLength} bytes, bit-rate=${bitrate}`);
|
|
451
410
|
await this.tokenizer.ignore(header.frameLength > 7 ? header.frameLength - 7 : 1);
|
|
452
411
|
// Consume remaining header and frame data
|
|
453
412
|
if (this.frameCount === 3) {
|
|
@@ -465,57 +424,51 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
465
424
|
return false;
|
|
466
425
|
}
|
|
467
426
|
async parseCrc() {
|
|
468
|
-
await this.tokenizer.
|
|
469
|
-
this.offset +=
|
|
427
|
+
this.crc = await this.tokenizer.readNumber(Token.INT16_BE);
|
|
428
|
+
this.offset += 2;
|
|
470
429
|
return this.skipSideInformation();
|
|
471
430
|
}
|
|
472
431
|
async skipSideInformation() {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
await this.readXtraInfoHeader();
|
|
480
|
-
return;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
432
|
+
const sideinfo_length = this.audioFrameHeader.calculateSideInfoLength();
|
|
433
|
+
// side information
|
|
434
|
+
await this.tokenizer.readToken(new Token.Uint8ArrayType(sideinfo_length));
|
|
435
|
+
this.offset += sideinfo_length;
|
|
436
|
+
await this.readXtraInfoHeader();
|
|
437
|
+
return;
|
|
483
438
|
}
|
|
484
439
|
async readXtraInfoHeader() {
|
|
485
|
-
const headerTag = await this.tokenizer.readToken(InfoTagHeaderTag);
|
|
486
|
-
this.offset += InfoTagHeaderTag.len; // 12
|
|
440
|
+
const headerTag = await this.tokenizer.readToken(XingTag_1.InfoTagHeaderTag);
|
|
441
|
+
this.offset += XingTag_1.InfoTagHeaderTag.len; // 12
|
|
487
442
|
switch (headerTag) {
|
|
488
443
|
case 'Info':
|
|
489
444
|
this.metadata.setFormat('codecProfile', 'CBR');
|
|
490
445
|
return this.readXingInfoHeader();
|
|
491
|
-
case 'Xing':
|
|
446
|
+
case 'Xing':
|
|
492
447
|
const infoTag = await this.readXingInfoHeader();
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
this.metadata.setFormat('codecProfile', codecProfile);
|
|
496
|
-
}
|
|
448
|
+
const codecProfile = getVbrCodecProfile(infoTag.vbrScale);
|
|
449
|
+
this.metadata.setFormat('codecProfile', codecProfile);
|
|
497
450
|
return null;
|
|
498
|
-
}
|
|
499
451
|
case 'Xtra':
|
|
500
452
|
// ToDo: ???
|
|
501
453
|
break;
|
|
502
|
-
case 'LAME':
|
|
503
|
-
const version = await this.tokenizer.readToken(LameEncoderVersion);
|
|
504
|
-
if (this.frame_size
|
|
505
|
-
this.offset += LameEncoderVersion.len;
|
|
506
|
-
this.metadata.setFormat('tool',
|
|
454
|
+
case 'LAME':
|
|
455
|
+
const version = await this.tokenizer.readToken(XingTag_1.LameEncoderVersion);
|
|
456
|
+
if (this.frame_size >= this.offset + XingTag_1.LameEncoderVersion.len) {
|
|
457
|
+
this.offset += XingTag_1.LameEncoderVersion.len;
|
|
458
|
+
this.metadata.setFormat('tool', 'LAME ' + version);
|
|
507
459
|
await this.skipFrameData(this.frame_size - this.offset);
|
|
508
460
|
return null;
|
|
509
461
|
}
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
462
|
+
else {
|
|
463
|
+
this.metadata.addWarning('Corrupt LAME header');
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
513
466
|
// ToDo: ???
|
|
514
467
|
}
|
|
515
468
|
// ToDo: promise duration???
|
|
516
469
|
const frameDataLeft = this.frame_size - this.offset;
|
|
517
470
|
if (frameDataLeft < 0) {
|
|
518
|
-
this.metadata.addWarning(
|
|
471
|
+
this.metadata.addWarning('Frame ' + this.frameCount + 'corrupt: negative frameDataLeft');
|
|
519
472
|
}
|
|
520
473
|
else {
|
|
521
474
|
await this.skipFrameData(frameDataLeft);
|
|
@@ -528,10 +481,10 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
528
481
|
*/
|
|
529
482
|
async readXingInfoHeader() {
|
|
530
483
|
const offset = this.tokenizer.position;
|
|
531
|
-
const infoTag = await readXingHeader(this.tokenizer);
|
|
484
|
+
const infoTag = await (0, XingTag_1.readXingHeader)(this.tokenizer);
|
|
532
485
|
this.offset += this.tokenizer.position - offset;
|
|
533
486
|
if (infoTag.lame) {
|
|
534
|
-
this.metadata.setFormat('tool',
|
|
487
|
+
this.metadata.setFormat('tool', 'LAME ' + common.stripNulls(infoTag.lame.version));
|
|
535
488
|
if (infoTag.lame.extended) {
|
|
536
489
|
// this.metadata.setFormat('trackGain', infoTag.lame.extended.track_gain);
|
|
537
490
|
this.metadata.setFormat('trackPeakLevel', infoTag.lame.extended.track_peak);
|
|
@@ -544,7 +497,7 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
544
497
|
this.metadata.setFormat('duration', infoTag.lame.extended.music_length / 1000);
|
|
545
498
|
}
|
|
546
499
|
}
|
|
547
|
-
if (infoTag.streamSize
|
|
500
|
+
if (infoTag.streamSize) {
|
|
548
501
|
const duration = this.audioFrameHeader.calcDuration(infoTag.numFrames);
|
|
549
502
|
this.metadata.setFormat('duration', duration);
|
|
550
503
|
debug('Get duration from Xing header: %s', this.metadata.format.duration);
|
|
@@ -557,8 +510,9 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
557
510
|
}
|
|
558
511
|
async skipFrameData(frameDataLeft) {
|
|
559
512
|
if (frameDataLeft < 0)
|
|
560
|
-
throw new
|
|
513
|
+
throw new Error('frame-data-left cannot be negative');
|
|
561
514
|
await this.tokenizer.ignore(frameDataLeft);
|
|
515
|
+
this.countSkipFrameData += frameDataLeft;
|
|
562
516
|
}
|
|
563
517
|
areAllSame(array) {
|
|
564
518
|
const first = array[0];
|
|
@@ -567,3 +521,4 @@ export class MpegParser extends AbstractID3Parser {
|
|
|
567
521
|
});
|
|
568
522
|
}
|
|
569
523
|
}
|
|
524
|
+
exports.MpegParser = MpegParser;
|