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/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
- exports.buildBeatSyncedSegments = function (beatFrameIndices, totalFrames, sceneChanges, videoDuration) {
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 boundaries = __spreadArrays([0], beatFrameIndices);
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.0.0",
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 ?? 8;
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 bassSpectrum = spectrum.slice(0, Math.min(bassEndIndex, spectrum.length));
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 beatFrameIndices = beatEvents
35
- .map(b => b.frameIndex)
36
- .filter(i => i >= startFrame && i < startFrame + highlightFrames)
37
- .map(i => i - startFrame)
38
- .sort((a, b) => a - b);
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: beatEvents.map(b => b.frameIndex).sort((a, b) => a - b),
218
+ beatFrameIndices: fullRun.beatFrameIndices,
219
+ beatIntensities: fullRun.beatIntensities,
214
220
  audioSeekSeconds: 0,
215
221
  audioDurationSeconds: totalFrames / fps,
216
222
  audioSegments,
217
- runs: [buildHighlightRun(fps, fullSeg, spectrums, beatEvents)],
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
- for (const b of beatEvents) {
256
- const i = b.frameIndex;
257
- if (i >= seg.startFrame && i < seg.startFrame + seg.highlightFrames) {
258
- beatFrameIndices.push(i - seg.startFrame + outOffset);
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,