nodejs-audio-visualizer 2.1.4 → 4.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.
- package/README.md +17 -6
- package/dist/audio.d.ts +1 -2
- package/dist/audio.js +40 -30
- package/dist/audio.js.map +1 -1
- package/dist/config.d.ts +19 -5
- package/dist/config.js +103 -11
- package/dist/config.js.map +1 -1
- package/dist/dsp.d.ts +15 -1
- package/dist/dsp.js +58 -7
- package/dist/dsp.js.map +1 -1
- package/dist/image.d.ts +28 -2
- package/dist/image.js +255 -18
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +12 -1
- package/dist/index.js +63 -55
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/src/audio.ts +35 -33
- package/src/config.ts +122 -12
- package/src/dsp.ts +76 -7
- package/src/image.ts +347 -22
- package/src/index.ts +100 -31
- package/src/tests/audio.test.ts +5 -14
- package/src/tests/config.test.ts +6 -8
- package/src/tests/dsp.test.ts +3 -4
- package/src/tests/image.test.ts +104 -11
- package/src/tests/index.test.ts +1 -1
- package/src/typings.d.ts +7 -0
- package/dist/spectrum.d.ts +0 -1
- package/dist/spectrum.js +0 -72
- package/dist/spectrum.js.map +0 -1
- package/src/spectrum.ts +0 -91
- package/src/tests/snapshots/frameSnapshotSpectrumDown.json +0 -1
- package/src/tests/snapshots/frameSnapshotSpectrumUp.json +0 -1
- package/src/tests/snapshots/frameSnapshotSpectrumUpOpacity50.json +0 -1
package/dist/image.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -86,6 +97,112 @@ exports.drawRect = function (_a) {
|
|
|
86
97
|
}
|
|
87
98
|
}
|
|
88
99
|
};
|
|
100
|
+
var buildQuadEdgeTable = function (points) {
|
|
101
|
+
var edges = [];
|
|
102
|
+
for (var i = 0; i < points.length; i++) {
|
|
103
|
+
var p1 = points[i];
|
|
104
|
+
var p2 = points[(i + 1) % points.length];
|
|
105
|
+
if (p1.y === p2.y)
|
|
106
|
+
continue; // Skip horizontal edges
|
|
107
|
+
var yMin = Math.min(p1.y, p2.y);
|
|
108
|
+
var yMax = Math.max(p1.y, p2.y);
|
|
109
|
+
var x = p1.y < p2.y ? p1.x : p2.x;
|
|
110
|
+
var dx = (p2.x - p1.x) / (p2.y - p1.y);
|
|
111
|
+
edges.push({ yMin: yMin, yMax: yMax, x: x, dx: dx });
|
|
112
|
+
}
|
|
113
|
+
return edges.sort(function (a, b) { return a.yMin - b.yMin; });
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Fills a quadrilateral (4-sided polygon) using scan-line algorithm
|
|
117
|
+
* Only the outer edges are anti-aliased
|
|
118
|
+
*/
|
|
119
|
+
exports.fillRect = function (_a) {
|
|
120
|
+
var imageDstBuffer = _a.imageDstBuffer, points = _a.points, color = _a.color, opacity = _a.opacity;
|
|
121
|
+
// Build edge table from all 4 vertices
|
|
122
|
+
var edgeTable = buildQuadEdgeTable(points);
|
|
123
|
+
if (edgeTable.length === 0)
|
|
124
|
+
return;
|
|
125
|
+
// Find the bounding box
|
|
126
|
+
var yMin = Math.min.apply(Math, points.map(function (p) { return p.y; }));
|
|
127
|
+
var yMax = Math.max.apply(Math, points.map(function (p) { return p.y; }));
|
|
128
|
+
// Active Edge Table for scan line algorithm
|
|
129
|
+
var activeEdges = [];
|
|
130
|
+
// Scan line algorithm: process each horizontal line
|
|
131
|
+
for (var y = Math.floor(yMin); y <= Math.ceil(yMax); y++) {
|
|
132
|
+
// Add edges that start at this scanline to AET
|
|
133
|
+
for (var _i = 0, edgeTable_1 = edgeTable; _i < edgeTable_1.length; _i++) {
|
|
134
|
+
var edge = edgeTable_1[_i];
|
|
135
|
+
if (Math.floor(edge.yMin) === y) {
|
|
136
|
+
activeEdges.push(__assign({}, edge));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Remove edges that end at this scanline from AET
|
|
140
|
+
for (var i = activeEdges.length - 1; i >= 0; i--) {
|
|
141
|
+
if (Math.ceil(activeEdges[i].yMax) <= y) {
|
|
142
|
+
activeEdges.splice(i, 1);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Sort active edges by x coordinate
|
|
146
|
+
activeEdges.sort(function (a, b) { return a.x - b.x; });
|
|
147
|
+
// Fill pixels between pairs of intersections
|
|
148
|
+
for (var i = 0; i < activeEdges.length; i += 2) {
|
|
149
|
+
if (i + 1 < activeEdges.length) {
|
|
150
|
+
var xStart = activeEdges[i].x;
|
|
151
|
+
var xEnd = activeEdges[i + 1].x;
|
|
152
|
+
// Anti-aliased rendering with sub-pixel precision
|
|
153
|
+
var xStartFloor = Math.floor(xStart);
|
|
154
|
+
var xEndCeil = Math.ceil(xEnd);
|
|
155
|
+
for (var x = xStartFloor; x < xEndCeil; x++) {
|
|
156
|
+
var pixelIndex = imageDstBuffer.shiftPos + y * imageDstBuffer.rowBytes + x * 3;
|
|
157
|
+
// Calculate coverage for anti-aliasing
|
|
158
|
+
var coverage = 1.0;
|
|
159
|
+
if (x === xStartFloor) {
|
|
160
|
+
// Left edge pixel - calculate fractional coverage
|
|
161
|
+
coverage = Math.min(1.0, 1.0 - (xStart - xStartFloor));
|
|
162
|
+
}
|
|
163
|
+
else if (x === xEndCeil - 1) {
|
|
164
|
+
// Right edge pixel - calculate fractional coverage
|
|
165
|
+
coverage = Math.min(1.0, xEnd - Math.floor(xEnd));
|
|
166
|
+
}
|
|
167
|
+
// Apply coverage to opacity for smooth edges
|
|
168
|
+
var effectiveOpacity = opacity * coverage;
|
|
169
|
+
var pixelColor = getRectPixelColor({
|
|
170
|
+
imageDstBuffer: imageDstBuffer,
|
|
171
|
+
pixelIndex: pixelIndex,
|
|
172
|
+
color: color,
|
|
173
|
+
opacity: effectiveOpacity,
|
|
174
|
+
});
|
|
175
|
+
imageDstBuffer.data[pixelIndex] = pixelColor.blue;
|
|
176
|
+
imageDstBuffer.data[pixelIndex + 1] = pixelColor.green;
|
|
177
|
+
imageDstBuffer.data[pixelIndex + 2] = pixelColor.red;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Update x coordinates for next scanline (x' = x + dx)
|
|
182
|
+
for (var _b = 0, activeEdges_1 = activeEdges; _b < activeEdges_1.length; _b++) {
|
|
183
|
+
var edge = activeEdges_1[_b];
|
|
184
|
+
edge.x += edge.dx;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
var getRectY = function (rotation, top, height, rectHeight) {
|
|
189
|
+
switch (rotation) {
|
|
190
|
+
case 'up':
|
|
191
|
+
return top + height - rectHeight;
|
|
192
|
+
case 'mirror':
|
|
193
|
+
return top + Math.trunc((height - rectHeight) / 2);
|
|
194
|
+
default:
|
|
195
|
+
return top;
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
var minRectHeight = 2;
|
|
199
|
+
var getRectHeight = function (height, spectrumValue) {
|
|
200
|
+
var rectHeight = Math.trunc(height * spectrumValue);
|
|
201
|
+
if (rectHeight < minRectHeight) {
|
|
202
|
+
return minRectHeight;
|
|
203
|
+
}
|
|
204
|
+
return rectHeight;
|
|
205
|
+
};
|
|
89
206
|
var drawSpectrum = function (_a) {
|
|
90
207
|
var imageDstBuffer = _a.imageDstBuffer, spectrum = _a.spectrum, size = _a.size, position = _a.position, rotation = _a.rotation, margin = _a.margin, color = _a.color, opacity = _a.opacity;
|
|
91
208
|
var busWidth = Math.trunc(size.width / spectrum.length);
|
|
@@ -98,8 +215,8 @@ var drawSpectrum = function (_a) {
|
|
|
98
215
|
throw new Error('Spectrum values must be in range from 0 to 1');
|
|
99
216
|
}
|
|
100
217
|
var rectX = left + busWidth * spectrumX;
|
|
101
|
-
var rectHeight =
|
|
102
|
-
var rectY = (rotation
|
|
218
|
+
var rectHeight = getRectHeight(height, spectrumValue);
|
|
219
|
+
var rectY = getRectY(rotation, top, height, rectHeight);
|
|
103
220
|
exports.drawRect({
|
|
104
221
|
imageDstBuffer: imageDstBuffer,
|
|
105
222
|
position: { x: rectX + margin, y: rectY },
|
|
@@ -109,22 +226,142 @@ var drawSpectrum = function (_a) {
|
|
|
109
226
|
});
|
|
110
227
|
}
|
|
111
228
|
};
|
|
112
|
-
|
|
113
|
-
var
|
|
114
|
-
var
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
});
|
|
127
|
-
|
|
229
|
+
var calcCirclePoint = function (angleRadians, radius) {
|
|
230
|
+
var circleX = radius * Math.cos(angleRadians);
|
|
231
|
+
var circleY = radius * Math.sin(angleRadians);
|
|
232
|
+
return { x: circleX, y: circleY };
|
|
233
|
+
};
|
|
234
|
+
var lerp = function (start, end, t) {
|
|
235
|
+
return start + (end - start) * t;
|
|
236
|
+
};
|
|
237
|
+
var drawPolarSpectrum = function (_a) {
|
|
238
|
+
var imageDstBuffer = _a.imageDstBuffer, spectrum = _a.spectrum, centerX = _a.centerX, centerY = _a.centerY, innerRadius = _a.innerRadius, maxBarLength = _a.maxBarLength, barWidth = _a.barWidth, color = _a.color, opacity = _a.opacity;
|
|
239
|
+
var angleStep = (2 * Math.PI) / spectrum.length;
|
|
240
|
+
var innerLength = innerRadius * 2 * Math.PI;
|
|
241
|
+
var radiansPerPixel = 2 * Math.PI / innerLength;
|
|
242
|
+
var barWidthInRadians = radiansPerPixel * barWidth;
|
|
243
|
+
var spectrumAverage = spectrum.reduce(function (a, b) { return a + b; }, 0) / spectrum.length;
|
|
244
|
+
var scaleFactor = lerp(0.75, 1, spectrumAverage);
|
|
245
|
+
var scaledMaxOuterRadius = (innerRadius + maxBarLength) * scaleFactor;
|
|
246
|
+
var scaledInnerRadius = innerRadius * scaleFactor;
|
|
247
|
+
for (var i = 0; i < spectrum.length; i++) {
|
|
248
|
+
var currentSpectrumValue = spectrum[i] || 0;
|
|
249
|
+
var busRadius = lerp(scaledInnerRadius, scaledMaxOuterRadius, currentSpectrumValue);
|
|
250
|
+
var angle = i * angleStep;
|
|
251
|
+
var angleRadiansStart = angle;
|
|
252
|
+
var angleRadiansEnd = angle + barWidthInRadians;
|
|
253
|
+
var point1 = calcCirclePoint(angleRadiansStart, scaledInnerRadius);
|
|
254
|
+
var point2 = calcCirclePoint(angleRadiansStart, busRadius);
|
|
255
|
+
var point3 = calcCirclePoint(angleRadiansEnd, scaledInnerRadius);
|
|
256
|
+
var point4 = calcCirclePoint(angleRadiansEnd, busRadius);
|
|
257
|
+
exports.fillRect({
|
|
258
|
+
imageDstBuffer: imageDstBuffer,
|
|
259
|
+
points: [
|
|
260
|
+
{ x: centerX + Math.round(point1.x), y: centerY + Math.round(point1.y) },
|
|
261
|
+
{ x: centerX + Math.round(point2.x), y: centerY + Math.round(point2.y) },
|
|
262
|
+
{ x: centerX + Math.round(point4.x), y: centerY + Math.round(point4.y) },
|
|
263
|
+
{ x: centerX + Math.round(point3.x), y: centerY + Math.round(point3.y) },
|
|
264
|
+
],
|
|
265
|
+
color: color,
|
|
266
|
+
opacity: opacity,
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
exports.createSpectrumVisualizerFrameGenerator = function () {
|
|
271
|
+
var prevSpectrum = null;
|
|
272
|
+
return function (_a) {
|
|
273
|
+
var backgroundImageBuffer = _a.backgroundImageBuffer, spectrum = _a.spectrum, size = _a.size, position = _a.position, rotation = _a.rotation, margin = _a.margin, color = _a.color, opacity = _a.opacity, spectrumEffect = _a.spectrumEffect;
|
|
274
|
+
var imageDstBuffer = Object.assign({}, backgroundImageBuffer);
|
|
275
|
+
imageDstBuffer.data = Buffer.from(backgroundImageBuffer.data);
|
|
276
|
+
var rgbSpectrumColor = (typeof color === 'string') ? hexToRgb(color) : color;
|
|
277
|
+
if (spectrumEffect === 'volume') {
|
|
278
|
+
drawSpectrum({
|
|
279
|
+
imageDstBuffer: imageDstBuffer,
|
|
280
|
+
spectrum: spectrum,
|
|
281
|
+
size: size,
|
|
282
|
+
position: { x: position.x + 2, y: position.y + 2 },
|
|
283
|
+
rotation: rotation,
|
|
284
|
+
margin: margin,
|
|
285
|
+
color: rgbSpectrumColor,
|
|
286
|
+
opacity: opacity * 0.5,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (spectrumEffect === 'smooth' && prevSpectrum) {
|
|
290
|
+
drawSpectrum({
|
|
291
|
+
imageDstBuffer: imageDstBuffer,
|
|
292
|
+
spectrum: prevSpectrum,
|
|
293
|
+
size: size,
|
|
294
|
+
position: position,
|
|
295
|
+
rotation: rotation,
|
|
296
|
+
margin: margin,
|
|
297
|
+
color: rgbSpectrumColor,
|
|
298
|
+
opacity: opacity * 0.3,
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
drawSpectrum({
|
|
302
|
+
imageDstBuffer: imageDstBuffer,
|
|
303
|
+
spectrum: spectrum,
|
|
304
|
+
size: size,
|
|
305
|
+
position: position,
|
|
306
|
+
rotation: rotation,
|
|
307
|
+
margin: margin,
|
|
308
|
+
color: rgbSpectrumColor,
|
|
309
|
+
opacity: opacity,
|
|
310
|
+
});
|
|
311
|
+
prevSpectrum = spectrum;
|
|
312
|
+
return imageDstBuffer;
|
|
313
|
+
};
|
|
314
|
+
};
|
|
315
|
+
exports.createPolarVisualizerFrameGenerator = function () {
|
|
316
|
+
var prevSpectrum = null;
|
|
317
|
+
return function (_a) {
|
|
318
|
+
var backgroundImageBuffer = _a.backgroundImageBuffer, spectrum = _a.spectrum, centerX = _a.centerX, centerY = _a.centerY, innerRadius = _a.innerRadius, maxBarLength = _a.maxBarLength, barWidth = _a.barWidth, color = _a.color, opacity = _a.opacity, spectrumEffect = _a.spectrumEffect;
|
|
319
|
+
var imageDstBuffer = Object.assign({}, backgroundImageBuffer);
|
|
320
|
+
imageDstBuffer.data = Buffer.from(backgroundImageBuffer.data);
|
|
321
|
+
var rgbSpectrumColor = (typeof color === 'string') ? hexToRgb(color) : color;
|
|
322
|
+
// Draw shadow/volume effect
|
|
323
|
+
if (spectrumEffect === 'volume') {
|
|
324
|
+
drawPolarSpectrum({
|
|
325
|
+
imageDstBuffer: imageDstBuffer,
|
|
326
|
+
spectrum: spectrum,
|
|
327
|
+
centerX: centerX + 2,
|
|
328
|
+
centerY: centerY + 2,
|
|
329
|
+
innerRadius: innerRadius,
|
|
330
|
+
maxBarLength: maxBarLength,
|
|
331
|
+
barWidth: barWidth,
|
|
332
|
+
color: rgbSpectrumColor,
|
|
333
|
+
opacity: opacity * 0.5,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
// Draw smooth/trail effect with previous frame
|
|
337
|
+
if (spectrumEffect === 'smooth' && prevSpectrum) {
|
|
338
|
+
drawPolarSpectrum({
|
|
339
|
+
imageDstBuffer: imageDstBuffer,
|
|
340
|
+
spectrum: prevSpectrum,
|
|
341
|
+
centerX: centerX,
|
|
342
|
+
centerY: centerY,
|
|
343
|
+
innerRadius: innerRadius,
|
|
344
|
+
maxBarLength: maxBarLength,
|
|
345
|
+
barWidth: barWidth,
|
|
346
|
+
color: rgbSpectrumColor,
|
|
347
|
+
opacity: opacity * 0.3,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
// Draw main spectrum
|
|
351
|
+
drawPolarSpectrum({
|
|
352
|
+
imageDstBuffer: imageDstBuffer,
|
|
353
|
+
spectrum: spectrum,
|
|
354
|
+
centerX: centerX,
|
|
355
|
+
centerY: centerY,
|
|
356
|
+
innerRadius: innerRadius,
|
|
357
|
+
maxBarLength: maxBarLength,
|
|
358
|
+
barWidth: barWidth,
|
|
359
|
+
color: rgbSpectrumColor,
|
|
360
|
+
opacity: opacity,
|
|
361
|
+
});
|
|
362
|
+
prevSpectrum = spectrum;
|
|
363
|
+
return imageDstBuffer;
|
|
364
|
+
};
|
|
128
365
|
};
|
|
129
366
|
exports.convertToBmp = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
367
|
return __generator(this, function (_a) {
|
package/dist/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,iCAA4C;AAE5C,8CAAwB;AAwBX,QAAA,SAAS,GAAE,UAAC,MAAc,EAAE,aAAqB,EAAE,MAAc;IAC5E,OAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,MAAM,GAAG,aAAa,CAAC;AAAjE,CAAiE,CAAC;AAEvD,QAAA,SAAS,GAAG,UAAC,EAIV;QAHd,gBAAK,EACL,8BAAY,EACZ,oCAAe;IAEf,OAAO;QACL,GAAG,EAAE,iBAAS,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,CAAC;QAC5D,KAAK,EAAE,iBAAS,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,eAAe,CAAC,KAAK,CAAC;QAClE,IAAI,EAAE,iBAAS,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC;KAChE,CAAC;AACJ,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,MAK1B;IAEG,IAAA,sCAAc,EACd,8BAAU,EACV,oBAAK,EACL,wBAAO,CACE;IACX,IAAI,OAAO,KAAK,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC;KACd;IAED,IAAM,oBAAoB,GAAU;QAClC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QACrC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAC1C,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;KACzC,CAAC;IACF,IAAM,WAAW,GAAG,iBAAS,CAAC;QAC5B,KAAK,OAAA;QACL,YAAY,EAAE,OAAO;QACrB,eAAe,EAAE,oBAAoB;KACtC,CAAC,CAAC;IACH,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAUW,QAAA,QAAQ,GAAG,UAAC,EAMT;QALd,kCAAc,EACd,sBAAQ,EACR,cAAI,EACJ,gBAAK,EACL,oBAAO;IAEP,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtE,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrE,IAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,GAAG,KAAK,GAAG,cAAc,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;YACzF,IAAM,UAAU,GAAG,iBAAiB,CAAC;gBACnC,cAAc,gBAAA;gBACd,UAAU,YAAA;gBACV,KAAK,OAAA;gBACL,OAAO,SAAA;aACR,CAAC,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;YAClD,cAAc,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;YACvD,cAAc,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;SACtD;KACF;AACH,CAAC,CAAC;AAaF,IAAM,YAAY,GAAG,UAAC,EASF;QARlB,kCAAc,EACd,sBAAQ,EACR,cAAI,EACJ,sBAAQ,EACR,sBAAQ,EACR,kBAAM,EACN,gBAAK,EACL,oBAAO;IAEP,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnC,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;QAChE,IAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE;YAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;QAED,IAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;QAC1C,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;QACtD,IAAM,KAAK,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,gBAAQ,CAAC;YACP,cAAc,gBAAA;YACd,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE;YACzC,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE;YAC1D,KAAK,OAAA;YACL,OAAO,SAAA;SACR,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAaW,QAAA,qBAAqB,GAAG,UAAC,EAST;QAR3B,gDAAqB,EACrB,sBAAQ,EACR,cAAI,EACJ,sBAAQ,EACR,sBAAQ,EACR,kBAAM,EACN,gBAAK,EACL,oBAAO;IAEP,IAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAChE,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAM,gBAAgB,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,YAAY,CAAC;QACX,cAAc,gBAAA;QACd,QAAQ,UAAA;QACR,IAAI,MAAA;QACJ,QAAQ,UAAA;QACR,QAAQ,UAAA;QACR,MAAM,QAAA;QACN,KAAK,EAAE,gBAAgB;QACvB,OAAO,SAAA;KACR,CAAC,CAAC;IACH,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAEW,QAAA,YAAY,GAAG,UAAO,QAAgB;;QACjD,sBAAA,IAAI,OAAO,CAAS,UAAO,OAAO,EAAE,MAAM;;;;;;4BAExB,qBAAM,cAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAA;;4BAAjC,KAAK,GAAG,SAAyB;4BACvC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,UAAC,GAAG,EAAE,KAAK;gCACtC,IAAI,GAAG,EAAE;oCACP,MAAM,CAAC,GAAG,CAAC,CAAC;iCACb;gCACD,OAAO,CAAC,KAAK,CAAC,CAAC;4BACjB,CAAC,CAAC,CAAC;;;;4BAEH,MAAM,IAAI,KAAK,CAAC,0CAAwC,QAAU,CAAC,CAAC;;;;iBAEvE,CAAC,EAAA;;KAAA,CAAC;AAEQ,QAAA,UAAU,GAAG,UAAC,MAAc,IAAK,OAAA,eAAM,CAAC,MAAM,CAAC,EAAd,CAAc,CAAC;AAEhD,QAAA,aAAa,GAAG,UAAC,KAAiB;IAC7C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAChD,IAAM,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAE/C,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC/B,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;SAC/B;KACF;IAED,IAAM,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/C,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC;QAC7B,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC;QACjC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;KAChC,CAAC;AACJ,CAAC,CAAC;AAEW,QAAA,WAAW,GAAG,UAAC,KAAY;IACtC,OAAA,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AAA5E,CAA4E,CAAC;AAE/E,IAAM,QAAQ,GAAG,UAAC,GAAW;IAC3B,IAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,IAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C,OAAO,EAAE,GAAG,KAAA,EAAE,KAAK,OAAA,EAAE,IAAI,MAAA,EAAE,CAAC;AAC9B,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { rotationAliasValues } from './config';
|
|
2
|
+
import { rotationAliasValues, SpectrumEffect } from './config';
|
|
3
3
|
import { Color } from './image';
|
|
4
4
|
export declare const PCM_FORMAT: {
|
|
5
5
|
bit: number;
|
|
@@ -22,6 +22,17 @@ export interface Config {
|
|
|
22
22
|
x?: number | PositionAliasName;
|
|
23
23
|
y?: number | PositionAliasName;
|
|
24
24
|
rotation?: RotationAliasName;
|
|
25
|
+
effect?: SpectrumEffect;
|
|
26
|
+
color?: Color | string;
|
|
27
|
+
opacity?: string;
|
|
28
|
+
};
|
|
29
|
+
polar?: {
|
|
30
|
+
x?: number | PositionAliasName;
|
|
31
|
+
y?: number | PositionAliasName;
|
|
32
|
+
innerRadius?: number;
|
|
33
|
+
maxBarLength?: number;
|
|
34
|
+
barWidth?: number;
|
|
35
|
+
effect?: SpectrumEffect;
|
|
25
36
|
color?: Color | string;
|
|
26
37
|
opacity?: string;
|
|
27
38
|
};
|
package/dist/index.js
CHANGED
|
@@ -58,15 +58,48 @@ exports.PCM_FORMAT = {
|
|
|
58
58
|
parseFunction: audio_1.bufferToUInt8
|
|
59
59
|
};
|
|
60
60
|
var FFMPEG_FORMAT = "" + exports.PCM_FORMAT.sign + exports.PCM_FORMAT.bit;
|
|
61
|
+
var PROCESSING_BUFFER_SIZE = Math.pow(2, 12);
|
|
61
62
|
var sleep = function (timeout) {
|
|
62
63
|
return new Promise(function (resolve) { return setTimeout(resolve, timeout); });
|
|
63
64
|
};
|
|
65
|
+
var createVisualizerFrameGenerator = function (config, backgroundImage, spectrumBusMargin) {
|
|
66
|
+
if (!config.outVideo.spectrum) {
|
|
67
|
+
var createPolarVisualizerFrame_1 = image_1.createPolarVisualizerFrameGenerator();
|
|
68
|
+
var polarX_1 = config_1.getPolarXAbsolute(config, backgroundImage.width);
|
|
69
|
+
var polarY_1 = config_1.getPolarYAbsolute(config, backgroundImage.height);
|
|
70
|
+
var polarInnerRadius_1 = config_1.getPolarInnerRadius(config);
|
|
71
|
+
var polarMaxBarLength_1 = config_1.getPolarMaxBarLength(config);
|
|
72
|
+
var polarBarWidth_1 = config_1.getPolarBarWidth(config);
|
|
73
|
+
var polarColor_1 = config_1.getPolarColor(config) || image_1.invertColor(image_1.getImageColor(backgroundImage));
|
|
74
|
+
var polarEffect_1 = config_1.getPolarEffect(config);
|
|
75
|
+
var polarOpacity_1 = config_1.getPolarOpacityParsed(config);
|
|
76
|
+
return function (params) {
|
|
77
|
+
return createPolarVisualizerFrame_1(__assign(__assign({}, params), { centerX: polarX_1, centerY: polarY_1, innerRadius: polarInnerRadius_1, maxBarLength: polarMaxBarLength_1, barWidth: polarBarWidth_1, color: polarColor_1, opacity: polarOpacity_1, spectrumEffect: polarEffect_1 }));
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
var createPolarVisualizerFrame = image_1.createSpectrumVisualizerFrameGenerator();
|
|
81
|
+
var spectrumWidth = config_1.getSpectrumWidthAbsolute(config, backgroundImage.width);
|
|
82
|
+
var spectrumHeight = config_1.getSpectrumHeightAbsolute(config, backgroundImage.height);
|
|
83
|
+
var spectrumX = config_1.getSpectrumXAbsolute(config, spectrumWidth, backgroundImage.width);
|
|
84
|
+
var spectrumY = config_1.getSpectrumYAbsolute(config, spectrumHeight, backgroundImage.height);
|
|
85
|
+
var spectrumRotation = config_1.getSpectrumRotation(config);
|
|
86
|
+
var spectrumColor = config_1.getSpectrumColor(config) || image_1.invertColor(image_1.getImageColor(backgroundImage));
|
|
87
|
+
var spectrumEffect = config_1.getSpectrumEffect(config);
|
|
88
|
+
var spectrumOpacity = config_1.getSpectrumOpacityParsed(config);
|
|
89
|
+
return function (params) {
|
|
90
|
+
return createPolarVisualizerFrame(__assign(__assign({}, params), { size: { width: spectrumWidth, height: spectrumHeight }, position: { x: spectrumX, y: spectrumY }, rotation: spectrumRotation, margin: spectrumBusMargin, color: spectrumColor, opacity: spectrumOpacity, spectrumEffect: spectrumEffect }));
|
|
91
|
+
};
|
|
92
|
+
};
|
|
64
93
|
exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
65
94
|
return new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
|
|
66
|
-
var audioFilePath, backgroundImagePath, outVideoPath, backgroundImageBmpBuffer, backgroundImage, audioReader, audioBuffer, sampleRate,
|
|
95
|
+
var audioFilePath, backgroundImagePath, outVideoPath, backgroundImageBmpBuffer, backgroundImage, audioReader, audioBuffer, sampleRate, spectrumBusMargin, FPS, ffmpeg_cfr, ffmpeg_preset, frame_processing_delay, createVisualizerFrame, audioDuration, framesCount, audioDataStep, processingBuffer, ffmpegVideoWriter, bpmEncoder, backgroundImageBuffer, skipFramesCount, processSpectrum, i, currentFrameData, audioDataParser, spectrum, commonVisualizerFrameProps, frameImage, isFrameProcessed;
|
|
67
96
|
return __generator(this, function (_a) {
|
|
68
97
|
switch (_a.label) {
|
|
69
98
|
case 0:
|
|
99
|
+
// Validate that only one visualizer type is specified
|
|
100
|
+
if (config.outVideo.spectrum && config.outVideo.polar) {
|
|
101
|
+
throw new Error('Cannot use both "spectrum" and "polar" options. Please specify only one visualizer type.');
|
|
102
|
+
}
|
|
70
103
|
audioFilePath = config_1.getAudioFilePath(config);
|
|
71
104
|
backgroundImagePath = config_1.getBackgroundImagePath(config);
|
|
72
105
|
outVideoPath = config_1.getOutVideoPath(config);
|
|
@@ -82,80 +115,55 @@ exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
|
82
115
|
if (!sampleRate) {
|
|
83
116
|
throw new Error('ffmpeg didn\'t show audio sample rate');
|
|
84
117
|
}
|
|
85
|
-
spectrumBusesCount = config_1.getSpectrumBusesCount();
|
|
86
118
|
spectrumBusMargin = config_1.getSpectrumBusMargin();
|
|
87
119
|
FPS = config_1.getFPS(config);
|
|
88
|
-
spectrumWidth = config_1.getSpectrumWidthAbsolute(config, backgroundImage.width);
|
|
89
|
-
spectrumHeight = config_1.getSpectrumHeightAbsolute(config, backgroundImage.height);
|
|
90
|
-
spectrumX = config_1.getSpectrumXAbsolute(config, spectrumWidth, backgroundImage.width);
|
|
91
|
-
spectrumY = config_1.getSpectrumYAbsolute(config, spectrumHeight, backgroundImage.height);
|
|
92
|
-
spectrumRotation = config_1.getSpectrumRotation(config);
|
|
93
|
-
spectrumColor = config_1.getSpectrumColor(config) ||
|
|
94
|
-
image_1.invertColor(image_1.getImageColor(backgroundImage));
|
|
95
|
-
spectrumOpacity = config_1.getSpectrumOpacityParsed(config);
|
|
96
120
|
ffmpeg_cfr = config_1.getFfmpeg_cfr(config);
|
|
97
121
|
ffmpeg_preset = config_1.getFfmpeg_preset(config);
|
|
98
122
|
frame_processing_delay = config_1.getFrame_processing_delay(config);
|
|
123
|
+
createVisualizerFrame = createVisualizerFrameGenerator(config, backgroundImage, spectrumBusMargin);
|
|
99
124
|
audioDuration = audioBuffer.length / sampleRate;
|
|
100
125
|
framesCount = Math.trunc(audioDuration * FPS);
|
|
101
126
|
audioDataStep = Math.trunc(audioBuffer.length / framesCount);
|
|
127
|
+
processingBuffer = new Float32Array(PROCESSING_BUFFER_SIZE).fill(0);
|
|
102
128
|
ffmpegVideoWriter = video_1.spawnFfmpegVideoWriter(__assign(__assign(__assign({ audioFilename: audioFilePath, videoFileName: outVideoPath, fps: FPS }, (!!onProgress && { onStderr: video_1.getProgress(video_1.calculateProgress(framesCount + 1, onProgress)) })), (ffmpeg_cfr && { crf: ffmpeg_cfr })), (ffmpeg_preset && { preset: ffmpeg_preset })));
|
|
103
129
|
ffmpegVideoWriter.on('exit', function (code) { return resolve(code); });
|
|
104
130
|
bpmEncoder = bpmEncoder_1.createBpmEncoder({ width: backgroundImage.width, height: backgroundImage.height });
|
|
105
131
|
backgroundImageBuffer = bpmEncoder(backgroundImage.data);
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
var audioDataParser, spectrum, frameImage, isFrameProcessed;
|
|
109
|
-
return __generator(this, function (_a) {
|
|
110
|
-
switch (_a.label) {
|
|
111
|
-
case 0:
|
|
112
|
-
audioDataParser = function () {
|
|
113
|
-
return exports.PCM_FORMAT.parseFunction(audioBuffer, i * audioDataStep, i * audioDataStep + audioDataStep);
|
|
114
|
-
};
|
|
115
|
-
spectrum = processSpectrum(i, audioDataParser);
|
|
116
|
-
frameImage = image_1.createVisualizerFrame({
|
|
117
|
-
backgroundImageBuffer: backgroundImageBuffer,
|
|
118
|
-
spectrum: spectrum,
|
|
119
|
-
size: { width: spectrumWidth, height: spectrumHeight },
|
|
120
|
-
position: { x: spectrumX, y: spectrumY },
|
|
121
|
-
rotation: spectrumRotation,
|
|
122
|
-
margin: spectrumBusMargin,
|
|
123
|
-
color: spectrumColor,
|
|
124
|
-
opacity: spectrumOpacity,
|
|
125
|
-
});
|
|
126
|
-
isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImage.data);
|
|
127
|
-
if (!!isFrameProcessed) return [3 /*break*/, 2];
|
|
128
|
-
return [4 /*yield*/, video_1.waitDrain(ffmpegVideoWriter.stdin)];
|
|
129
|
-
case 1:
|
|
130
|
-
_a.sent();
|
|
131
|
-
_a.label = 2;
|
|
132
|
-
case 2:
|
|
133
|
-
if (shouldStop && shouldStop()) {
|
|
134
|
-
return [2 /*return*/, "break"];
|
|
135
|
-
}
|
|
136
|
-
if (!frame_processing_delay) return [3 /*break*/, 4];
|
|
137
|
-
return [4 /*yield*/, sleep(frame_processing_delay)];
|
|
138
|
-
case 3:
|
|
139
|
-
_a.sent();
|
|
140
|
-
_a.label = 4;
|
|
141
|
-
case 4: return [2 /*return*/];
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
};
|
|
132
|
+
skipFramesCount = FPS < 45 ? 1 : 2;
|
|
133
|
+
processSpectrum = audio_1.createSpectrumsProcessor(sampleRate, skipFramesCount);
|
|
145
134
|
i = 0;
|
|
146
135
|
_a.label = 3;
|
|
147
136
|
case 3:
|
|
148
|
-
if (!(i < framesCount)) return [3 /*break*/,
|
|
149
|
-
|
|
137
|
+
if (!(i < framesCount)) return [3 /*break*/, 8];
|
|
138
|
+
currentFrameData = exports.PCM_FORMAT.parseFunction(audioBuffer, i * audioDataStep, i * audioDataStep + audioDataStep);
|
|
139
|
+
processingBuffer.copyWithin(0, currentFrameData.length);
|
|
140
|
+
processingBuffer.set(currentFrameData, PROCESSING_BUFFER_SIZE - currentFrameData.length);
|
|
141
|
+
audioDataParser = function () { return Array.from(processingBuffer); };
|
|
142
|
+
spectrum = processSpectrum(audioDataParser);
|
|
143
|
+
commonVisualizerFrameProps = {
|
|
144
|
+
backgroundImageBuffer: backgroundImageBuffer,
|
|
145
|
+
spectrum: spectrum,
|
|
146
|
+
};
|
|
147
|
+
frameImage = createVisualizerFrame(commonVisualizerFrameProps);
|
|
148
|
+
isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImage.data);
|
|
149
|
+
if (!!isFrameProcessed) return [3 /*break*/, 5];
|
|
150
|
+
return [4 /*yield*/, video_1.waitDrain(ffmpegVideoWriter.stdin)];
|
|
150
151
|
case 4:
|
|
151
|
-
|
|
152
|
-
if (state_1 === "break")
|
|
153
|
-
return [3 /*break*/, 6];
|
|
152
|
+
_a.sent();
|
|
154
153
|
_a.label = 5;
|
|
155
154
|
case 5:
|
|
155
|
+
if (shouldStop && shouldStop()) {
|
|
156
|
+
return [3 /*break*/, 8];
|
|
157
|
+
}
|
|
158
|
+
if (!frame_processing_delay) return [3 /*break*/, 7];
|
|
159
|
+
return [4 /*yield*/, sleep(frame_processing_delay)];
|
|
160
|
+
case 6:
|
|
161
|
+
_a.sent();
|
|
162
|
+
_a.label = 7;
|
|
163
|
+
case 7:
|
|
156
164
|
i++;
|
|
157
165
|
return [3 /*break*/, 3];
|
|
158
|
-
case
|
|
166
|
+
case 8:
|
|
159
167
|
ffmpegVideoWriter.stdin.end();
|
|
160
168
|
return [2 /*return*/];
|
|
161
169
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodejs-audio-visualizer",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"src/"
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
|
-
"test": "mocha -
|
|
12
|
+
"test": "ts-mocha -p tsconfig.json src/**/*.test.ts",
|
|
13
13
|
"dev": "ts-node-dev --respawn --transpileOnly ./example/example.ts",
|
|
14
14
|
"prebuild": "rimraf dist",
|
|
15
15
|
"build": "tsc -m CommonJS",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"mocha": "^6.2.3",
|
|
38
38
|
"rimraf": "^3.0.2",
|
|
39
39
|
"sinon": "^7.5.0",
|
|
40
|
+
"ts-mocha": "^11.1.0",
|
|
40
41
|
"ts-node": "^8.5.0",
|
|
41
42
|
"ts-node-dev": "^1.0.0-pre.43",
|
|
42
43
|
"typescript": "^3.7.2"
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"@types/sinon": "^7.5.0",
|
|
55
56
|
"bmp-js": "^0.1.0",
|
|
56
57
|
"ffmpeg-static": "^5.2.0",
|
|
58
|
+
"fft-js": "^0.0.12",
|
|
57
59
|
"jimp": "^0.9.3"
|
|
58
60
|
}
|
|
59
61
|
}
|