saltfish 0.2.78 → 0.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/dist/core/services/StateMachineActionHandler.d.ts.map +1 -1
- package/dist/managers/AudioVisualizationManager.d.ts +108 -0
- package/dist/managers/AudioVisualizationManager.d.ts.map +1 -0
- package/dist/managers/VideoManager.d.ts +20 -0
- package/dist/managers/VideoManager.d.ts.map +1 -1
- package/dist/player.js +2 -2
- package/dist/player.min.js +2 -2
- package/dist/saltfish-playlist-player.es.js +448 -17
- package/dist/saltfish-playlist-player.umd.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateMachineActionHandler.d.ts","sourceRoot":"","sources":["../../../src/core/services/StateMachineActionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKxC;;GAEG;AACH,qBAAa,yBAA0B,YAAW,0BAA0B;IAC1E,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,eAAe,CAA6B;gBAExC,QAAQ,EAAE,eAAe;IAIrC;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIrD;;OAEG;IACI,2BAA2B,IAAI,IAAI;IAsE1C;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IA4BtC;;OAEG;IACI,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAiBhD;;OAEG;IACI,gBAAgB,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;IA+BlD,OAAO,IAAI,IAAI;IAItB;;;;OAIG;YACW,0BAA0B;YA6E1B,wBAAwB;
|
|
1
|
+
{"version":3,"file":"StateMachineActionHandler.d.ts","sourceRoot":"","sources":["../../../src/core/services/StateMachineActionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKxC;;GAEG;AACH,qBAAa,yBAA0B,YAAW,0BAA0B;IAC1E,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,eAAe,CAA6B;gBAExC,QAAQ,EAAE,eAAe;IAIrC;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIrD;;OAEG;IACI,2BAA2B,IAAI,IAAI;IAsE1C;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IA4BtC;;OAEG;IACI,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAiBhD;;OAEG;IACI,gBAAgB,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI;IA+BlD,OAAO,IAAI,IAAI;IAItB;;;;OAIG;YACW,0BAA0B;YA6E1B,wBAAwB;IAkQtC,OAAO,CAAC,wBAAwB;IAKhC,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,wBAAwB;IAiDhC,OAAO,CAAC,2BAA2B;IAwCnC,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,+BAA+B;IAKvC,OAAO,CAAC,gCAAgC;IAKxC,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,qBAAqB;CAW9B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manager class for handling real-time audio visualization using Web Audio API
|
|
3
|
+
* Analyzes frequency data from video/audio elements to create soundbar effects
|
|
4
|
+
*/
|
|
5
|
+
export declare class AudioVisualizationManager {
|
|
6
|
+
private audioContext;
|
|
7
|
+
private analyser;
|
|
8
|
+
private sourceVideo1;
|
|
9
|
+
private sourceVideo2;
|
|
10
|
+
private activeSource;
|
|
11
|
+
private videoElement1;
|
|
12
|
+
private videoElement2;
|
|
13
|
+
private dataArray;
|
|
14
|
+
private animationId;
|
|
15
|
+
private isInitialized;
|
|
16
|
+
private useFallbackMode;
|
|
17
|
+
private isPaused;
|
|
18
|
+
private readonly fftSize;
|
|
19
|
+
private readonly barCount;
|
|
20
|
+
private readonly smoothingTimeConstant;
|
|
21
|
+
private fallbackTime;
|
|
22
|
+
private zeroDataFrameCount;
|
|
23
|
+
private readonly maxZeroFramesBeforeFallback;
|
|
24
|
+
/**
|
|
25
|
+
* Initializes the Web Audio API context and connects to the video element
|
|
26
|
+
* Handles dual video element system by creating sources for both elements
|
|
27
|
+
* @param videoElement - The video/audio element to analyze
|
|
28
|
+
*/
|
|
29
|
+
initialize(videoElement: HTMLVideoElement): void;
|
|
30
|
+
/**
|
|
31
|
+
* Switches active source and connects it to the analyser
|
|
32
|
+
* Disconnects previous source to avoid audio doubling
|
|
33
|
+
*/
|
|
34
|
+
private switchToSource;
|
|
35
|
+
/**
|
|
36
|
+
* Gets frequency data for visualization bars
|
|
37
|
+
* Maps lower frequencies to left bars (bass) and higher frequencies to right bars (treble)
|
|
38
|
+
* Falls back to animated visualization if Web Audio API fails or CORS blocks analysis
|
|
39
|
+
* Returns flat bars when paused
|
|
40
|
+
* @returns Array of normalized bar heights (0-1) for each bar
|
|
41
|
+
*/
|
|
42
|
+
getBarHeights(): number[];
|
|
43
|
+
/**
|
|
44
|
+
* Generates animated bar heights as fallback when Web Audio API is unavailable
|
|
45
|
+
* Creates a wave-like pattern that looks like audio visualization
|
|
46
|
+
* Mirrors the first 50% to match real audio visualization
|
|
47
|
+
* @returns Array of normalized bar heights (0-1) for animated effect
|
|
48
|
+
*/
|
|
49
|
+
private getFallbackBarHeights;
|
|
50
|
+
/**
|
|
51
|
+
* Returns flat bar heights for paused state
|
|
52
|
+
* All bars at minimal height for visual presence
|
|
53
|
+
* @returns Array of normalized bar heights (0-1) all at minimal value
|
|
54
|
+
*/
|
|
55
|
+
private getFlatBarHeights;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the average amplitude across all frequencies
|
|
58
|
+
* Used for dynamic color intensity
|
|
59
|
+
* Falls back to animated value if Web Audio API fails
|
|
60
|
+
* @returns Normalized amplitude value (0-1)
|
|
61
|
+
*/
|
|
62
|
+
getAverageAmplitude(): number;
|
|
63
|
+
/**
|
|
64
|
+
* Starts the animation loop for continuous visualization updates
|
|
65
|
+
* @param callback - Function called on each animation frame with bar heights and amplitude
|
|
66
|
+
*/
|
|
67
|
+
startVisualization(callback: (barHeights: number[], amplitude: number) => void): void;
|
|
68
|
+
/**
|
|
69
|
+
* Stops the visualization animation loop
|
|
70
|
+
*/
|
|
71
|
+
stopVisualization(): void;
|
|
72
|
+
/**
|
|
73
|
+
* Pauses the visualization - bars will stay at minimal height
|
|
74
|
+
* Animation loop continues but returns flat bars
|
|
75
|
+
*/
|
|
76
|
+
pause(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Resumes the visualization - bars will react to audio again
|
|
79
|
+
*/
|
|
80
|
+
resume(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Resumes the AudioContext if it's suspended
|
|
83
|
+
* Safe to call multiple times - will only resume if needed
|
|
84
|
+
* MUST be called after user interaction for audio to work
|
|
85
|
+
*/
|
|
86
|
+
resumeAudioContext(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Checks if visualization is currently initialized
|
|
89
|
+
*/
|
|
90
|
+
getIsInitialized(): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Resets video element references for playlist restart
|
|
93
|
+
* Keeps AudioContext and analyser intact but clears video element tracking
|
|
94
|
+
* This allows new video elements to be assigned when playlist restarts
|
|
95
|
+
*/
|
|
96
|
+
reset(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Cleans up Web Audio resources
|
|
99
|
+
* Important to call this to prevent memory leaks
|
|
100
|
+
* WARNING: Only call this when truly destroying - not when switching video elements!
|
|
101
|
+
*/
|
|
102
|
+
cleanup(): void;
|
|
103
|
+
/**
|
|
104
|
+
* Destroys the manager and releases all resources
|
|
105
|
+
*/
|
|
106
|
+
destroy(): void;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=AudioVisualizationManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioVisualizationManager.d.ts","sourceRoot":"","sources":["../../src/managers/AudioVisualizationManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAkB;IAGlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;IAGtD,OAAO,CAAC,YAAY,CAAa;IAGjC,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAc;IAE1D;;;;OAIG;IACI,UAAU,CAAC,YAAY,EAAE,gBAAgB,GAAG,IAAI;IAiFvD;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;;OAMG;IACI,aAAa,IAAI,MAAM,EAAE;IA8EhC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA4B7B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;;;;OAKG;IACI,mBAAmB,IAAI,MAAM;IAyBpC;;;OAGG;IACI,kBAAkB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAuC5F;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAShC;;;OAGG;IACI,KAAK,IAAI,IAAI;IAKpB;;OAEG;IACI,MAAM,IAAI,IAAI;IAKrB;;;;OAIG;IACI,kBAAkB,IAAI,IAAI;IASjC;;OAEG;IACI,gBAAgB,IAAI,OAAO;IAIlC;;;;OAIG;IACI,KAAK,IAAI,IAAI;IAwCpB;;;;OAIG;IACI,OAAO,IAAI,IAAI;IAuCtB;;OAEG;IACI,OAAO,IAAI,IAAI;CAGvB"}
|
|
@@ -17,6 +17,8 @@ export declare class VideoManager {
|
|
|
17
17
|
transcriptManager: TranscriptManager;
|
|
18
18
|
private preloadedVideos;
|
|
19
19
|
private audioFallbackOverlay;
|
|
20
|
+
private audioVisualizationManager;
|
|
21
|
+
private soundbarElement;
|
|
20
22
|
private currentVideoUrl;
|
|
21
23
|
private nextVideoUrl;
|
|
22
24
|
private playbackPositions;
|
|
@@ -194,14 +196,32 @@ export declare class VideoManager {
|
|
|
194
196
|
* @param initiallyVisible - Whether transcript should be initially visible
|
|
195
197
|
*/
|
|
196
198
|
loadTranscript(transcript: Transcript | null, initiallyVisible?: boolean): void;
|
|
199
|
+
/**
|
|
200
|
+
* Creates a soundbar visualization element with 11 frequency bars (mirrored with single center)
|
|
201
|
+
* @returns HTMLElement containing the soundbar visualization
|
|
202
|
+
*/
|
|
203
|
+
private createSoundbar;
|
|
197
204
|
/**
|
|
198
205
|
* Shows audio fallback overlay with optional poster image or avatar thumbnail
|
|
206
|
+
* Includes real-time audio visualization soundbar
|
|
199
207
|
* @param posterUrl - Optional URL for poster image (e.g., GIF)
|
|
200
208
|
* @param avatarThumbnailUrl - Optional URL for avatar thumbnail to display instead of icon/text
|
|
201
209
|
*/
|
|
202
210
|
showAudioFallbackOverlay(posterUrl?: string, avatarThumbnailUrl?: string): void;
|
|
211
|
+
/**
|
|
212
|
+
* Starts audio visualization for the active video element
|
|
213
|
+
* Should be called AFTER video is loaded and ready to play
|
|
214
|
+
*/
|
|
215
|
+
startAudioVisualization(): void;
|
|
216
|
+
/**
|
|
217
|
+
* Initializes/switches Web Audio source for regular video nodes
|
|
218
|
+
* Does NOT start visualization - only ensures audio routing
|
|
219
|
+
* Must be called after video loads for proper audio routing once Web Audio is initialized
|
|
220
|
+
*/
|
|
221
|
+
initializeAudioForVideo(): void;
|
|
203
222
|
/**
|
|
204
223
|
* Hides audio fallback overlay and removes poster image
|
|
224
|
+
* Note: Does not cleanup Web Audio connections - they must persist for audio playback
|
|
205
225
|
*/
|
|
206
226
|
hideAudioFallbackOverlay(): void;
|
|
207
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../src/managers/VideoManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoManager.d.ts","sourceRoot":"","sources":["../../src/managers/VideoManager.ts"],"names":[],"mappings":"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"}
|