hls-streamer 2.1.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +189 -190
  2. package/dist/Interfaces/HlsStreamer.d.ts +20 -0
  3. package/dist/Interfaces/HlsStreamer.d.ts.map +1 -1
  4. package/dist/Libs/FileLib.d.ts +22 -1
  5. package/dist/Libs/FileLib.d.ts.map +1 -1
  6. package/dist/Libs/FileLib.js +273 -108
  7. package/dist/Libs/FileLib.js.map +1 -1
  8. package/dist/Libs/FormatDetector.d.ts +8 -0
  9. package/dist/Libs/FormatDetector.d.ts.map +1 -0
  10. package/dist/Libs/FormatDetector.js +63 -0
  11. package/dist/Libs/FormatDetector.js.map +1 -0
  12. package/dist/Parsers/AacParser.d.ts +15 -0
  13. package/dist/Parsers/AacParser.d.ts.map +1 -0
  14. package/dist/Parsers/AacParser.js +246 -0
  15. package/dist/Parsers/AacParser.js.map +1 -0
  16. package/dist/Parsers/FlacParser.d.ts +13 -0
  17. package/dist/Parsers/FlacParser.d.ts.map +1 -0
  18. package/dist/Parsers/FlacParser.js +200 -0
  19. package/dist/Parsers/FlacParser.js.map +1 -0
  20. package/dist/Parsers/IAudioParser.d.ts +31 -0
  21. package/dist/Parsers/IAudioParser.d.ts.map +1 -0
  22. package/dist/Parsers/IAudioParser.js +2 -0
  23. package/dist/Parsers/IAudioParser.js.map +1 -0
  24. package/dist/Parsers/Mp3Parser.d.ts +19 -0
  25. package/dist/Parsers/Mp3Parser.d.ts.map +1 -0
  26. package/dist/Parsers/Mp3Parser.js +270 -0
  27. package/dist/Parsers/Mp3Parser.js.map +1 -0
  28. package/dist/Parsers/OggParser.d.ts +11 -0
  29. package/dist/Parsers/OggParser.d.ts.map +1 -0
  30. package/dist/Parsers/OggParser.js +160 -0
  31. package/dist/Parsers/OggParser.js.map +1 -0
  32. package/dist/Parsers/ParserFactory.d.ts +10 -0
  33. package/dist/Parsers/ParserFactory.d.ts.map +1 -0
  34. package/dist/Parsers/ParserFactory.js +43 -0
  35. package/dist/Parsers/ParserFactory.js.map +1 -0
  36. package/dist/Parsers/WavParser.d.ts +9 -0
  37. package/dist/Parsers/WavParser.d.ts.map +1 -0
  38. package/dist/Parsers/WavParser.js +135 -0
  39. package/dist/Parsers/WavParser.js.map +1 -0
  40. package/dist/cjs/Interfaces/HlsStreamer.d.ts +20 -0
  41. package/dist/cjs/Interfaces/HlsStreamer.d.ts.map +1 -1
  42. package/dist/cjs/Libs/FileLib.d.ts +22 -1
  43. package/dist/cjs/Libs/FileLib.d.ts.map +1 -1
  44. package/dist/cjs/Libs/FileLib.js +276 -108
  45. package/dist/cjs/Libs/FileLib.js.map +1 -1
  46. package/dist/cjs/Libs/FormatDetector.d.ts +8 -0
  47. package/dist/cjs/Libs/FormatDetector.d.ts.map +1 -0
  48. package/dist/cjs/Libs/FormatDetector.js +67 -0
  49. package/dist/cjs/Libs/FormatDetector.js.map +1 -0
  50. package/dist/cjs/Parsers/AacParser.d.ts +15 -0
  51. package/dist/cjs/Parsers/AacParser.d.ts.map +1 -0
  52. package/dist/cjs/Parsers/AacParser.js +250 -0
  53. package/dist/cjs/Parsers/AacParser.js.map +1 -0
  54. package/dist/cjs/Parsers/FlacParser.d.ts +13 -0
  55. package/dist/cjs/Parsers/FlacParser.d.ts.map +1 -0
  56. package/dist/cjs/Parsers/FlacParser.js +204 -0
  57. package/dist/cjs/Parsers/FlacParser.js.map +1 -0
  58. package/dist/cjs/Parsers/IAudioParser.d.ts +31 -0
  59. package/dist/cjs/Parsers/IAudioParser.d.ts.map +1 -0
  60. package/dist/cjs/Parsers/IAudioParser.js +3 -0
  61. package/dist/cjs/Parsers/IAudioParser.js.map +1 -0
  62. package/dist/cjs/Parsers/Mp3Parser.d.ts +19 -0
  63. package/dist/cjs/Parsers/Mp3Parser.d.ts.map +1 -0
  64. package/dist/cjs/Parsers/Mp3Parser.js +274 -0
  65. package/dist/cjs/Parsers/Mp3Parser.js.map +1 -0
  66. package/dist/cjs/Parsers/OggParser.d.ts +11 -0
  67. package/dist/cjs/Parsers/OggParser.d.ts.map +1 -0
  68. package/dist/cjs/Parsers/OggParser.js +164 -0
  69. package/dist/cjs/Parsers/OggParser.js.map +1 -0
  70. package/dist/cjs/Parsers/ParserFactory.d.ts +10 -0
  71. package/dist/cjs/Parsers/ParserFactory.d.ts.map +1 -0
  72. package/dist/cjs/Parsers/ParserFactory.js +47 -0
  73. package/dist/cjs/Parsers/ParserFactory.js.map +1 -0
  74. package/dist/cjs/Parsers/WavParser.d.ts +9 -0
  75. package/dist/cjs/Parsers/WavParser.d.ts.map +1 -0
  76. package/dist/cjs/Parsers/WavParser.js +139 -0
  77. package/dist/cjs/Parsers/WavParser.js.map +1 -0
  78. package/dist/cjs/errors/HlsStreamerErrors.d.ts +3 -0
  79. package/dist/cjs/errors/HlsStreamerErrors.d.ts.map +1 -1
  80. package/dist/cjs/errors/HlsStreamerErrors.js +8 -1
  81. package/dist/cjs/errors/HlsStreamerErrors.js.map +1 -1
  82. package/dist/cjs/index.d.ts +6 -7
  83. package/dist/cjs/index.d.ts.map +1 -1
  84. package/dist/cjs/index.js +161 -138
  85. package/dist/cjs/index.js.map +1 -1
  86. package/dist/errors/HlsStreamerErrors.d.ts +3 -0
  87. package/dist/errors/HlsStreamerErrors.d.ts.map +1 -1
  88. package/dist/errors/HlsStreamerErrors.js +6 -0
  89. package/dist/errors/HlsStreamerErrors.js.map +1 -1
  90. package/dist/index.d.ts +6 -7
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +162 -139
  93. package/dist/index.js.map +1 -1
  94. package/package.json +10 -3
@@ -1,3 +1,5 @@
1
+ import fs from 'node:fs';
2
+ import { ParserFactory } from '../Parsers/ParserFactory';
1
3
  export class FileLib {
2
4
  static getFileSizeInBytes(buffer) {
3
5
  if (Buffer.isBuffer(buffer)) {
@@ -7,122 +9,285 @@ export class FileLib {
7
9
  throw new Error("Input is not a buffer");
8
10
  }
9
11
  }
10
- static getMP3DurationFromBuffer(mp3Buffer) {
11
- return new Promise((resolve, reject) => {
12
- try {
13
- const duration = this.parseMP3Duration(mp3Buffer);
14
- resolve(duration);
15
- }
16
- catch (error) {
17
- reject(error);
18
- }
19
- });
12
+ static async getMP3DurationFromBuffer(mp3Buffer) {
13
+ const { duration } = this.analyzeMP3Buffer(mp3Buffer);
14
+ return duration;
20
15
  }
21
- static parseMP3Duration(buffer) {
16
+ static analyzeMP3Buffer(buffer, opts = {}) {
17
+ const warnings = [];
18
+ const size = opts.fileSize ?? buffer.length;
22
19
  if (buffer.length === 0) {
23
- return 0;
24
- }
25
- const bitrates = [
26
- [0, 0, 0, 0, 0],
27
- [32, 32, 32, 32, 8],
28
- [64, 48, 40, 48, 16],
29
- [96, 56, 48, 56, 24],
30
- [128, 64, 56, 64, 32],
31
- [160, 80, 64, 80, 40],
32
- [192, 96, 80, 96, 48],
33
- [224, 112, 96, 112, 56],
34
- [256, 128, 112, 128, 64],
35
- [288, 160, 128, 144, 80],
36
- [320, 192, 160, 160, 96],
37
- [352, 224, 192, 176, 112],
38
- [384, 256, 224, 192, 128],
39
- [416, 320, 256, 224, 144],
40
- [448, 384, 320, 256, 160]
41
- ];
42
- const sampleRates = [
43
- [44100, 22050, 11025],
44
- [48000, 24000, 12000],
45
- [32000, 16000, 8000]
46
- ];
47
- let offset = 0;
48
- let totalFrames = 0;
49
- let sampleRate = 0;
50
- let samplesPerFrame = 0;
51
- if (buffer.length > 10 && buffer.toString('ascii', 0, 3) === 'ID3') {
52
- const tagSize = ((buffer[6] & 0x7f) << 21) |
53
- ((buffer[7] & 0x7f) << 14) |
54
- ((buffer[8] & 0x7f) << 7) |
55
- (buffer[9] & 0x7f);
56
- offset = 10 + tagSize;
57
- }
58
- while (offset < buffer.length - 3) {
59
- if ((buffer[offset] === 0xFF) && ((buffer[offset + 1] & 0xE0) === 0xE0)) {
60
- if (offset + 3 >= buffer.length)
61
- break;
62
- const header = (buffer[offset] << 24) |
63
- (buffer[offset + 1] << 16) |
64
- (buffer[offset + 2] << 8) |
65
- buffer[offset + 3];
66
- const version = (header >> 19) & 0x3;
67
- const layer = (header >> 17) & 0x3;
68
- const bitrateIndex = (header >> 12) & 0xF;
69
- const sampleRateIndex = (header >> 10) & 0x3;
70
- const padding = (header >> 9) & 0x1;
71
- if (version === 1 || layer === 0 || bitrateIndex === 0 || bitrateIndex === 15 || sampleRateIndex === 3) {
72
- offset++;
73
- continue;
74
- }
75
- const versionIndex = version === 3 ? 0 : (version === 2 ? 1 : 2);
76
- const layerIndex = layer === 3 ? 0 : (layer === 2 ? 1 : 2);
77
- const bitrate = bitrates[bitrateIndex]?.[versionIndex === 0 ? layerIndex : (layerIndex === 0 ? 3 : 4)];
78
- const foundSampleRate = sampleRates[sampleRateIndex]?.[versionIndex];
79
- if (!bitrate || !foundSampleRate) {
80
- offset++;
81
- continue;
82
- }
83
- if (totalFrames === 0) {
84
- sampleRate = foundSampleRate;
85
- if (layer === 3) {
86
- samplesPerFrame = 384;
87
- }
88
- else if (layer === 2) {
89
- samplesPerFrame = 1152;
90
- }
91
- else {
92
- samplesPerFrame = version === 3 ? 1152 : 576;
93
- }
94
- }
95
- let frameLength;
96
- if (layer === 3) {
97
- frameLength = Math.floor((12 * bitrate * 1000 / foundSampleRate + padding) * 4);
98
- }
99
- else {
100
- frameLength = Math.floor(144 * bitrate * 1000 / foundSampleRate + padding);
101
- }
102
- if (frameLength <= 0) {
103
- offset++;
104
- continue;
105
- }
106
- totalFrames++;
107
- if (offset + frameLength > buffer.length) {
108
- const remainingBytes = buffer.length - offset;
109
- const avgFrameLength = offset > 0 ? offset / totalFrames : frameLength;
110
- const estimatedRemainingFrames = Math.floor(remainingBytes / avgFrameLength);
111
- totalFrames += estimatedRemainingFrames;
112
- break;
113
- }
114
- offset += frameLength;
20
+ return {
21
+ size,
22
+ duration: 0,
23
+ audioDataSize: 0,
24
+ frames: []
25
+ };
26
+ }
27
+ const offsets = this.getId3Offsets(buffer);
28
+ const frames = [];
29
+ const payloadSize = Math.max(0, offsets.audioEnd - offsets.startOffset);
30
+ let offset = offsets.startOffset;
31
+ let frameIndex = 0;
32
+ let sampleRate;
33
+ let totalDuration = 0;
34
+ let totalAudioBytes = 0;
35
+ while (offset + 4 <= offsets.audioEnd) {
36
+ if (!this.isFrameSync(buffer, offset)) {
37
+ offset++;
38
+ continue;
39
+ }
40
+ const header = buffer.readUInt32BE(offset);
41
+ const parsed = this.parseFrameHeader(header);
42
+ if (!parsed) {
43
+ offset++;
44
+ continue;
115
45
  }
116
- else {
46
+ const frameLength = this.calculateFrameLength(parsed);
47
+ if (frameLength <= 0) {
48
+ warnings.push(`Encountered zero-length frame at offset ${offset}`);
117
49
  offset++;
50
+ continue;
118
51
  }
52
+ if (offset + frameLength > buffer.length) {
53
+ warnings.push(`Truncated frame at offset ${offset}`);
54
+ break;
55
+ }
56
+ sampleRate = sampleRate ?? parsed.sampleRate;
57
+ const frameDuration = parsed.samplesPerFrame / parsed.sampleRate;
58
+ frames.push({
59
+ index: frameIndex,
60
+ offset,
61
+ length: frameLength,
62
+ duration: frameDuration,
63
+ samples: parsed.samplesPerFrame,
64
+ sampleRate: parsed.sampleRate,
65
+ bitrate: parsed.bitrate,
66
+ padding: parsed.padding
67
+ });
68
+ frameIndex++;
69
+ totalDuration += frameDuration;
70
+ totalAudioBytes += frameLength;
71
+ offset += frameLength;
119
72
  }
120
- if (totalFrames === 0 || !sampleRate || !samplesPerFrame) {
73
+ if (frames.length === 0) {
121
74
  const estimatedDuration = buffer.length / 16000;
122
- return Math.max(0.001, estimatedDuration);
75
+ warnings.push('Falling back to heuristic duration due to missing MP3 frames');
76
+ const metadata = {
77
+ size,
78
+ duration: Math.max(0.001, estimatedDuration),
79
+ audioDataSize: payloadSize,
80
+ frames: []
81
+ };
82
+ if (warnings.length) {
83
+ metadata.warnings = warnings;
84
+ }
85
+ return metadata;
86
+ }
87
+ const duration = totalDuration;
88
+ const averageBitrate = duration > 0 ? (totalAudioBytes * 8) / duration / 1000 : undefined;
89
+ const metadata = {
90
+ size,
91
+ duration,
92
+ audioDataSize: totalAudioBytes || payloadSize,
93
+ frames
94
+ };
95
+ if (sampleRate !== undefined) {
96
+ metadata.sampleRate = sampleRate;
97
+ }
98
+ if (averageBitrate !== undefined) {
99
+ metadata.averageBitrate = averageBitrate;
100
+ }
101
+ if (offsets.id3v2Size > 0) {
102
+ metadata.id3v2Size = offsets.id3v2Size;
103
+ }
104
+ if (offsets.id3v1Size > 0) {
105
+ metadata.id3v1Size = offsets.id3v1Size;
123
106
  }
124
- const duration = (totalFrames * samplesPerFrame) / sampleRate;
125
- return Math.max(0.001, duration);
107
+ if (warnings.length) {
108
+ metadata.warnings = warnings;
109
+ }
110
+ return metadata;
111
+ }
112
+ static async analyzeMP3File(filePath) {
113
+ const [buffer, stat] = await Promise.all([
114
+ fs.promises.readFile(filePath),
115
+ fs.promises.stat(filePath)
116
+ ]);
117
+ return this.analyzeMP3Buffer(buffer, { fileSize: stat.size });
118
+ }
119
+ static async analyzeAudioFile(filePath, format) {
120
+ const [buffer, stat] = await Promise.all([
121
+ fs.promises.readFile(filePath),
122
+ fs.promises.stat(filePath)
123
+ ]);
124
+ const opts = {
125
+ fileSize: stat.size,
126
+ filePath
127
+ };
128
+ if (format !== undefined) {
129
+ opts.format = format;
130
+ }
131
+ return this.analyzeAudioBuffer(buffer, opts);
132
+ }
133
+ static analyzeAudioBuffer(buffer, opts = {}) {
134
+ let parser;
135
+ if (opts.format) {
136
+ parser = ParserFactory.getParser(opts.format);
137
+ if (!parser) {
138
+ throw new Error(`Unsupported format: ${opts.format}`);
139
+ }
140
+ }
141
+ if (!parser && opts.filePath) {
142
+ parser = ParserFactory.getParserByExtension(opts.filePath);
143
+ }
144
+ if (!parser) {
145
+ parser = ParserFactory.detectParser(buffer);
146
+ }
147
+ if (!parser) {
148
+ throw new Error('Could not detect audio format');
149
+ }
150
+ const analyzeOpts = opts.fileSize !== undefined ? { fileSize: opts.fileSize } : {};
151
+ return parser.analyze(buffer, analyzeOpts);
152
+ }
153
+ static calculateFrameLength(frame) {
154
+ if (frame.layer === 1) {
155
+ return Math.floor(((12 * frame.bitrate * 1000) / frame.sampleRate + frame.padding) * 4);
156
+ }
157
+ const multiplier = frame.layer === 3 && frame.version !== 1 ? 72 : 144;
158
+ return Math.floor((multiplier * frame.bitrate * 1000) / frame.sampleRate + frame.padding);
159
+ }
160
+ static getId3Offsets(buffer) {
161
+ let startOffset = 0;
162
+ let id3v2Size = 0;
163
+ if (buffer.length >= 10 && buffer.toString('ascii', 0, 3) === 'ID3') {
164
+ const sizeBytes = buffer.subarray(6, 10);
165
+ id3v2Size = this.syncSafeInteger(sizeBytes);
166
+ startOffset = Math.min(buffer.length, 10 + id3v2Size);
167
+ }
168
+ let id3v1Size = 0;
169
+ let audioEnd = buffer.length;
170
+ if (buffer.length >= 128) {
171
+ const tagOffset = buffer.length - 128;
172
+ if (buffer.toString('ascii', tagOffset, tagOffset + 3) === 'TAG') {
173
+ id3v1Size = 128;
174
+ audioEnd = tagOffset;
175
+ }
176
+ }
177
+ return {
178
+ startOffset,
179
+ id3v2Size,
180
+ audioEnd,
181
+ id3v1Size
182
+ };
183
+ }
184
+ static syncSafeInteger(bytes) {
185
+ return ((bytes[0] & 0x7f) << 21) |
186
+ ((bytes[1] & 0x7f) << 14) |
187
+ ((bytes[2] & 0x7f) << 7) |
188
+ (bytes[3] & 0x7f);
189
+ }
190
+ static isFrameSync(buffer, offset) {
191
+ const byte1 = buffer[offset];
192
+ const byte2 = buffer[offset + 1];
193
+ if (byte1 === undefined || byte2 === undefined) {
194
+ return false;
195
+ }
196
+ return byte1 === 0xff && (byte2 & 0xe0) === 0xe0;
197
+ }
198
+ static parseFrameHeader(header) {
199
+ const versionBits = (header >> 19) & 0x3;
200
+ const layerBits = (header >> 17) & 0x3;
201
+ const bitrateIndex = (header >> 12) & 0xf;
202
+ const sampleRateIndex = (header >> 10) & 0x3;
203
+ const padding = ((header >> 9) & 0x1);
204
+ const version = this.decodeVersion(versionBits);
205
+ const layer = this.decodeLayer(layerBits);
206
+ if (!version || !layer) {
207
+ return null;
208
+ }
209
+ if (bitrateIndex === 0 || bitrateIndex === 15 || sampleRateIndex === 3) {
210
+ return null;
211
+ }
212
+ const bitrate = this.BITRATE_INDEX[version][layer][bitrateIndex];
213
+ const sampleRate = this.SAMPLE_RATE_INDEX[version][sampleRateIndex];
214
+ if (!bitrate || !sampleRate) {
215
+ return null;
216
+ }
217
+ const samplesPerFrame = this.getSamplesPerFrame(version, layer);
218
+ return {
219
+ version,
220
+ layer,
221
+ bitrate,
222
+ sampleRate,
223
+ padding,
224
+ samplesPerFrame
225
+ };
226
+ }
227
+ static decodeVersion(bits) {
228
+ switch (bits) {
229
+ case 0b11:
230
+ return 1;
231
+ case 0b10:
232
+ return 2;
233
+ case 0b00:
234
+ return 25;
235
+ default:
236
+ return null;
237
+ }
238
+ }
239
+ static decodeLayer(bits) {
240
+ switch (bits) {
241
+ case 0b11:
242
+ return 1;
243
+ case 0b10:
244
+ return 2;
245
+ case 0b01:
246
+ return 3;
247
+ default:
248
+ return null;
249
+ }
250
+ }
251
+ static getSamplesPerFrame(version, layer) {
252
+ if (layer === 1) {
253
+ return 384;
254
+ }
255
+ if (layer === 2) {
256
+ return 1152;
257
+ }
258
+ return version === 1 ? 1152 : 576;
126
259
  }
127
260
  }
261
+ Object.defineProperty(FileLib, "BITRATE_INDEX", {
262
+ enumerable: true,
263
+ configurable: true,
264
+ writable: true,
265
+ value: {
266
+ 1: {
267
+ 1: [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448],
268
+ 2: [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384],
269
+ 3: [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320]
270
+ },
271
+ 2: {
272
+ 1: [0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256],
273
+ 2: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
274
+ 3: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160]
275
+ },
276
+ 25: {
277
+ 1: [0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256],
278
+ 2: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
279
+ 3: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160]
280
+ }
281
+ }
282
+ });
283
+ Object.defineProperty(FileLib, "SAMPLE_RATE_INDEX", {
284
+ enumerable: true,
285
+ configurable: true,
286
+ writable: true,
287
+ value: {
288
+ 1: [44100, 48000, 32000],
289
+ 2: [22050, 24000, 16000],
290
+ 25: [11025, 12000, 8000]
291
+ }
292
+ });
128
293
  //# sourceMappingURL=FileLib.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileLib.js","sourceRoot":"","sources":["../../src/Libs/FileLib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileLib.js","sourceRoot":"","sources":["../../src/Libs/FileLib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { AudioFormat } from '../Parsers/IAudioParser';
2
+ export declare class FormatDetector {
3
+ static detectFormat(buffer: Buffer): AudioFormat | null;
4
+ static detectFormatFromExtension(filePath: string): AudioFormat | null;
5
+ static getSupportedExtensions(): string[];
6
+ static isSupportedExtension(filePath: string): boolean;
7
+ }
8
+ //# sourceMappingURL=FormatDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormatDetector.d.ts","sourceRoot":"","sources":["../../src/Libs/FormatDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,qBAAa,cAAc;IAMzB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAoDvD,MAAM,CAAC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA0BtE,MAAM,CAAC,sBAAsB,IAAI,MAAM,EAAE;IAOzC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAIvD"}
@@ -0,0 +1,63 @@
1
+ export class FormatDetector {
2
+ static detectFormat(buffer) {
3
+ if (buffer.length < 4) {
4
+ return null;
5
+ }
6
+ if (buffer.toString('ascii', 0, 3) === 'ID3') {
7
+ return 'mp3';
8
+ }
9
+ if (buffer.length >= 2 && buffer[0] === 0xff && (buffer[1] & 0xe0) === 0xe0) {
10
+ return 'mp3';
11
+ }
12
+ if (buffer.toString('ascii', 0, 4) === 'fLaC') {
13
+ return 'flac';
14
+ }
15
+ if (buffer.toString('ascii', 0, 4) === 'OggS') {
16
+ return 'ogg';
17
+ }
18
+ if (buffer.length >= 12 &&
19
+ buffer.toString('ascii', 0, 4) === 'RIFF' &&
20
+ buffer.toString('ascii', 8, 12) === 'WAVE') {
21
+ return 'wav';
22
+ }
23
+ if (buffer.length >= 12 && buffer.toString('ascii', 4, 8) === 'ftyp') {
24
+ const brand = buffer.toString('ascii', 8, 12);
25
+ if (brand === 'M4A ' || brand === 'M4B ' || brand === 'mp42' || brand === 'isom') {
26
+ return 'm4a';
27
+ }
28
+ }
29
+ if (buffer.length >= 2 && buffer[0] === 0xff && (buffer[1] & 0xf6) === 0xf0) {
30
+ return 'aac';
31
+ }
32
+ return null;
33
+ }
34
+ static detectFormatFromExtension(filePath) {
35
+ const ext = filePath.toLowerCase().split('.').pop();
36
+ switch (ext) {
37
+ case 'mp3':
38
+ return 'mp3';
39
+ case 'aac':
40
+ return 'aac';
41
+ case 'm4a':
42
+ case 'm4b':
43
+ return 'm4a';
44
+ case 'ogg':
45
+ case 'oga':
46
+ return 'ogg';
47
+ case 'flac':
48
+ return 'flac';
49
+ case 'wav':
50
+ return 'wav';
51
+ default:
52
+ return null;
53
+ }
54
+ }
55
+ static getSupportedExtensions() {
56
+ return ['.mp3', '.aac', '.m4a', '.m4b', '.ogg', '.oga', '.flac', '.wav'];
57
+ }
58
+ static isSupportedExtension(filePath) {
59
+ const ext = '.' + filePath.toLowerCase().split('.').pop();
60
+ return this.getSupportedExtensions().includes(ext);
61
+ }
62
+ }
63
+ //# sourceMappingURL=FormatDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FormatDetector.js","sourceRoot":"","sources":["../../src/Libs/FormatDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { IAudioParser, AudioFileInfo, AudioFormat } from './IAudioParser';
2
+ export declare class AacParser implements IAudioParser {
3
+ private static readonly SAMPLE_RATES;
4
+ getFormat(): AudioFormat;
5
+ canParse(buffer: Buffer): boolean;
6
+ analyze(buffer: Buffer, opts?: {
7
+ fileSize?: number;
8
+ }): AudioFileInfo;
9
+ private analyzeAdts;
10
+ private analyzeM4a;
11
+ private parseAdtsHeader;
12
+ private parseBoxes;
13
+ private findBoxInData;
14
+ }
15
+ //# sourceMappingURL=AacParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AacParser.d.ts","sourceRoot":"","sources":["../../src/Parsers/AacParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAkB,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAM1F,qBAAa,SAAU,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAGlC;IAEF,SAAS,IAAI,WAAW;IAKxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAkBjC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;IAWxE,OAAO,CAAC,WAAW;IA8FnB,OAAO,CAAC,UAAU;IAuGlB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,aAAa;CAwBtB"}