nodejs-audio-visualizer 5.0.0 → 5.1.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 +1 -1
- package/dist/audio.d.ts +1 -0
- package/dist/audio.js +8 -0
- package/dist/audio.js.map +1 -1
- package/dist/beats.d.ts +20 -0
- package/dist/beats.js +180 -3
- package/dist/beats.js.map +1 -1
- package/dist/highlight.d.ts +2 -0
- package/dist/highlight.js +33 -24
- package/dist/highlight.js.map +1 -1
- package/dist/image.d.ts +13 -0
- package/dist/image.js +80 -0
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +66 -34
- package/dist/index.js.map +1 -1
- package/dist/video.d.ts +41 -1
- package/dist/video.js +150 -2
- package/dist/video.js.map +1 -1
- package/package.json +3 -2
- package/src/audio.ts +9 -0
- package/src/beats.ts +214 -3
- package/src/highlight.ts +21 -14
- package/src/image.ts +98 -0
- package/src/index.ts +57 -6
- package/src/tests/audio.test.ts +6 -0
- package/src/tests/beats.test.ts +134 -0
- package/src/tests/image.test.ts +86 -0
- package/src/tests/video.test.ts +163 -1
- package/src/typings.d.ts +22 -0
- package/src/video.ts +173 -1
package/dist/video.js
CHANGED
|
@@ -27,6 +27,7 @@ var path_1 = require("path");
|
|
|
27
27
|
var os_1 = require("os");
|
|
28
28
|
var ffmpeg_static_1 = __importDefault(require("ffmpeg-static"));
|
|
29
29
|
var config_1 = require("./config");
|
|
30
|
+
var beats_1 = require("./beats");
|
|
30
31
|
var escapeSubtitleFilterPath = function (subtitlePath) {
|
|
31
32
|
return subtitlePath
|
|
32
33
|
.replace(/\\/g, '\\\\')
|
|
@@ -339,7 +340,133 @@ var mergeSmallScenes = function (sceneChanges, videoDuration, minDuration) {
|
|
|
339
340
|
}
|
|
340
341
|
return merged;
|
|
341
342
|
};
|
|
342
|
-
|
|
343
|
+
/** Minimum time between auto-edit cuts; cuts still land on beats. */
|
|
344
|
+
exports.DEFAULT_AUTO_EDIT_MIN_CUT_INTERVAL_SECONDS = 2;
|
|
345
|
+
/** Window after the minimum gap in which the strongest beat is chosen. */
|
|
346
|
+
exports.DEFAULT_AUTO_EDIT_MAX_CUT_INTERVAL_SECONDS = 4;
|
|
347
|
+
/** Half a bar of 4/4, used as the minimum gap when tempo is known. */
|
|
348
|
+
exports.AUTO_EDIT_MIN_CUT_BEATS = 2;
|
|
349
|
+
/** One bar of 4/4, used as the maximum gap when tempo is known. */
|
|
350
|
+
exports.AUTO_EDIT_MAX_CUT_BEATS = 4;
|
|
351
|
+
/** Snap an onset to the tempo grid when it is within this fraction of a beat. */
|
|
352
|
+
exports.BEAT_SNAP_TOLERANCE = 0.25;
|
|
353
|
+
exports.cutIntervalSecondsFromTempo = function (bpm) { return ({
|
|
354
|
+
minCutIntervalSeconds: exports.AUTO_EDIT_MIN_CUT_BEATS * (60 / bpm),
|
|
355
|
+
maxCutIntervalSeconds: exports.AUTO_EDIT_MAX_CUT_BEATS * (60 / bpm),
|
|
356
|
+
}); };
|
|
357
|
+
exports.snapBeatsToTempoGrid = function (beats, tempo, totalFrames) {
|
|
358
|
+
var period = tempo.periodFrames;
|
|
359
|
+
if (!(period > 0)) {
|
|
360
|
+
return beats.slice();
|
|
361
|
+
}
|
|
362
|
+
var maxSnap = Math.max(1, period * exports.BEAT_SNAP_TOLERANCE);
|
|
363
|
+
var merged = [];
|
|
364
|
+
var push = function (beat) {
|
|
365
|
+
var _a, _b;
|
|
366
|
+
for (var i = 0; i < merged.length; i++) {
|
|
367
|
+
if (merged[i].frameIndex === beat.frameIndex) {
|
|
368
|
+
if ((_a = beat.intensity, (_a !== null && _a !== void 0 ? _a : 0)) > (_b = merged[i].intensity, (_b !== null && _b !== void 0 ? _b : 0))) {
|
|
369
|
+
merged[i] = beat;
|
|
370
|
+
}
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
merged.push(beat);
|
|
375
|
+
};
|
|
376
|
+
for (var _i = 0, beats_2 = beats; _i < beats_2.length; _i++) {
|
|
377
|
+
var beat = beats_2[_i];
|
|
378
|
+
var n = Math.round((beat.frameIndex - tempo.phaseFrame) / period);
|
|
379
|
+
var grid = Math.round(tempo.phaseFrame + n * period);
|
|
380
|
+
var dist = Math.abs(beat.frameIndex - grid);
|
|
381
|
+
if (dist <= maxSnap && grid > 0 && grid < totalFrames) {
|
|
382
|
+
push({ frameIndex: grid, intensity: beat.intensity });
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
push(beat);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return merged.sort(function (a, b) { return a.frameIndex - b.frameIndex; });
|
|
389
|
+
};
|
|
390
|
+
/** Every BPM-grid beat, with onset intensity copied onto the nearest grid frame. */
|
|
391
|
+
exports.projectBeatsOntoTempoGrid = function (beats, tempo, totalFrames) {
|
|
392
|
+
var _a, _b;
|
|
393
|
+
var grid = beats_1.beatGridFrameIndices(tempo, totalFrames);
|
|
394
|
+
if (grid.length === 0) {
|
|
395
|
+
return [];
|
|
396
|
+
}
|
|
397
|
+
var period = tempo.periodFrames;
|
|
398
|
+
var maxSnap = Math.max(1, period * exports.BEAT_SNAP_TOLERANCE);
|
|
399
|
+
var intensityByFrame = new Map();
|
|
400
|
+
for (var _i = 0, beats_3 = beats; _i < beats_3.length; _i++) {
|
|
401
|
+
var beat = beats_3[_i];
|
|
402
|
+
var n = Math.round((beat.frameIndex - tempo.phaseFrame) / period);
|
|
403
|
+
var gridFrame = Math.round(tempo.phaseFrame + n * period);
|
|
404
|
+
if (Math.abs(beat.frameIndex - gridFrame) > maxSnap) {
|
|
405
|
+
continue;
|
|
406
|
+
}
|
|
407
|
+
if (gridFrame <= 0 || gridFrame >= totalFrames) {
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
var intensity = (_a = beat.intensity, (_a !== null && _a !== void 0 ? _a : 0));
|
|
411
|
+
if (intensity >= (_b = intensityByFrame.get(gridFrame), (_b !== null && _b !== void 0 ? _b : 0))) {
|
|
412
|
+
intensityByFrame.set(gridFrame, intensity);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return grid.map(function (frameIndex) {
|
|
416
|
+
var _a;
|
|
417
|
+
return ({
|
|
418
|
+
frameIndex: frameIndex,
|
|
419
|
+
intensity: (_a = intensityByFrame.get(frameIndex), (_a !== null && _a !== void 0 ? _a : 0)),
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
};
|
|
423
|
+
exports.selectAutoEditCutFrames = function (beats, fps, totalFrames, minIntervalSeconds, maxIntervalSeconds) {
|
|
424
|
+
if (minIntervalSeconds === void 0) { minIntervalSeconds = exports.DEFAULT_AUTO_EDIT_MIN_CUT_INTERVAL_SECONDS; }
|
|
425
|
+
if (maxIntervalSeconds === void 0) { maxIntervalSeconds = exports.DEFAULT_AUTO_EDIT_MAX_CUT_INTERVAL_SECONDS; }
|
|
426
|
+
var _a, _b;
|
|
427
|
+
var sorted = beats
|
|
428
|
+
.filter(function (beat) { return beat.frameIndex > 0 && beat.frameIndex < totalFrames; })
|
|
429
|
+
.sort(function (a, b) { return a.frameIndex - b.frameIndex; });
|
|
430
|
+
if (sorted.length === 0 || fps <= 0) {
|
|
431
|
+
return [];
|
|
432
|
+
}
|
|
433
|
+
if (minIntervalSeconds <= 0) {
|
|
434
|
+
return sorted.map(function (beat) { return beat.frameIndex; });
|
|
435
|
+
}
|
|
436
|
+
var minGap = Math.max(1, Math.round(fps * minIntervalSeconds));
|
|
437
|
+
var maxGap = Math.max(minGap, Math.round(fps * maxIntervalSeconds));
|
|
438
|
+
var selected = [];
|
|
439
|
+
var lastCut = 0;
|
|
440
|
+
while (lastCut + minGap < totalFrames) {
|
|
441
|
+
var windowStart = lastCut + minGap;
|
|
442
|
+
var windowEnd = Math.min(lastCut + maxGap, totalFrames);
|
|
443
|
+
var best = void 0;
|
|
444
|
+
var nextAfterWindow = void 0;
|
|
445
|
+
for (var _i = 0, sorted_1 = sorted; _i < sorted_1.length; _i++) {
|
|
446
|
+
var beat = sorted_1[_i];
|
|
447
|
+
if (beat.frameIndex < windowStart) {
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
if (beat.frameIndex >= windowEnd) {
|
|
451
|
+
nextAfterWindow = beat;
|
|
452
|
+
break;
|
|
453
|
+
}
|
|
454
|
+
var intensity = (_a = beat.intensity, (_a !== null && _a !== void 0 ? _a : 0));
|
|
455
|
+
if (!best || intensity > (_b = best.intensity, (_b !== null && _b !== void 0 ? _b : 0))) {
|
|
456
|
+
best = beat;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
var chosen = (best !== null && best !== void 0 ? best : nextAfterWindow);
|
|
460
|
+
if (!chosen) {
|
|
461
|
+
break;
|
|
462
|
+
}
|
|
463
|
+
selected.push(chosen.frameIndex);
|
|
464
|
+
lastCut = chosen.frameIndex;
|
|
465
|
+
}
|
|
466
|
+
return selected;
|
|
467
|
+
};
|
|
468
|
+
exports.buildBeatSyncedSegments = function (beatFrameIndices, totalFrames, sceneChanges, videoDuration, fps, options) {
|
|
469
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
343
470
|
if (sceneChanges.length === 0) {
|
|
344
471
|
return [
|
|
345
472
|
{
|
|
@@ -358,7 +485,22 @@ exports.buildBeatSyncedSegments = function (beatFrameIndices, totalFrames, scene
|
|
|
358
485
|
var count_1 = Math.max(10, Math.ceil(videoDuration / 3));
|
|
359
486
|
seekPositions = Array.from({ length: count_1 }, function (_, i) { return (i * videoDuration) / count_1; });
|
|
360
487
|
}
|
|
361
|
-
var
|
|
488
|
+
var tempo = (_a = options) === null || _a === void 0 ? void 0 : _a.tempo;
|
|
489
|
+
var tempoIntervals = tempo && tempo.bpm > 0
|
|
490
|
+
? exports.cutIntervalSecondsFromTempo(tempo.bpm)
|
|
491
|
+
: undefined;
|
|
492
|
+
var beats = beatFrameIndices.map(function (frameIndex, i) {
|
|
493
|
+
var _a, _b;
|
|
494
|
+
return ({
|
|
495
|
+
frameIndex: frameIndex,
|
|
496
|
+
intensity: (_b = (_a = options) === null || _a === void 0 ? void 0 : _a.beatIntensities) === null || _b === void 0 ? void 0 : _b[i],
|
|
497
|
+
});
|
|
498
|
+
});
|
|
499
|
+
if (tempo) {
|
|
500
|
+
beats = exports.projectBeatsOntoTempoGrid(beats, tempo, totalFrames);
|
|
501
|
+
}
|
|
502
|
+
var cutBeats = exports.selectAutoEditCutFrames(beats, fps, totalFrames, (_c = (_b = options) === null || _b === void 0 ? void 0 : _b.minCutIntervalSeconds, (_c !== null && _c !== void 0 ? _c : (_d = tempoIntervals) === null || _d === void 0 ? void 0 : _d.minCutIntervalSeconds)), (_f = (_e = options) === null || _e === void 0 ? void 0 : _e.maxCutIntervalSeconds, (_f !== null && _f !== void 0 ? _f : (_g = tempoIntervals) === null || _g === void 0 ? void 0 : _g.maxCutIntervalSeconds)));
|
|
503
|
+
var boundaries = __spreadArrays([0], cutBeats);
|
|
362
504
|
if (boundaries[boundaries.length - 1] !== totalFrames) {
|
|
363
505
|
boundaries.push(totalFrames);
|
|
364
506
|
}
|
|
@@ -373,6 +515,12 @@ exports.buildBeatSyncedSegments = function (beatFrameIndices, totalFrames, scene
|
|
|
373
515
|
}
|
|
374
516
|
return segments;
|
|
375
517
|
};
|
|
518
|
+
exports.getCutFrameIndices = function (segments) {
|
|
519
|
+
return segments
|
|
520
|
+
.slice(1)
|
|
521
|
+
.map(function (segment) { return segment.outputStartFrame; })
|
|
522
|
+
.filter(function (frameIndex) { return frameIndex > 0; });
|
|
523
|
+
};
|
|
376
524
|
exports.writeConcatFile = function (segments, videoPath, videoDuration, fps) {
|
|
377
525
|
var absVideoPath = path_1.resolve(videoPath).replace(/\\/g, '/');
|
|
378
526
|
var escaped = absVideoPath.replace(/'/g, "'\\''");
|
package/dist/video.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.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": "5.
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
"bmp-js": "^0.1.0",
|
|
57
57
|
"ffmpeg-static": "^5.2.0",
|
|
58
58
|
"fft-js": "^0.0.12",
|
|
59
|
-
"jimp": "^0.9.3"
|
|
59
|
+
"jimp": "^0.9.3",
|
|
60
|
+
"music-tempo": "^1.0.3"
|
|
60
61
|
}
|
|
61
62
|
}
|
package/src/audio.ts
CHANGED
|
@@ -88,6 +88,15 @@ export const bufferToUInt8 = (buffer: Buffer, start: number, end: number) => {
|
|
|
88
88
|
export const normalizeAudioData = (PCMData: number[]) =>
|
|
89
89
|
PCMData.map(num => (num - 128) / 128);
|
|
90
90
|
|
|
91
|
+
export const pcmU8ToFloatSamples = (buffer: Buffer): number[] => {
|
|
92
|
+
const n = buffer.length;
|
|
93
|
+
const samples = new Array<number>(n);
|
|
94
|
+
for (let i = 0; i < n; i++) {
|
|
95
|
+
samples[i] = (buffer[i] - 128) / 128;
|
|
96
|
+
}
|
|
97
|
+
return samples;
|
|
98
|
+
};
|
|
99
|
+
|
|
91
100
|
export const spawnFfmpegAudioReader = (filename: string, format: string) => {
|
|
92
101
|
if (!ffmpegPath) {
|
|
93
102
|
throw new Error('ffmpeg path not found');
|
package/src/beats.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import MusicTempo from 'music-tempo';
|
|
2
|
+
|
|
1
3
|
export interface BeatInfo {
|
|
2
4
|
isBeat: boolean;
|
|
3
5
|
intensity: number;
|
|
@@ -18,20 +20,49 @@ export interface BeatDetectorOptions {
|
|
|
18
20
|
bassEndIndex?: number;
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
export interface TempoEstimate {
|
|
24
|
+
bpm: number;
|
|
25
|
+
periodFrames: number;
|
|
26
|
+
phaseFrame: number;
|
|
27
|
+
/** Beat times in seconds from the start of the analyzed audio. */
|
|
28
|
+
beatsSec?: number[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const MIN_TEMPO_BPM = 70;
|
|
32
|
+
export const MAX_TEMPO_BPM = 180;
|
|
33
|
+
export const PREFERRED_TEMPO_BPM_MIN = 90;
|
|
34
|
+
export const PREFERRED_TEMPO_BPM_MAX = 160;
|
|
35
|
+
export const DEFAULT_BASS_END_INDEX = 8;
|
|
36
|
+
/** Longest PCM window passed to music-tempo (seconds), taken from the start of the audio. */
|
|
37
|
+
export const MAX_TEMPO_ANALYSIS_SECONDS = 90;
|
|
38
|
+
const TEMPO_TIME_STEP = 0.01;
|
|
39
|
+
|
|
40
|
+
export const frameBassEnergy = (spectrum: number[], bassEndIndex = DEFAULT_BASS_END_INDEX): number => {
|
|
41
|
+
const end = Math.min(bassEndIndex, spectrum.length);
|
|
42
|
+
if (end <= 0) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
let sum = 0;
|
|
46
|
+
for (let i = 0; i < end; i++) {
|
|
47
|
+
const v = spectrum[i];
|
|
48
|
+
sum += v * v;
|
|
49
|
+
}
|
|
50
|
+
return sum / end;
|
|
51
|
+
};
|
|
52
|
+
|
|
21
53
|
export const createBeatDetector = (fps: number, options?: BeatDetectorOptions) => {
|
|
22
54
|
const historySize = options?.historySize ?? Math.round(fps * 1.5);
|
|
23
55
|
const thresholdMultiplier = options?.thresholdMultiplier ?? 1.4;
|
|
24
56
|
const decayRate = options?.decayRate ?? 0.85;
|
|
25
57
|
const cooldownFrames = options?.cooldownFrames ?? Math.round(fps * 0.15);
|
|
26
|
-
const bassEndIndex = options?.bassEndIndex ??
|
|
58
|
+
const bassEndIndex = options?.bassEndIndex ?? DEFAULT_BASS_END_INDEX;
|
|
27
59
|
|
|
28
60
|
const energyHistory: number[] = [];
|
|
29
61
|
let framesSinceLastBeat = cooldownFrames;
|
|
30
62
|
let decayingIntensity = 0;
|
|
31
63
|
|
|
32
64
|
return (spectrum: number[]): BeatInfo => {
|
|
33
|
-
const
|
|
34
|
-
const energy = bassSpectrum.reduce((sum, val) => sum + val * val, 0) / bassSpectrum.length;
|
|
65
|
+
const energy = frameBassEnergy(spectrum, bassEndIndex);
|
|
35
66
|
|
|
36
67
|
energyHistory.push(energy);
|
|
37
68
|
if (energyHistory.length > historySize) {
|
|
@@ -66,3 +97,183 @@ export const createBeatDetector = (fps: number, options?: BeatDetectorOptions) =
|
|
|
66
97
|
};
|
|
67
98
|
};
|
|
68
99
|
};
|
|
100
|
+
|
|
101
|
+
const foldTempoBpm = (bpm: number): number => {
|
|
102
|
+
let folded = bpm;
|
|
103
|
+
while (folded > MAX_TEMPO_BPM && folded / 2 >= MIN_TEMPO_BPM) {
|
|
104
|
+
folded /= 2;
|
|
105
|
+
}
|
|
106
|
+
while (folded < MIN_TEMPO_BPM && folded * 2 <= MAX_TEMPO_BPM) {
|
|
107
|
+
folded *= 2;
|
|
108
|
+
}
|
|
109
|
+
return folded;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const samplesToArray = (samples: ArrayLike<number>, maxLength: number): number[] => {
|
|
113
|
+
const n = Math.min(samples.length, maxLength);
|
|
114
|
+
if (Array.isArray(samples) && n === samples.length) {
|
|
115
|
+
return samples;
|
|
116
|
+
}
|
|
117
|
+
const audioData = new Array<number>(n);
|
|
118
|
+
for (let i = 0; i < n; i++) {
|
|
119
|
+
audioData[i] = samples[i];
|
|
120
|
+
}
|
|
121
|
+
return audioData;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const wrapIntoPeriod = (value: number, period: number): number => {
|
|
125
|
+
if (!(period > 0) || !isFinite(value)) {
|
|
126
|
+
return 0;
|
|
127
|
+
}
|
|
128
|
+
let wrapped = value - period * Math.floor(value / period);
|
|
129
|
+
if (wrapped < 0) {
|
|
130
|
+
wrapped += period;
|
|
131
|
+
}
|
|
132
|
+
if (wrapped >= period) {
|
|
133
|
+
wrapped = 0;
|
|
134
|
+
}
|
|
135
|
+
return wrapped;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
const circularMeanPhase = (frames: number[], period: number): number => {
|
|
139
|
+
if (!(period > 0) || frames.length === 0) {
|
|
140
|
+
return 0;
|
|
141
|
+
}
|
|
142
|
+
let sinSum = 0;
|
|
143
|
+
let cosSum = 0;
|
|
144
|
+
for (const frame of frames) {
|
|
145
|
+
const angle = (2 * Math.PI * frame) / period;
|
|
146
|
+
sinSum += Math.sin(angle);
|
|
147
|
+
cosSum += Math.cos(angle);
|
|
148
|
+
}
|
|
149
|
+
const phase = Math.atan2(sinSum, cosSum) * period / (2 * Math.PI);
|
|
150
|
+
return wrapIntoPeriod(phase, period);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
export const estimateTempo = (
|
|
154
|
+
samples: ArrayLike<number>,
|
|
155
|
+
sampleRate: number,
|
|
156
|
+
fps: number,
|
|
157
|
+
): TempoEstimate | null => {
|
|
158
|
+
if (!samples || samples.length === 0 || !(sampleRate > 0) || !(fps > 0)) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const maxSamples = Math.max(1, Math.floor(sampleRate * MAX_TEMPO_ANALYSIS_SECONDS));
|
|
163
|
+
const audioData = samplesToArray(samples, maxSamples);
|
|
164
|
+
const hopSize = Math.max(1, Math.round(sampleRate * TEMPO_TIME_STEP));
|
|
165
|
+
|
|
166
|
+
try {
|
|
167
|
+
const mt = new MusicTempo(audioData, {
|
|
168
|
+
hopSize,
|
|
169
|
+
timeStep: TEMPO_TIME_STEP,
|
|
170
|
+
minBeatInterval: 60 / MAX_TEMPO_BPM,
|
|
171
|
+
maxBeatInterval: 60 / MIN_TEMPO_BPM,
|
|
172
|
+
});
|
|
173
|
+
const beatInterval = Number(mt.beatInterval);
|
|
174
|
+
let bpm = Number(mt.tempo);
|
|
175
|
+
if (!(bpm > 0) && beatInterval > 0) {
|
|
176
|
+
bpm = 60 / beatInterval;
|
|
177
|
+
}
|
|
178
|
+
if (!(bpm > 0)) {
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
bpm = foldTempoBpm(bpm);
|
|
183
|
+
if (bpm < MIN_TEMPO_BPM * 0.9 || bpm > MAX_TEMPO_BPM * 1.1) {
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const periodFrames = fps * 60 / bpm;
|
|
188
|
+
const beatsSec = (mt.beats ?? [])
|
|
189
|
+
.map(t => Number(t))
|
|
190
|
+
.filter(t => t >= 0 && isFinite(t));
|
|
191
|
+
const beatFrames = beatsSec.map(t => t * fps);
|
|
192
|
+
const phaseFrame = beatFrames.length > 0
|
|
193
|
+
? wrapIntoPeriod(circularMeanPhase(beatFrames, periodFrames), periodFrames)
|
|
194
|
+
: 0;
|
|
195
|
+
|
|
196
|
+
return {
|
|
197
|
+
bpm: Math.round(bpm),
|
|
198
|
+
periodFrames,
|
|
199
|
+
phaseFrame,
|
|
200
|
+
...(beatsSec.length > 0 ? { beatsSec } : {}),
|
|
201
|
+
};
|
|
202
|
+
} catch {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export const shiftTempoPhase = (
|
|
208
|
+
tempo: TempoEstimate,
|
|
209
|
+
startFrame: number,
|
|
210
|
+
): TempoEstimate => {
|
|
211
|
+
const period = tempo.periodFrames;
|
|
212
|
+
if (!(period > 0) || startFrame === 0) {
|
|
213
|
+
return tempo;
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
...tempo,
|
|
217
|
+
phaseFrame: wrapIntoPeriod(tempo.phaseFrame - startFrame, period),
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
/** Beat-grid phase for a later audio window, using in-window beat times when available. */
|
|
222
|
+
export const tempoForWindow = (
|
|
223
|
+
tempo: TempoEstimate,
|
|
224
|
+
startFrame: number,
|
|
225
|
+
fps: number,
|
|
226
|
+
windowFrames?: number,
|
|
227
|
+
localOnsetFrames?: number[],
|
|
228
|
+
): TempoEstimate => {
|
|
229
|
+
const period = tempo.periodFrames;
|
|
230
|
+
if (!(period > 0) || !(fps > 0)) {
|
|
231
|
+
return tempo;
|
|
232
|
+
}
|
|
233
|
+
const startSec = startFrame / fps;
|
|
234
|
+
const endSec = windowFrames != null && windowFrames >= 0
|
|
235
|
+
? (startFrame + windowFrames) / fps
|
|
236
|
+
: Number.POSITIVE_INFINITY;
|
|
237
|
+
const inWindow = (tempo.beatsSec ?? []).filter(t => t >= startSec && t < endSec);
|
|
238
|
+
if (inWindow.length > 0) {
|
|
239
|
+
const localFrames = inWindow.map(t => (t - startSec) * fps);
|
|
240
|
+
return {
|
|
241
|
+
...tempo,
|
|
242
|
+
phaseFrame: wrapIntoPeriod(circularMeanPhase(localFrames, period), period),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
const onsets = (localOnsetFrames ?? []).filter(frame =>
|
|
246
|
+
frame > 0 && (windowFrames == null || frame < windowFrames),
|
|
247
|
+
);
|
|
248
|
+
if (onsets.length > 0) {
|
|
249
|
+
return {
|
|
250
|
+
...tempo,
|
|
251
|
+
phaseFrame: wrapIntoPeriod(circularMeanPhase(onsets, period), period),
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
return shiftTempoPhase(tempo, startFrame);
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
export const beatGridFrameIndices = (
|
|
258
|
+
tempo: Pick<TempoEstimate, 'periodFrames' | 'phaseFrame'>,
|
|
259
|
+
totalFrames: number,
|
|
260
|
+
stride = 1,
|
|
261
|
+
): number[] => {
|
|
262
|
+
const period = tempo.periodFrames;
|
|
263
|
+
const step = Math.max(1, Math.round(stride));
|
|
264
|
+
if (!(period > 0) || totalFrames <= 1) {
|
|
265
|
+
return [];
|
|
266
|
+
}
|
|
267
|
+
const frames: number[] = [];
|
|
268
|
+
const nStart = tempo.phaseFrame > 0 ? 0 : 1;
|
|
269
|
+
for (let n = nStart; ; n += step) {
|
|
270
|
+
const frame = Math.round(tempo.phaseFrame + n * period);
|
|
271
|
+
if (frame >= totalFrames) {
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
if (frame > 0) {
|
|
275
|
+
frames.push(frame);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return frames;
|
|
279
|
+
};
|
package/src/highlight.ts
CHANGED
|
@@ -20,6 +20,7 @@ export interface HighlightRun {
|
|
|
20
20
|
highlightFrames: number;
|
|
21
21
|
spectrums: number[][];
|
|
22
22
|
beatFrameIndices: number[];
|
|
23
|
+
beatIntensities: number[];
|
|
23
24
|
audioSegment: HighlightAudioSegment;
|
|
24
25
|
}
|
|
25
26
|
|
|
@@ -31,16 +32,17 @@ function buildHighlightRun(
|
|
|
31
32
|
): HighlightRun {
|
|
32
33
|
const { startFrame, highlightFrames } = seg;
|
|
33
34
|
const spectrumsSlice = spectrums.slice(startFrame, startFrame + highlightFrames);
|
|
34
|
-
const
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
const beatsInWindow = beatEvents
|
|
36
|
+
.filter(b => b.frameIndex >= startFrame && b.frameIndex < startFrame + highlightFrames)
|
|
37
|
+
.sort((a, b) => a.frameIndex - b.frameIndex);
|
|
38
|
+
const beatFrameIndices = beatsInWindow.map(b => b.frameIndex - startFrame);
|
|
39
|
+
const beatIntensities = beatsInWindow.map(b => b.intensity);
|
|
39
40
|
return {
|
|
40
41
|
startFrame,
|
|
41
42
|
highlightFrames,
|
|
42
43
|
spectrums: spectrumsSlice,
|
|
43
44
|
beatFrameIndices,
|
|
45
|
+
beatIntensities,
|
|
44
46
|
audioSegment: {
|
|
45
47
|
seekSeconds: startFrame / fps,
|
|
46
48
|
durationSeconds: highlightFrames / fps,
|
|
@@ -178,6 +180,7 @@ export async function computeHighlightSlice(
|
|
|
178
180
|
highlightFrames: number;
|
|
179
181
|
spectrums: number[][];
|
|
180
182
|
beatFrameIndices: number[];
|
|
183
|
+
beatIntensities: number[];
|
|
181
184
|
audioSeekSeconds: number;
|
|
182
185
|
audioDurationSeconds: number;
|
|
183
186
|
audioSegments: HighlightAudioSegment[];
|
|
@@ -191,6 +194,7 @@ export async function computeHighlightSlice(
|
|
|
191
194
|
highlightFrames: 0,
|
|
192
195
|
spectrums: [],
|
|
193
196
|
beatFrameIndices: [],
|
|
197
|
+
beatIntensities: [],
|
|
194
198
|
audioSeekSeconds: 0,
|
|
195
199
|
audioDurationSeconds: 0,
|
|
196
200
|
audioSegments: [],
|
|
@@ -206,15 +210,17 @@ export async function computeHighlightSlice(
|
|
|
206
210
|
},
|
|
207
211
|
];
|
|
208
212
|
const fullSeg = { startFrame: 0, highlightFrames: totalFrames };
|
|
213
|
+
const fullRun = buildHighlightRun(fps, fullSeg, spectrums, beatEvents);
|
|
209
214
|
return {
|
|
210
215
|
startFrame: 0,
|
|
211
216
|
highlightFrames: totalFrames,
|
|
212
217
|
spectrums: spectrums.slice(),
|
|
213
|
-
beatFrameIndices:
|
|
218
|
+
beatFrameIndices: fullRun.beatFrameIndices,
|
|
219
|
+
beatIntensities: fullRun.beatIntensities,
|
|
214
220
|
audioSeekSeconds: 0,
|
|
215
221
|
audioDurationSeconds: totalFrames / fps,
|
|
216
222
|
audioSegments,
|
|
217
|
-
runs: [
|
|
223
|
+
runs: [fullRun],
|
|
218
224
|
};
|
|
219
225
|
}
|
|
220
226
|
|
|
@@ -246,23 +252,23 @@ export async function computeHighlightSlice(
|
|
|
246
252
|
|
|
247
253
|
const slicedSpectrums: number[][] = [];
|
|
248
254
|
const beatFrameIndices: number[] = [];
|
|
255
|
+
const beatIntensities: number[] = [];
|
|
249
256
|
let outOffset = 0;
|
|
250
257
|
|
|
251
258
|
for (const seg of rawSegments) {
|
|
252
259
|
const chunk = spectrums.slice(seg.startFrame, seg.startFrame + seg.highlightFrames);
|
|
253
260
|
slicedSpectrums.push(...chunk);
|
|
254
261
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
262
|
+
const beatsInSeg = beatEvents
|
|
263
|
+
.filter(b => b.frameIndex >= seg.startFrame && b.frameIndex < seg.startFrame + seg.highlightFrames)
|
|
264
|
+
.sort((a, b) => a.frameIndex - b.frameIndex);
|
|
265
|
+
for (const b of beatsInSeg) {
|
|
266
|
+
beatFrameIndices.push(b.frameIndex - seg.startFrame + outOffset);
|
|
267
|
+
beatIntensities.push(b.intensity);
|
|
260
268
|
}
|
|
261
269
|
outOffset += seg.highlightFrames;
|
|
262
270
|
}
|
|
263
271
|
|
|
264
|
-
beatFrameIndices.sort((a, b) => a - b);
|
|
265
|
-
|
|
266
272
|
const totalHighlightFrames = slicedSpectrums.length;
|
|
267
273
|
const audioSegments: HighlightAudioSegment[] = rawSegments.map(seg => ({
|
|
268
274
|
seekSeconds: seg.startFrame / fps,
|
|
@@ -276,6 +282,7 @@ export async function computeHighlightSlice(
|
|
|
276
282
|
highlightFrames: totalHighlightFrames,
|
|
277
283
|
spectrums: slicedSpectrums,
|
|
278
284
|
beatFrameIndices,
|
|
285
|
+
beatIntensities,
|
|
279
286
|
audioSeekSeconds: first.seekSeconds,
|
|
280
287
|
audioDurationSeconds: first.durationSeconds,
|
|
281
288
|
audioSegments,
|