nodejs-audio-visualizer 1.0.6 → 1.3.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 CHANGED
@@ -16,10 +16,17 @@ const config = {
16
16
  path: 'media/out.mp4',
17
17
  fps: 25, // Default value: 60
18
18
  spectrum: { // Audio spectrum configuration. Optional.
19
- width: 300, // Default value: 40% of background image width
20
- height: 300, // Default value: 10% of background image height
19
+ width: 0.3, // 30% of background image width. Default value: 40%. Also you can use absolute values. For example, value 300 for 300 pixels width.
20
+ height: 0.15, // 15% of background image height. Default value: 10%. Also you can use absolute values. For example, value 300 for 300 pixels height.
21
+ x: 'center', // Available values: 'left', 'center', right'. Also you can use absolute number values. For example, value 300 for 300 pixels x.
22
+ y: 'bottom', // Available values: 'top', 'middle', bottom'. Also you can use absolute number values. For example, value 300 for 300 pixels y.
21
23
  color: '#cccc99' // Default value: inverted color of background image
22
24
  }
25
+ },
26
+ tweaks: { // Optional
27
+ ffmpeg_cfr: '30', // Default value: 23
28
+ ffmpeg_preset: 'ultrafast', // Default value: medium
29
+ frame_processing_delay: 1000 // Delay between processing frames in milliseconds
23
30
  }
24
31
  };
25
32
 
package/dist/audio.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- /// <reference path="../src/vendor-typings/array-smooth.d.ts" />
2
1
  /// <reference types="node" />
3
- export declare const skipEvery: <T>(skipIndex: number) => (element: T, index: number) => T | null;
4
- export declare const getSmoothBuses: (busValues: number[]) => number[];
5
- export declare const smoothSpectrums: (spectrums: number[][], FPS: number) => number[][];
6
- export declare const getSmoothSpectrums: (audioData: number[], FPS: number, audioDataStep: number) => number[][];
7
- export declare const bufferToUInt8: (buffer: Buffer) => number[];
2
+ export declare const skipEvery: <T>(skipIndex: number) => (element: T, index: number) => boolean;
3
+ export declare const getPeaks: (spectrums: number[], prevPeaks?: number[] | undefined) => number[];
4
+ export declare const correctPeaks: (spectrums: number[], peaks: number[]) => number[];
5
+ export declare const smoothValues: (spectrums: number[], prevSpectrums?: number[] | undefined) => number[];
6
+ export declare const createSpectrumsProcessor: (busesCount: number) => (frameIndex: number, parseAudioData: () => number[]) => number[];
7
+ export declare const bufferToUInt8: (buffer: Buffer, start: number, end: number) => number[];
8
8
  export declare const normalizeAudioData: (PCMData: number[]) => number[];
9
9
  export declare const spawnFfmpegAudioReader: (filename: string, format: string) => import("child_process").ChildProcessWithoutNullStreams;
10
10
  export declare const createAudioBuffer: (filename: string, format: string) => Promise<{
package/dist/audio.js CHANGED
@@ -3,62 +3,83 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- /// <reference path="./vendor-typings/array-smooth.d.ts"/>
7
6
  var child_process_1 = require("child_process");
8
7
  var ffmpeg_static_1 = __importDefault(require("ffmpeg-static"));
9
8
  var dsp_1 = require("./dsp");
10
- var array_smooth_1 = __importDefault(require("array-smooth"));
11
9
  exports.skipEvery = function (skipIndex) { return function (element, index) {
12
- return (index % skipIndex === 0) ? element : null;
10
+ return index % skipIndex === 0;
13
11
  }; };
14
- exports.getSmoothBuses = function (busValues) {
15
- return array_smooth_1.default(busValues, 2);
16
- };
17
- exports.smoothSpectrums = function (spectrums, FPS) {
18
- var scaleValues = function (values) {
19
- var maxValue = Math.max.apply(null, values);
20
- return values.map(function (value) { return value / maxValue; });
21
- };
22
- var lengths = spectrums.map(function (spectrum) { return spectrum.length; });
23
- var maxLength = Math.max.apply(null, lengths);
24
- var buses = [];
25
- for (var bus = 0; bus < maxLength; bus++) {
26
- buses[bus] = [];
12
+ exports.getPeaks = function (spectrums, prevPeaks) {
13
+ if (!prevPeaks) {
14
+ return spectrums;
27
15
  }
28
- spectrums.forEach(function (spectrum) {
29
- for (var bus = 0; bus < maxLength; bus++) {
30
- buses[bus].push(spectrum[bus] || 0);
31
- }
32
- });
33
- var smoothBuses = buses.map(function (bus) { return exports.getSmoothBuses(scaleValues(bus)); });
34
- var smoothSpectrums = [];
35
- for (var spectrumIndex = 0; spectrumIndex < spectrums.length; spectrumIndex++) {
36
- smoothSpectrums[spectrumIndex] = [];
16
+ var resultPeaks = [];
17
+ for (var i = 0; i < spectrums.length; i++) {
18
+ var currValue = spectrums[i];
19
+ var currPrevPeak = prevPeaks[i] || 0;
20
+ resultPeaks.push((currValue > currPrevPeak) ? currValue : currPrevPeak);
37
21
  }
38
- for (var spectrumIndex = 0; spectrumIndex < spectrums.length; spectrumIndex++) {
39
- for (var bus = 0; bus < maxLength; bus++) {
40
- smoothSpectrums[spectrumIndex].push(smoothBuses[bus][spectrumIndex]);
22
+ return resultPeaks;
23
+ };
24
+ exports.correctPeaks = function (spectrums, peaks) {
25
+ var resultSpectrum = [];
26
+ for (var i = 0; i < spectrums.length; i++) {
27
+ var value = spectrums[i];
28
+ var peakValue = peaks[i] || 0;
29
+ if (value < 3) {
30
+ resultSpectrum.push(value / 3);
31
+ }
32
+ else {
33
+ resultSpectrum.push(value / peakValue);
41
34
  }
42
35
  }
43
- return smoothSpectrums;
36
+ return resultSpectrum;
44
37
  };
45
- exports.getSmoothSpectrums = function (audioData, FPS, audioDataStep) {
46
- var spectrums = [];
47
- for (var i = 0; i < audioData.length; i += audioDataStep) {
48
- var normalizedAudioFrame = audioData.slice(i, i + audioDataStep);
49
- var spectrum = dsp_1.getSpectrum(normalizedAudioFrame);
50
- spectrums.push(spectrum);
38
+ exports.smoothValues = function (spectrums, prevSpectrums) {
39
+ if (!prevSpectrums) {
40
+ return spectrums;
41
+ }
42
+ var resultSpectrum = [];
43
+ for (var i = 0; i < spectrums.length; i++) {
44
+ var currValue = spectrums[i];
45
+ var currPrevValue = prevSpectrums[i] || 0;
46
+ var avgValue = (currValue + currPrevValue) / 2;
47
+ resultSpectrum.push(avgValue);
51
48
  }
52
- return exports.smoothSpectrums(spectrums, FPS);
49
+ return resultSpectrum;
53
50
  };
54
- exports.bufferToUInt8 = function (buffer) {
51
+ exports.createSpectrumsProcessor = function (busesCount) {
52
+ var prevAudioDataNormalized = [];
53
+ var prevPeaks = [];
54
+ var prevSpectrums = [];
55
+ var skipFrameIndex = 2;
56
+ return function (frameIndex, parseAudioData) {
57
+ var isFrameSkiped = frameIndex && (frameIndex % skipFrameIndex === 0);
58
+ var audioDataNomrmalized = isFrameSkiped ?
59
+ prevAudioDataNormalized :
60
+ exports.normalizeAudioData(parseAudioData());
61
+ prevAudioDataNormalized = audioDataNomrmalized;
62
+ var spectrum = dsp_1.getSpectrum(audioDataNomrmalized);
63
+ var skipIndex = Math.trunc(spectrum.length / busesCount);
64
+ var spectrumReduced = spectrum.filter(exports.skipEvery(skipIndex));
65
+ var peaks = exports.getPeaks(spectrumReduced, prevPeaks);
66
+ var correctedSpectrum = exports.correctPeaks(spectrumReduced, peaks);
67
+ var smoothSpectrum = exports.smoothValues(correctedSpectrum, prevSpectrums);
68
+ prevSpectrums = smoothSpectrum;
69
+ prevPeaks = peaks;
70
+ return smoothSpectrum;
71
+ };
72
+ };
73
+ exports.bufferToUInt8 = function (buffer, start, end) {
55
74
  var numbers = [];
56
- for (var i = 0; i < buffer.length; i += 1) {
75
+ for (var i = start; i < end; i += 1) {
57
76
  numbers.push(buffer.readUInt8(i));
58
77
  }
59
78
  return numbers;
60
79
  };
61
- exports.normalizeAudioData = function (PCMData) { return PCMData.map(function (num) { return (num - 128) / 128; }); };
80
+ exports.normalizeAudioData = function (PCMData) {
81
+ return PCMData.map(function (num) { return (num - 128) / 128; });
82
+ };
62
83
  exports.spawnFfmpegAudioReader = function (filename, format) {
63
84
  var ffmpegProcess = child_process_1.spawn(ffmpeg_static_1.default.path, ['-i', filename, '-f', format, '-ac', '1', '-']);
64
85
  return ffmpegProcess;
package/dist/audio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { Config } from './index';
2
+ export declare const defaults: {
3
+ fps: number;
4
+ spectrumWidth: number;
5
+ spectrumHeight: number;
6
+ spectrumX: string;
7
+ spectrumY: string;
8
+ };
9
+ export declare const getAudioFilePath: (config: Config) => string;
10
+ export declare const getBackgroundImagePath: (config: Config) => string;
11
+ export declare const getOutVideoPath: (config: Config) => string;
12
+ export declare const getFPS: (config: Config) => number;
13
+ export declare const getSpectrumWidthAbsolute: (config: Config, backgroundImageWidth: number) => number;
14
+ export declare const getSpectrumHeightAbsolute: (config: Config, backgroundImageHeight: number) => number;
15
+ export declare const getSpectrumXAbsolute: (config: Config, spectrumWidth: number, backgroundImageWidth: number) => number;
16
+ export declare const getSpectrumYAbsolute: (config: Config, spectrumHeight: number, backgroundImageHeight: number) => number;
17
+ export declare const getSpectrumColor: (config: Config) => string | import("./image").Color | undefined;
18
+ export declare const getFfmpeg_cfr: (config: Config) => string | undefined;
19
+ export declare const getFfmpeg_preset: (config: Config) => string | undefined;
20
+ export declare const getFrame_processing_delay: (config: Config) => number | undefined;
package/dist/config.js ADDED
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var path_1 = __importDefault(require("path"));
7
+ exports.defaults = {
8
+ fps: 60,
9
+ spectrumWidth: 0.4,
10
+ spectrumHeight: 0.1,
11
+ spectrumX: 'center',
12
+ spectrumY: 'top'
13
+ };
14
+ var postitionAliases = [
15
+ { name: 'left', value: 0 },
16
+ { name: 'center', value: 0.5 },
17
+ { name: 'right', value: 1 },
18
+ { name: 'top', value: 0 },
19
+ { name: 'middle', value: 0.5 },
20
+ { name: 'bottom', value: 1 },
21
+ ];
22
+ var checkIsInt = function (num) {
23
+ return num % 1 === 0;
24
+ };
25
+ exports.getAudioFilePath = function (config) {
26
+ return path_1.default.resolve(config.audio.path);
27
+ };
28
+ exports.getBackgroundImagePath = function (config) {
29
+ return path_1.default.resolve(config.image.path);
30
+ };
31
+ exports.getOutVideoPath = function (config) {
32
+ return path_1.default.resolve(config.outVideo.path);
33
+ };
34
+ exports.getFPS = function (config) {
35
+ return config.outVideo.fps || exports.defaults.fps;
36
+ };
37
+ var getSpectrumWidth = function (config) {
38
+ return (config.outVideo.spectrum && config.outVideo.spectrum.width) ||
39
+ exports.defaults.spectrumWidth;
40
+ };
41
+ exports.getSpectrumWidthAbsolute = function (config, backgroundImageWidth) {
42
+ var spectrumWidth = getSpectrumWidth(config);
43
+ var isAbsoluteValue = checkIsInt(spectrumWidth);
44
+ if (isAbsoluteValue) {
45
+ return spectrumWidth;
46
+ }
47
+ return backgroundImageWidth * spectrumWidth;
48
+ };
49
+ var getSpectrumHeight = function (config) {
50
+ return (config.outVideo.spectrum && config.outVideo.spectrum.height) ||
51
+ exports.defaults.spectrumHeight;
52
+ };
53
+ exports.getSpectrumHeightAbsolute = function (config, backgroundImageHeight) {
54
+ var spectrumHeight = getSpectrumHeight(config);
55
+ var isAbsoluteValue = checkIsInt(spectrumHeight);
56
+ if (isAbsoluteValue) {
57
+ return spectrumHeight;
58
+ }
59
+ return backgroundImageHeight * spectrumHeight;
60
+ };
61
+ var getSpectrumX = function (config) {
62
+ return parseNumberIfPossible((config.outVideo.spectrum && config.outVideo.spectrum.x) ||
63
+ exports.defaults.spectrumX);
64
+ };
65
+ var getSpectrumY = function (config) {
66
+ return parseNumberIfPossible((config.outVideo.spectrum && config.outVideo.spectrum.y) ||
67
+ exports.defaults.spectrumY);
68
+ };
69
+ var parseNumberIfPossible = function (value) {
70
+ var parsed = Number(value);
71
+ if (isNaN(parsed)) {
72
+ return value;
73
+ }
74
+ return parsed;
75
+ };
76
+ var parsePositionAlias = function (aliasName) {
77
+ var nameNormalized = aliasName.trim().toLowerCase();
78
+ var alias = postitionAliases.find(function (als) { return als.name === nameNormalized; });
79
+ if (!alias) {
80
+ throw new Error();
81
+ }
82
+ return alias;
83
+ };
84
+ var getValidPositionAliasValues = function () {
85
+ return postitionAliases.map(function (aliasEl) { return aliasEl.name; }).join(', ');
86
+ };
87
+ var getSpectrumAbsolutePosition = function (relativePosition, spectrumSize, backgroundImageSize) {
88
+ switch (relativePosition) {
89
+ case 0:
90
+ return 0;
91
+ case 0.5:
92
+ return relativePosition * backgroundImageSize - spectrumSize / 2;
93
+ case 1:
94
+ return relativePosition * backgroundImageSize - spectrumSize;
95
+ default:
96
+ throw new Error();
97
+ }
98
+ };
99
+ exports.getSpectrumXAbsolute = function (config, spectrumWidth, backgroundImageWidth) {
100
+ var spectrumX = getSpectrumX(config);
101
+ if (typeof spectrumX !== 'string') {
102
+ return spectrumX;
103
+ }
104
+ try {
105
+ var spectrumXParsed = parsePositionAlias(spectrumX);
106
+ return getSpectrumAbsolutePosition(spectrumXParsed.value, spectrumWidth, backgroundImageWidth);
107
+ }
108
+ catch (_a) {
109
+ throw new Error("Invalid spectrum x value: " + spectrumX + ". Valid values: " + getValidPositionAliasValues() + ".");
110
+ }
111
+ };
112
+ exports.getSpectrumYAbsolute = function (config, spectrumHeight, backgroundImageHeight) {
113
+ var spectrumY = getSpectrumY(config);
114
+ if (typeof spectrumY !== 'string') {
115
+ return spectrumY;
116
+ }
117
+ try {
118
+ var spectrumXParsed = parsePositionAlias(spectrumY);
119
+ return getSpectrumAbsolutePosition(spectrumXParsed.value, spectrumHeight, backgroundImageHeight);
120
+ }
121
+ catch (_a) {
122
+ throw new Error("Invalid spectrum y value: " + spectrumY + ". Valid values: " + getValidPositionAliasValues() + ".");
123
+ }
124
+ };
125
+ exports.getSpectrumColor = function (config) {
126
+ return (config.outVideo.spectrum && config.outVideo.spectrum.color);
127
+ };
128
+ exports.getFfmpeg_cfr = function (config) {
129
+ return config.tweaks && config.tweaks.ffmpeg_cfr;
130
+ };
131
+ exports.getFfmpeg_preset = function (config) {
132
+ return config.tweaks && config.tweaks.ffmpeg_preset;
133
+ };
134
+ exports.getFrame_processing_delay = function (config) {
135
+ return config.tweaks && config.tweaks.frame_processing_delay;
136
+ };
137
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAAA,8CAAwB;AAGX,QAAA,QAAQ,GAAG;IACtB,GAAG,EAAE,EAAE;IACP,aAAa,EAAE,GAAG;IAClB,cAAc,EAAE,GAAG;IACnB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,KAAK;CACjB,CAAC;AASF,IAAM,gBAAgB,GAAoB;IACxC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9B,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3B,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IACzB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;CAC7B,CAAC;AAEF,IAAM,UAAU,GAAG,UAAC,GAAW;IAC7B,OAAA,GAAG,GAAG,CAAC,KAAK,CAAC;AAAb,CAAa,CAAC;AAEH,QAAA,gBAAgB,GAAG,UAAC,MAAc;IAC7C,OAAA,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAA/B,CAA+B,CAAC;AAErB,QAAA,sBAAsB,GAAG,UAAC,MAAc;IACnD,OAAA,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;AAA/B,CAA+B,CAAC;AAErB,QAAA,eAAe,GAAG,UAAC,MAAc;IAC5C,OAAA,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAlC,CAAkC,CAAC;AAExB,QAAA,MAAM,GAAG,UAAC,MAAc;IACnC,OAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,gBAAQ,CAAC,GAAG;AAAnC,CAAmC,CAAC;AAEtC,IAAM,gBAAgB,GAAG,UAAC,MAAc;IACtC,OAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5D,gBAAQ,CAAC,aAAa;AADtB,CACsB,CAAC;AAEZ,QAAA,wBAAwB,GAAG,UACtC,MAAc,EAAE,oBAA4B;IAE5C,IAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAM,eAAe,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,eAAe,EAAE;QACnB,OAAO,aAAa,CAAC;KACtB;IACD,OAAO,oBAAoB,GAAG,aAAa,CAAC;AAC9C,CAAC,CAAC;AAEF,IAAM,iBAAiB,GAAG,UAAC,MAAc;IACvC,OAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC7D,gBAAQ,CAAC,cAAc;AADvB,CACuB,CAAC;AAEb,QAAA,yBAAyB,GAAG,UACvC,MAAc,EAAE,qBAA6B;IAE7C,IAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAM,eAAe,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACnD,IAAI,eAAe,EAAE;QACnB,OAAO,cAAc,CAAC;KACvB;IACD,OAAO,qBAAqB,GAAG,cAAc,CAAC;AAChD,CAAC,CAAC;AAEF,IAAM,YAAY,GAAG,UAAC,MAAc;IAClC,OAAA,qBAAqB,CACnB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,gBAAQ,CAAC,SAAS,CACnB;AAHD,CAGC,CAAC;AAEJ,IAAM,YAAY,GAAG,UAAC,MAAc;IAClC,OAAA,qBAAqB,CACnB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,gBAAQ,CAAC,SAAS,CACnB;AAHD,CAGC,CAAC;AAEJ,IAAM,qBAAqB,GAAG,UAAC,KAAsB;IACnD,IAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;QACjB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,IAAM,kBAAkB,GAAG,UAAC,SAAiB;IAC3C,IAAM,cAAc,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtD,IAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CACjC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,IAAI,KAAK,cAAc,EAA3B,CAA2B,CACnC,CAAC;IACF,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,EAAE,CAAC;KACnB;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,IAAM,2BAA2B,GAAG;IAClC,OAAA,gBAAgB,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,OAAO,CAAC,IAAI,EAAZ,CAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAAxD,CAAwD,CAAC;AAE3D,IAAM,2BAA2B,GAAG,UAClC,gBAAuC,EACvC,YAAoB,EACpB,mBAA2B;IAE3B,QAAQ,gBAAgB,EAAE;QACxB,KAAK,CAAC;YACJ,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,gBAAgB,GAAG,mBAAmB,GAAG,YAAY,GAAG,CAAC,CAAC;QACnE,KAAK,CAAC;YACJ,OAAO,gBAAgB,GAAG,mBAAmB,GAAG,YAAY,CAAC;QAC/D;YACE,MAAM,IAAI,KAAK,EAAE,CAAC;KACrB;AACH,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAAG,UAClC,MAAc,EACd,aAAqB,EACrB,oBAA4B;IAE5B,IAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;QACjC,OAAO,SAAS,CAAC;KAClB;IACD,IAAI;QACF,IAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO,2BAA2B,CAChC,eAAe,CAAC,KAAK,EACrB,aAAa,EACb,oBAAoB,CACrB,CAAC;KACH;IAAC,WAAM;QACN,MAAM,IAAI,KAAK,CAAC,+BAA6B,SAAS,wBAAmB,2BAA2B,EAAE,MAAG,CAAC,CAAC;KAC5G;AACH,CAAC,CAAC;AAEW,QAAA,oBAAoB,GAAG,UAClC,MAAc,EACd,cAAsB,EACtB,qBAA6B;IAE7B,IAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;QACjC,OAAO,SAAS,CAAC;KAClB;IACD,IAAI;QACF,IAAM,eAAe,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACtD,OAAO,2BAA2B,CAChC,eAAe,CAAC,KAAK,EACrB,cAAc,EACd,qBAAqB,CACtB,CAAC;KACH;IAAC,WAAM;QACN,MAAM,IAAI,KAAK,CAAC,+BAA6B,SAAS,wBAAmB,2BAA2B,EAAE,MAAG,CAAC,CAAC;KAC5G;AACH,CAAC,CAAC;AAEW,QAAA,gBAAgB,GAAG,UAAC,MAAc;IAC7C,OAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAA5D,CAA4D,CAAC;AAElD,QAAA,aAAa,GAAG,UAAC,MAAc;IAC1C,OAAA,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU;AAAzC,CAAyC,CAAC;AAE/B,QAAA,gBAAgB,GAAG,UAAC,MAAc;IAC7C,OAAA,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa;AAA5C,CAA4C,CAAC;AAElC,QAAA,yBAAyB,GAAG,UAAC,MAAc;IACtD,OAAA,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB;AAArD,CAAqD,CAAC"}
package/dist/image.d.ts CHANGED
@@ -14,7 +14,7 @@ interface Size {
14
14
  height: number;
15
15
  }
16
16
  export declare const drawRect: (imageDstBuffer: BmpDecoder, position: Position, size: Size, color: Color) => void;
17
- export declare const createVisualizerFrame: (backgroundImageBuffer: BmpDecoder, spectrum: number[], size: Size, color: string | Color) => BmpDecoder;
17
+ export declare const createVisualizerFrame: (backgroundImageBuffer: BmpDecoder, spectrum: number[], size: Size, position: Position, color: string | Color) => BmpDecoder;
18
18
  export declare const convertToBmp: (filePath: string) => Promise<Buffer>;
19
19
  export declare const parseImage: (buffer: Buffer) => BmpDecoder;
20
20
  export declare const createImageBuffer: (image: BmpDecoder) => Buffer;
package/dist/image.js CHANGED
@@ -51,25 +51,26 @@ exports.drawRect = function (imageDstBuffer, position, size, color) {
51
51
  }
52
52
  }
53
53
  };
54
- var drawSpectrum = function (imageDstBuffer, spectrum, size, color) {
55
- var paddingLeft = Math.trunc(imageDstBuffer.width / 2 - size.width / 2);
54
+ var drawSpectrum = function (imageDstBuffer, spectrum, size, position, color) {
56
55
  var busWidth = Math.trunc(size.width / spectrum.length);
56
+ var left = Math.trunc(position.x);
57
+ var top = Math.trunc(position.y);
57
58
  var margin = 4;
58
59
  for (var spectrumX = 0; spectrumX < spectrum.length; spectrumX++) {
59
60
  var spectrumValue = spectrum[spectrumX];
60
61
  if ((spectrumValue > 1) || (spectrumValue < 0)) {
61
62
  throw new Error('Spectrum values must be in range from 0 to 1');
62
63
  }
63
- var rectX = paddingLeft + busWidth * spectrumX;
64
+ var rectX = left + busWidth * spectrumX;
64
65
  var rectHeight = size.height * spectrumValue;
65
- exports.drawRect(imageDstBuffer, { x: rectX + margin, y: 0 }, { width: busWidth - margin / 2, height: rectHeight }, color);
66
+ exports.drawRect(imageDstBuffer, { x: rectX + margin, y: top }, { width: busWidth - margin / 2, height: rectHeight }, color);
66
67
  }
67
68
  };
68
- exports.createVisualizerFrame = function (backgroundImageBuffer, spectrum, size, color) {
69
+ exports.createVisualizerFrame = function (backgroundImageBuffer, spectrum, size, position, color) {
69
70
  var image = Object.assign({}, backgroundImageBuffer);
70
71
  image.data = Buffer.from(image.data);
71
72
  var rgbSpectrumColor = (typeof color === 'string') ? hexToRgb(color) : color;
72
- drawSpectrum(image, spectrum, size, rgbSpectrumColor);
73
+ drawSpectrum(image, spectrum, size, position, rgbSpectrumColor);
73
74
  return image;
74
75
  };
75
76
  exports.convertToBmp = function (filePath) { 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
@@ -3,7 +3,7 @@ import { Color } from './image';
3
3
  export declare const PCM_FORMAT: {
4
4
  bit: number;
5
5
  sign: string;
6
- parseFunction: (buffer: Buffer) => number[];
6
+ parseFunction: (buffer: Buffer, start: number, end: number) => number[];
7
7
  };
8
8
  export interface Config {
9
9
  audio: {
@@ -18,8 +18,16 @@ export interface Config {
18
18
  spectrum?: {
19
19
  width?: number;
20
20
  height?: number;
21
+ x?: number | PositionAliasName;
22
+ y?: number | PositionAliasName;
21
23
  color?: Color | string;
22
24
  };
23
25
  };
26
+ tweaks?: {
27
+ ffmpeg_cfr?: string;
28
+ ffmpeg_preset?: string;
29
+ frame_processing_delay?: number;
30
+ };
24
31
  }
32
+ export declare type PositionAliasName = 'left' | 'center' | 'right' | 'top' | 'middle' | 'bottom';
25
33
  export declare const renderAudioVisualizer: (config: Config, onProgress?: ((progress: number) => any) | undefined, shouldStop?: (() => boolean) | undefined) => Promise<number>;
package/dist/index.js CHANGED
@@ -46,11 +46,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
47
  }
48
48
  };
49
- var __importDefault = (this && this.__importDefault) || function (mod) {
50
- return (mod && mod.__esModule) ? mod : { "default": mod };
51
- };
52
49
  Object.defineProperty(exports, "__esModule", { value: true });
53
- var path_1 = __importDefault(require("path"));
50
+ var config_1 = require("./config");
54
51
  var audio_1 = require("./audio");
55
52
  var image_1 = require("./image");
56
53
  var video_1 = require("./video");
@@ -60,15 +57,18 @@ exports.PCM_FORMAT = {
60
57
  parseFunction: audio_1.bufferToUInt8
61
58
  };
62
59
  var FFMPEG_FORMAT = "" + exports.PCM_FORMAT.sign + exports.PCM_FORMAT.bit;
60
+ var sleep = function (timeout) {
61
+ return new Promise(function (resolve) { return setTimeout(resolve, timeout); });
62
+ };
63
63
  exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
64
64
  return new Promise(function (resolve) { return __awaiter(void 0, void 0, void 0, function () {
65
- var audioFilePath, backgroundImagePath, outVideoPath, backgroundImageBmpBuffer, backgroundImage, audioReader, audioBuffer, sampleRate, audioData, normalizedAudioData, FPS, spectrumWidth, spectrumHeight, spectrumColor, audioDuration, framesCount, audioDataStep, spectrums, spectrumsReduced, ffmpegVideoWriter, i, frameImage, frameImageBuffer, isFrameProcessed;
65
+ var audioFilePath, backgroundImagePath, outVideoPath, backgroundImageBmpBuffer, backgroundImage, audioReader, audioBuffer, sampleRate, FPS, spectrumWidth, spectrumHeight, spectrumX, spectrumY, spectrumColor, ffmpeg_cfr, ffmpeg_preset, frame_processing_delay, spectrumBusesCount, audioDuration, framesCount, audioDataStep, ffmpegVideoWriter, processSpectrum, _loop_1, i, state_1;
66
66
  return __generator(this, function (_a) {
67
67
  switch (_a.label) {
68
68
  case 0:
69
- audioFilePath = path_1.default.resolve(config.audio.path);
70
- backgroundImagePath = path_1.default.resolve(config.image.path);
71
- outVideoPath = path_1.default.resolve(config.outVideo.path);
69
+ audioFilePath = config_1.getAudioFilePath(config);
70
+ backgroundImagePath = config_1.getBackgroundImagePath(config);
71
+ outVideoPath = config_1.getOutVideoPath(config);
72
72
  return [4 /*yield*/, image_1.convertToBmp(backgroundImagePath)];
73
73
  case 1:
74
74
  backgroundImageBmpBuffer = _a.sent();
@@ -81,43 +81,67 @@ exports.renderAudioVisualizer = function (config, onProgress, shouldStop) {
81
81
  if (!sampleRate) {
82
82
  throw new Error('ffmpeg didn\'t show audio sample rate');
83
83
  }
84
- audioData = exports.PCM_FORMAT.parseFunction(audioBuffer);
85
- normalizedAudioData = audio_1.normalizeAudioData(audioData);
86
- FPS = config.outVideo.fps || 60;
87
- spectrumWidth = (config.outVideo.spectrum && config.outVideo.spectrum.width) ||
88
- backgroundImage.width * 0.4;
89
- spectrumHeight = (config.outVideo.spectrum && config.outVideo.spectrum.height) ||
90
- backgroundImage.height * 0.1;
91
- spectrumColor = (config.outVideo.spectrum && config.outVideo.spectrum.color) ||
84
+ FPS = config_1.getFPS(config);
85
+ spectrumWidth = config_1.getSpectrumWidthAbsolute(config, backgroundImage.width);
86
+ spectrumHeight = config_1.getSpectrumHeightAbsolute(config, backgroundImage.height);
87
+ spectrumX = config_1.getSpectrumXAbsolute(config, spectrumWidth, backgroundImage.width);
88
+ spectrumY = config_1.getSpectrumYAbsolute(config, spectrumHeight, backgroundImage.height);
89
+ spectrumColor = config_1.getSpectrumColor(config) ||
92
90
  image_1.invertColor(image_1.getImageColor(backgroundImage));
93
- audioDuration = audioData.length / sampleRate;
91
+ ffmpeg_cfr = config_1.getFfmpeg_cfr(config);
92
+ ffmpeg_preset = config_1.getFfmpeg_preset(config);
93
+ frame_processing_delay = config_1.getFrame_processing_delay(config);
94
+ spectrumBusesCount = 64;
95
+ audioDuration = audioBuffer.length / sampleRate;
94
96
  framesCount = Math.trunc(audioDuration * FPS);
95
- audioDataStep = Math.trunc(audioData.length / framesCount);
96
- spectrums = audio_1.getSmoothSpectrums(normalizedAudioData, FPS, audioDataStep);
97
- spectrumsReduced = spectrums.map(function (spectrum) { return spectrum.filter(audio_1.skipEvery(4)); });
98
- ffmpegVideoWriter = video_1.spawnFfmpegVideoWriter(__assign({ audioFilename: audioFilePath, videoFileName: outVideoPath, fps: FPS }, (!!onProgress && { onStderr: video_1.getProgress(video_1.calculateProgress(framesCount + 1, onProgress)) })));
97
+ audioDataStep = Math.trunc(audioBuffer.length / framesCount);
98
+ 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 })));
99
99
  ffmpegVideoWriter.on('exit', function (code) { return resolve(code); });
100
+ processSpectrum = audio_1.createSpectrumsProcessor(spectrumBusesCount);
101
+ _loop_1 = function (i) {
102
+ var audioDataParser, spectrum, frameImage, frameImageBuffer, isFrameProcessed;
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ audioDataParser = function () {
107
+ return exports.PCM_FORMAT.parseFunction(audioBuffer, i * audioDataStep, i * audioDataStep + audioDataStep);
108
+ };
109
+ spectrum = processSpectrum(i, audioDataParser);
110
+ frameImage = image_1.createVisualizerFrame(backgroundImage, spectrum, { width: spectrumWidth, height: spectrumHeight }, { x: spectrumX, y: spectrumY }, spectrumColor);
111
+ frameImageBuffer = image_1.createImageBuffer(frameImage);
112
+ isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImageBuffer);
113
+ if (!!isFrameProcessed) return [3 /*break*/, 2];
114
+ return [4 /*yield*/, video_1.waitDrain(ffmpegVideoWriter.stdin)];
115
+ case 1:
116
+ _a.sent();
117
+ _a.label = 2;
118
+ case 2:
119
+ if (shouldStop && shouldStop()) {
120
+ return [2 /*return*/, "break"];
121
+ }
122
+ if (!frame_processing_delay) return [3 /*break*/, 4];
123
+ return [4 /*yield*/, sleep(frame_processing_delay)];
124
+ case 3:
125
+ _a.sent();
126
+ _a.label = 4;
127
+ case 4: return [2 /*return*/];
128
+ }
129
+ });
130
+ };
100
131
  i = 0;
101
132
  _a.label = 3;
102
133
  case 3:
103
- if (!(i < framesCount)) return [3 /*break*/, 7];
104
- frameImage = image_1.createVisualizerFrame(backgroundImage, spectrumsReduced[i], { width: spectrumWidth, height: spectrumHeight }, spectrumColor);
105
- frameImageBuffer = image_1.createImageBuffer(frameImage);
106
- isFrameProcessed = ffmpegVideoWriter.stdin.write(frameImageBuffer);
107
- if (!!isFrameProcessed) return [3 /*break*/, 5];
108
- return [4 /*yield*/, video_1.waitDrain(ffmpegVideoWriter.stdin)];
134
+ if (!(i < framesCount)) return [3 /*break*/, 6];
135
+ return [5 /*yield**/, _loop_1(i)];
109
136
  case 4:
110
- _a.sent();
137
+ state_1 = _a.sent();
138
+ if (state_1 === "break")
139
+ return [3 /*break*/, 6];
111
140
  _a.label = 5;
112
141
  case 5:
113
- if (shouldStop && shouldStop()) {
114
- return [3 /*break*/, 7];
115
- }
116
- _a.label = 6;
117
- case 6:
118
142
  i++;
119
143
  return [3 /*break*/, 3];
120
- case 7:
144
+ case 6:
121
145
  ffmpegVideoWriter.stdin.end();
122
146
  return [2 /*return*/];
123
147
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/video.d.ts CHANGED
@@ -4,6 +4,8 @@ interface FfmpegVideoWriterConfig {
4
4
  audioFilename: string;
5
5
  videoFileName: string;
6
6
  fps: number;
7
+ crf?: string;
8
+ preset?: string;
7
9
  onStderr?: (data: any) => any;
8
10
  }
9
11
  export declare const spawnFfmpegVideoWriter: (config: FfmpegVideoWriterConfig) => import("child_process").ChildProcessWithoutNullStreams;