nodejs-audio-visualizer 3.0.0 → 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 +11 -1
- package/dist/config.d.ts +14 -0
- package/dist/config.js +92 -0
- package/dist/config.js.map +1 -1
- package/dist/image.d.ts +26 -2
- package/dist/image.js +192 -1
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.js +37 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +107 -0
- package/src/image.ts +295 -26
- package/src/index.ts +86 -27
- package/src/tests/image.test.ts +86 -3
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ const config = {
|
|
|
15
15
|
outVideo: {
|
|
16
16
|
path: 'media/out.mp4',
|
|
17
17
|
fps: 25, // Default value: 30
|
|
18
|
-
spectrum: { // Audio spectrum configuration. Optional.
|
|
18
|
+
spectrum: { // Audio spectrum configuration (linear bar visualizer). Optional. If neither 'spectrum' nor 'polar' is specified, 'polar' is used by default.
|
|
19
19
|
width: '30%', // 30% of background image width. Default value: 33%. Also you can use absolute values. For example, value 300 for 300 pixels width.
|
|
20
20
|
height: '15%', // 15% of background image height. Default value: 160. Also you can use absolute values. For example, value 300 for 300 pixels height.
|
|
21
21
|
x: 'center', // Available values: 'left', 'center', right'. Also you can use absolute number values. For example, value 300 for 300 pixels x.
|
|
@@ -24,6 +24,16 @@ const config = {
|
|
|
24
24
|
effect: 'volume', // Available values: 'volume', 'smooth', undefined. Default value: undefined.
|
|
25
25
|
color: '#cccc99', // Default value: inverted color of background image
|
|
26
26
|
opacity: '70%' // Default value: '80%'.
|
|
27
|
+
},
|
|
28
|
+
polar: { // Polar/circular audio spectrum configuration (DEFAULT). Optional. Use either 'spectrum' or 'polar', not both.
|
|
29
|
+
x: 'center', // Available values: 'left', 'center', 'right'. Also you can use absolute number values. Default value: 'center'.
|
|
30
|
+
y: 'middle', // Available values: 'top', 'middle', 'bottom'. Also you can use absolute number values. Default value: 'middle'.
|
|
31
|
+
innerRadius: 100, // Inner radius of the circular spectrum in pixels. Default value: 100.
|
|
32
|
+
maxBarLength: 160, // Maximum bar length in pixels. Default value: 160.
|
|
33
|
+
barWidth: 15, // Width of each bar in pixels. Default value: 15.
|
|
34
|
+
effect: 'volume', // Available values: 'volume', 'smooth', undefined. Default value: undefined.
|
|
35
|
+
color: '#cccc99', // Default value: inverted color of background image
|
|
36
|
+
opacity: '70%' // Default value: '80%'.
|
|
27
37
|
}
|
|
28
38
|
},
|
|
29
39
|
tweaks: { // Optional
|
package/dist/config.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export declare const defaults: {
|
|
|
8
8
|
spectrumRotation: string;
|
|
9
9
|
spectrumBusMargin: number;
|
|
10
10
|
spectrumOpacity: string;
|
|
11
|
+
polarX: string;
|
|
12
|
+
polarY: string;
|
|
13
|
+
polarInnerRadius: number;
|
|
14
|
+
polarMaxBarLength: number;
|
|
15
|
+
polarBarWidth: number;
|
|
11
16
|
};
|
|
12
17
|
export declare type SpectrumEffect = 'volume' | 'smooth';
|
|
13
18
|
export declare const rotationAliasValues: readonly ["up", "down", "mirror"];
|
|
@@ -30,3 +35,12 @@ export declare const getSpectrumOpacityParsed: (config: Config) => number;
|
|
|
30
35
|
export declare const getFfmpeg_cfr: (config: Config) => string | undefined;
|
|
31
36
|
export declare const getFfmpeg_preset: (config: Config) => string | undefined;
|
|
32
37
|
export declare const getFrame_processing_delay: (config: Config) => number | undefined;
|
|
38
|
+
export declare const getPolarXAbsolute: (config: Config, backgroundImageWidth: number) => number;
|
|
39
|
+
export declare const getPolarYAbsolute: (config: Config, backgroundImageHeight: number) => number;
|
|
40
|
+
export declare const getPolarInnerRadius: (config: Config) => number;
|
|
41
|
+
export declare const getPolarMaxBarLength: (config: Config) => number;
|
|
42
|
+
export declare const getPolarBarWidth: (config: Config) => number;
|
|
43
|
+
export declare const getPolarEffect: (config: Config) => "smooth" | "volume" | undefined;
|
|
44
|
+
export declare const getPolarColor: (config: Config) => string | import("./image").Color | undefined;
|
|
45
|
+
export declare const getPolarOpacity: (config: Config) => string;
|
|
46
|
+
export declare const getPolarOpacityParsed: (config: Config) => number;
|
package/dist/config.js
CHANGED
|
@@ -14,6 +14,11 @@ exports.defaults = {
|
|
|
14
14
|
spectrumRotation: 'mirror',
|
|
15
15
|
spectrumBusMargin: 12,
|
|
16
16
|
spectrumOpacity: '80%',
|
|
17
|
+
polarX: 'center',
|
|
18
|
+
polarY: 'middle',
|
|
19
|
+
polarInnerRadius: 100,
|
|
20
|
+
polarMaxBarLength: 160,
|
|
21
|
+
polarBarWidth: 15,
|
|
17
22
|
};
|
|
18
23
|
var postitionAliases = [
|
|
19
24
|
{ name: 'left', value: 0 },
|
|
@@ -182,4 +187,91 @@ exports.getFfmpeg_preset = function (config) {
|
|
|
182
187
|
exports.getFrame_processing_delay = function (config) {
|
|
183
188
|
return config.tweaks && config.tweaks.frame_processing_delay;
|
|
184
189
|
};
|
|
190
|
+
// Polar visualizer config getters
|
|
191
|
+
var getPolarX = function (config) {
|
|
192
|
+
return parseNumberIfPossible((config.outVideo.polar && config.outVideo.polar.x) ||
|
|
193
|
+
exports.defaults.polarX);
|
|
194
|
+
};
|
|
195
|
+
var getPolarY = function (config) {
|
|
196
|
+
return parseNumberIfPossible((config.outVideo.polar && config.outVideo.polar.y) ||
|
|
197
|
+
exports.defaults.polarY);
|
|
198
|
+
};
|
|
199
|
+
exports.getPolarXAbsolute = function (config, backgroundImageWidth) {
|
|
200
|
+
var polarX = getPolarX(config);
|
|
201
|
+
if (typeof polarX !== 'string') {
|
|
202
|
+
return polarX;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
var polarXParsed = parsePositionAlias(polarX);
|
|
206
|
+
if (polarXParsed.value === 0) {
|
|
207
|
+
var polarLength = exports.getPolarMaxBarLength(config);
|
|
208
|
+
var polarRadius = exports.getPolarInnerRadius(config);
|
|
209
|
+
return polarRadius + polarLength;
|
|
210
|
+
}
|
|
211
|
+
if (polarXParsed.value === 1) {
|
|
212
|
+
var polarLength = exports.getPolarMaxBarLength(config);
|
|
213
|
+
var polarRadius = exports.getPolarInnerRadius(config);
|
|
214
|
+
return backgroundImageWidth - polarRadius - polarLength;
|
|
215
|
+
}
|
|
216
|
+
return polarXParsed.value * backgroundImageWidth;
|
|
217
|
+
}
|
|
218
|
+
catch (_a) {
|
|
219
|
+
throw new Error("Invalid polar x value: " + polarX + ". Valid values: " + getValidPositionAliasValues() + ".");
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
exports.getPolarYAbsolute = function (config, backgroundImageHeight) {
|
|
223
|
+
var polarY = getPolarY(config);
|
|
224
|
+
if (typeof polarY !== 'string') {
|
|
225
|
+
return polarY;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
var polarYParsed = parsePositionAlias(polarY);
|
|
229
|
+
if (polarYParsed.value === 0) {
|
|
230
|
+
var polarLength = exports.getPolarMaxBarLength(config);
|
|
231
|
+
var polarRadius = exports.getPolarInnerRadius(config);
|
|
232
|
+
return polarRadius + polarLength;
|
|
233
|
+
}
|
|
234
|
+
if (polarYParsed.value === 1) {
|
|
235
|
+
var polarLength = exports.getPolarMaxBarLength(config);
|
|
236
|
+
var polarRadius = exports.getPolarInnerRadius(config);
|
|
237
|
+
return backgroundImageHeight - polarRadius - polarLength;
|
|
238
|
+
}
|
|
239
|
+
return polarYParsed.value * backgroundImageHeight;
|
|
240
|
+
}
|
|
241
|
+
catch (_a) {
|
|
242
|
+
throw new Error("Invalid polar y value: " + polarY + ". Valid values: " + getValidPositionAliasValues() + ".");
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
exports.getPolarInnerRadius = function (config) {
|
|
246
|
+
return (config.outVideo.polar && config.outVideo.polar.innerRadius) ||
|
|
247
|
+
exports.defaults.polarInnerRadius;
|
|
248
|
+
};
|
|
249
|
+
exports.getPolarMaxBarLength = function (config) {
|
|
250
|
+
return (config.outVideo.polar && config.outVideo.polar.maxBarLength) ||
|
|
251
|
+
exports.defaults.polarMaxBarLength;
|
|
252
|
+
};
|
|
253
|
+
exports.getPolarBarWidth = function (config) {
|
|
254
|
+
return (config.outVideo.polar && config.outVideo.polar.barWidth) ||
|
|
255
|
+
exports.defaults.polarBarWidth;
|
|
256
|
+
};
|
|
257
|
+
exports.getPolarEffect = function (config) { var _a; return (_a = config.outVideo.polar) === null || _a === void 0 ? void 0 : _a.effect; };
|
|
258
|
+
exports.getPolarColor = function (config) {
|
|
259
|
+
return config.outVideo.polar && config.outVideo.polar.color;
|
|
260
|
+
};
|
|
261
|
+
exports.getPolarOpacity = function (config) {
|
|
262
|
+
return (config.outVideo.polar && config.outVideo.polar.opacity) ||
|
|
263
|
+
exports.defaults.spectrumOpacity;
|
|
264
|
+
};
|
|
265
|
+
exports.getPolarOpacityParsed = function (config) {
|
|
266
|
+
var polarOpacity = exports.getPolarOpacity(config);
|
|
267
|
+
if (!exports.checkIsPercentValue(polarOpacity)) {
|
|
268
|
+
throw new Error("Invalid polar opacity value: '" + polarOpacity + "'. Use string percent value, for example '80%'.");
|
|
269
|
+
}
|
|
270
|
+
var percentValue = parseInt(polarOpacity);
|
|
271
|
+
if ((percentValue < 0) ||
|
|
272
|
+
(percentValue > 100)) {
|
|
273
|
+
throw new Error("Invalid polar opacity value: '" + polarOpacity + "'. Percent values must be in range from '0%' to '100%'.");
|
|
274
|
+
}
|
|
275
|
+
return percentValue / 100;
|
|
276
|
+
};
|
|
185
277
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAAA,8CAAwB;AAExB,6BAAwC;AAE3B,QAAA,QAAQ,GAAG;IACtB,GAAG,EAAE,EAAE;IACP,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,GAAG;IACnB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,gBAAgB,EAAE,QAAQ;IAC1B,iBAAiB,EAAE,EAAE;IACrB,eAAe,EAAE,KAAK;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/image.d.ts
CHANGED
|
@@ -31,9 +31,22 @@ interface DrawRectPorps {
|
|
|
31
31
|
opacity: number;
|
|
32
32
|
}
|
|
33
33
|
export declare const drawRect: ({ imageDstBuffer, position, size, color, opacity, }: DrawRectPorps) => void;
|
|
34
|
-
interface
|
|
34
|
+
interface FillRectProps {
|
|
35
|
+
imageDstBuffer: EncodedBmp;
|
|
36
|
+
points: [Position, Position, Position, Position];
|
|
37
|
+
color: Color;
|
|
38
|
+
opacity: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Fills a quadrilateral (4-sided polygon) using scan-line algorithm
|
|
42
|
+
* Only the outer edges are anti-aliased
|
|
43
|
+
*/
|
|
44
|
+
export declare const fillRect: ({ imageDstBuffer, points, color, opacity, }: FillRectProps) => void;
|
|
45
|
+
export interface CommonVisualizerFrameProps {
|
|
35
46
|
backgroundImageBuffer: EncodedBmp;
|
|
36
47
|
spectrum: number[];
|
|
48
|
+
}
|
|
49
|
+
export interface CreateVisualizerFrameProps {
|
|
37
50
|
size: Size;
|
|
38
51
|
position: Position;
|
|
39
52
|
rotation: RotationAliasName;
|
|
@@ -42,7 +55,18 @@ interface CreateVisualizerFrameProps {
|
|
|
42
55
|
opacity: number;
|
|
43
56
|
spectrumEffect?: SpectrumEffect;
|
|
44
57
|
}
|
|
45
|
-
export
|
|
58
|
+
export interface CreatePolarVisualizerFrameProps {
|
|
59
|
+
centerX: number;
|
|
60
|
+
centerY: number;
|
|
61
|
+
innerRadius: number;
|
|
62
|
+
maxBarLength: number;
|
|
63
|
+
barWidth: number;
|
|
64
|
+
color: Color | string;
|
|
65
|
+
opacity: number;
|
|
66
|
+
spectrumEffect?: SpectrumEffect;
|
|
67
|
+
}
|
|
68
|
+
export declare const createSpectrumVisualizerFrameGenerator: () => ({ backgroundImageBuffer, spectrum, size, position, rotation, margin, color, opacity, spectrumEffect, }: CommonVisualizerFrameProps & CreateVisualizerFrameProps) => EncodedBmp;
|
|
69
|
+
export declare const createPolarVisualizerFrameGenerator: () => ({ backgroundImageBuffer, spectrum, centerX, centerY, innerRadius, maxBarLength, barWidth, color, opacity, spectrumEffect, }: CommonVisualizerFrameProps & CreatePolarVisualizerFrameProps) => EncodedBmp;
|
|
46
70
|
export declare const convertToBmp: (filePath: string) => Promise<Buffer>;
|
|
47
71
|
export declare const parseImage: (buffer: Buffer) => BmpDecoder;
|
|
48
72
|
export declare const getImageColor: (image: BmpDecoder) => Color;
|
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,94 @@ 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
|
+
};
|
|
89
188
|
var getRectY = function (rotation, top, height, rectHeight) {
|
|
90
189
|
switch (rotation) {
|
|
91
190
|
case 'up':
|
|
@@ -127,7 +226,48 @@ var drawSpectrum = function (_a) {
|
|
|
127
226
|
});
|
|
128
227
|
}
|
|
129
228
|
};
|
|
130
|
-
|
|
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 () {
|
|
131
271
|
var prevSpectrum = null;
|
|
132
272
|
return function (_a) {
|
|
133
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;
|
|
@@ -172,6 +312,57 @@ exports.createVisualizerFrameGenerator = function () {
|
|
|
172
312
|
return imageDstBuffer;
|
|
173
313
|
};
|
|
174
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
|
+
};
|
|
365
|
+
};
|
|
175
366
|
exports.convertToBmp = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
|
|
176
367
|
return __generator(this, function (_a) {
|
|
177
368
|
return [2 /*return*/, new Promise(function (resolve, reject) { return __awaiter(void 0, void 0, void 0, function () {
|
package/dist/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,16 @@ export interface Config {
|
|
|
26
26
|
color?: Color | string;
|
|
27
27
|
opacity?: string;
|
|
28
28
|
};
|
|
29
|
+
polar?: {
|
|
30
|
+
x?: number | PositionAliasName;
|
|
31
|
+
y?: number | PositionAliasName;
|
|
32
|
+
innerRadius?: number;
|
|
33
|
+
maxBarLength?: number;
|
|
34
|
+
barWidth?: number;
|
|
35
|
+
effect?: SpectrumEffect;
|
|
36
|
+
color?: Color | string;
|
|
37
|
+
opacity?: string;
|
|
38
|
+
};
|
|
29
39
|
};
|
|
30
40
|
tweaks?: {
|
|
31
41
|
ffmpeg_cfr?: string;
|
package/dist/index.js
CHANGED
|
@@ -62,12 +62,44 @@ var PROCESSING_BUFFER_SIZE = Math.pow(2, 12);
|
|
|
62
62
|
var sleep = function (timeout) {
|
|
63
63
|
return new Promise(function (resolve) { return setTimeout(resolve, timeout); });
|
|
64
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
|
+
};
|
|
65
93
|
exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
66
94
|
return new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
|
|
67
|
-
var audioFilePath, backgroundImagePath, outVideoPath, backgroundImageBmpBuffer, backgroundImage, audioReader, audioBuffer, sampleRate, spectrumBusMargin, FPS,
|
|
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;
|
|
68
96
|
return __generator(this, function (_a) {
|
|
69
97
|
switch (_a.label) {
|
|
70
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
|
+
}
|
|
71
103
|
audioFilePath = config_1.getAudioFilePath(config);
|
|
72
104
|
backgroundImagePath = config_1.getBackgroundImagePath(config);
|
|
73
105
|
outVideoPath = config_1.getOutVideoPath(config);
|
|
@@ -85,18 +117,10 @@ exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
|
85
117
|
}
|
|
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
|
-
spectrumEffect = config_1.getSpectrumEffect(config);
|
|
96
|
-
spectrumOpacity = config_1.getSpectrumOpacityParsed(config);
|
|
97
120
|
ffmpeg_cfr = config_1.getFfmpeg_cfr(config);
|
|
98
121
|
ffmpeg_preset = config_1.getFfmpeg_preset(config);
|
|
99
122
|
frame_processing_delay = config_1.getFrame_processing_delay(config);
|
|
123
|
+
createVisualizerFrame = createVisualizerFrameGenerator(config, backgroundImage, spectrumBusMargin);
|
|
100
124
|
audioDuration = audioBuffer.length / sampleRate;
|
|
101
125
|
framesCount = Math.trunc(audioDuration * FPS);
|
|
102
126
|
audioDataStep = Math.trunc(audioBuffer.length / framesCount);
|
|
@@ -107,7 +131,6 @@ exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
|
107
131
|
backgroundImageBuffer = bpmEncoder(backgroundImage.data);
|
|
108
132
|
skipFramesCount = FPS < 45 ? 1 : 2;
|
|
109
133
|
processSpectrum = audio_1.createSpectrumsProcessor(sampleRate, skipFramesCount);
|
|
110
|
-
createVisualizerFrame = image_1.createVisualizerFrameGenerator();
|
|
111
134
|
i = 0;
|
|
112
135
|
_a.label = 3;
|
|
113
136
|
case 3:
|
|
@@ -117,17 +140,11 @@ exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
|
|
|
117
140
|
processingBuffer.set(currentFrameData, PROCESSING_BUFFER_SIZE - currentFrameData.length);
|
|
118
141
|
audioDataParser = function () { return Array.from(processingBuffer); };
|
|
119
142
|
spectrum = processSpectrum(audioDataParser);
|
|
120
|
-
|
|
143
|
+
commonVisualizerFrameProps = {
|
|
121
144
|
backgroundImageBuffer: backgroundImageBuffer,
|
|
122
145
|
spectrum: spectrum,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
rotation: spectrumRotation,
|
|
126
|
-
margin: spectrumBusMargin,
|
|
127
|
-
color: spectrumColor,
|
|
128
|
-
opacity: spectrumOpacity,
|
|
129
|
-
spectrumEffect: spectrumEffect,
|
|
130
|
-
});
|
|
146
|
+
};
|
|
147
|
+
frameImage = createVisualizerFrame(commonVisualizerFrameProps);
|
|
131
148
|
isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImage.data);
|
|
132
149
|
if (!!isFrameProcessed) return [3 /*break*/, 5];
|
|
133
150
|
return [4 /*yield*/, video_1.waitDrain(ffmpegVideoWriter.stdin)];
|