ugly-app 0.1.115 → 0.1.117
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/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/audio/AudioVisualizer.d.ts +10 -0
- package/dist/client/audio/AudioVisualizer.d.ts.map +1 -0
- package/dist/client/audio/AudioVisualizer.js +2 -0
- package/dist/client/audio/AudioVisualizer.js.map +1 -0
- package/dist/client/audio/BarsVisualizer.d.ts +20 -0
- package/dist/client/audio/BarsVisualizer.d.ts.map +1 -0
- package/dist/client/audio/BarsVisualizer.js +72 -0
- package/dist/client/audio/BarsVisualizer.js.map +1 -0
- package/dist/client/audio/BlobAudioAnalyzer.d.ts +15 -0
- package/dist/client/audio/BlobAudioAnalyzer.d.ts.map +1 -0
- package/dist/client/audio/BlobAudioAnalyzer.js +110 -0
- package/dist/client/audio/BlobAudioAnalyzer.js.map +1 -0
- package/dist/client/audio/BlobTypes.d.ts +91 -0
- package/dist/client/audio/BlobTypes.d.ts.map +1 -0
- package/dist/client/audio/BlobTypes.js +126 -0
- package/dist/client/audio/BlobTypes.js.map +1 -0
- package/dist/client/audio/BlobVisualizer.d.ts +16 -0
- package/dist/client/audio/BlobVisualizer.d.ts.map +1 -0
- package/dist/client/audio/BlobVisualizer.js +157 -0
- package/dist/client/audio/BlobVisualizer.js.map +1 -0
- package/dist/client/audio/BlobVisualizerCore.d.ts +38 -0
- package/dist/client/audio/BlobVisualizerCore.d.ts.map +1 -0
- package/dist/client/audio/BlobVisualizerCore.js +239 -0
- package/dist/client/audio/BlobVisualizerCore.js.map +1 -0
- package/dist/client/audio/CircleVisualizer.d.ts +21 -0
- package/dist/client/audio/CircleVisualizer.d.ts.map +1 -0
- package/dist/client/audio/CircleVisualizer.js +82 -0
- package/dist/client/audio/CircleVisualizer.js.map +1 -0
- package/dist/client/audio/MicVisualizer.d.ts +7 -0
- package/dist/client/audio/MicVisualizer.d.ts.map +1 -0
- package/dist/client/audio/MicVisualizer.js +116 -0
- package/dist/client/audio/MicVisualizer.js.map +1 -0
- package/dist/client/audio/WaveVisualizer.d.ts +18 -0
- package/dist/client/audio/WaveVisualizer.d.ts.map +1 -0
- package/dist/client/audio/WaveVisualizer.js +54 -0
- package/dist/client/audio/WaveVisualizer.js.map +1 -0
- package/dist/client/audio/blob-styles/MetaballBlobStyle.d.ts +23 -0
- package/dist/client/audio/blob-styles/MetaballBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/MetaballBlobStyle.js +238 -0
- package/dist/client/audio/blob-styles/MetaballBlobStyle.js.map +1 -0
- package/dist/client/audio/blob-styles/MilkdropBlobStyle.d.ts +62 -0
- package/dist/client/audio/blob-styles/MilkdropBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/MilkdropBlobStyle.js +267 -0
- package/dist/client/audio/blob-styles/MilkdropBlobStyle.js.map +1 -0
- package/dist/client/audio/blob-styles/OrbsBlobStyle.d.ts +23 -0
- package/dist/client/audio/blob-styles/OrbsBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/OrbsBlobStyle.js +244 -0
- package/dist/client/audio/blob-styles/OrbsBlobStyle.js.map +1 -0
- package/dist/client/audio/blob-styles/OrganicBlobStyle.d.ts +27 -0
- package/dist/client/audio/blob-styles/OrganicBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/OrganicBlobStyle.js +290 -0
- package/dist/client/audio/blob-styles/OrganicBlobStyle.js.map +1 -0
- package/dist/client/audio/blob-styles/ParticleBlobStyle.d.ts +26 -0
- package/dist/client/audio/blob-styles/ParticleBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/ParticleBlobStyle.js +297 -0
- package/dist/client/audio/blob-styles/ParticleBlobStyle.js.map +1 -0
- package/dist/client/audio/blob-styles/SiriBlobStyle.d.ts +23 -0
- package/dist/client/audio/blob-styles/SiriBlobStyle.d.ts.map +1 -0
- package/dist/client/audio/blob-styles/SiriBlobStyle.js +227 -0
- package/dist/client/audio/blob-styles/SiriBlobStyle.js.map +1 -0
- package/dist/client/index.d.ts +11 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +8 -0
- package/dist/client/index.js.map +1 -1
- package/dist/server/audio/stt/AudioStreamProcessor.d.ts +226 -0
- package/dist/server/audio/stt/AudioStreamProcessor.d.ts.map +1 -0
- package/dist/server/audio/stt/AudioStreamProcessor.js +1023 -0
- package/dist/server/audio/stt/AudioStreamProcessor.js.map +1 -0
- package/dist/server/audio/stt/PyannoteSegmentation.d.ts +59 -0
- package/dist/server/audio/stt/PyannoteSegmentation.d.ts.map +1 -0
- package/dist/server/audio/stt/PyannoteSegmentation.js +214 -0
- package/dist/server/audio/stt/PyannoteSegmentation.js.map +1 -0
- package/dist/server/audio/stt/Resampler.d.ts +58 -0
- package/dist/server/audio/stt/Resampler.d.ts.map +1 -0
- package/dist/server/audio/stt/Resampler.js +113 -0
- package/dist/server/audio/stt/Resampler.js.map +1 -0
- package/dist/server/audio/stt/SileroVAD.d.ts +56 -0
- package/dist/server/audio/stt/SileroVAD.d.ts.map +1 -0
- package/dist/server/audio/stt/SileroVAD.js +154 -0
- package/dist/server/audio/stt/SileroVAD.js.map +1 -0
- package/dist/server/audio/stt/config.d.ts +30 -0
- package/dist/server/audio/stt/config.d.ts.map +1 -0
- package/dist/server/audio/stt/config.js +42 -0
- package/dist/server/audio/stt/config.js.map +1 -0
- package/dist/server/audio/tts/LipSync.d.ts +27 -0
- package/dist/server/audio/tts/LipSync.d.ts.map +1 -0
- package/dist/server/audio/tts/LipSync.js +794 -0
- package/dist/server/audio/tts/LipSync.js.map +1 -0
- package/dist/server/audio/tts/LipSyncJa.d.ts +19 -0
- package/dist/server/audio/tts/LipSyncJa.d.ts.map +1 -0
- package/dist/server/audio/tts/LipSyncJa.js +336 -0
- package/dist/server/audio/tts/LipSyncJa.js.map +1 -0
- package/dist/server/audio/tts/LipSyncZh.d.ts +19 -0
- package/dist/server/audio/tts/LipSyncZh.d.ts.map +1 -0
- package/dist/server/audio/tts/LipSyncZh.js +203 -0
- package/dist/server/audio/tts/LipSyncZh.js.map +1 -0
- package/dist/server/audio/tts/TTSCache.d.ts +17 -0
- package/dist/server/audio/tts/TTSCache.d.ts.map +1 -0
- package/dist/server/audio/tts/TTSCache.js +109 -0
- package/dist/server/audio/tts/TTSCache.js.map +1 -0
- package/dist/server/audio/tts/TextToSpeech.d.ts +78 -0
- package/dist/server/audio/tts/TextToSpeech.d.ts.map +1 -0
- package/dist/server/audio/tts/TextToSpeech.js +530 -0
- package/dist/server/audio/tts/TextToSpeech.js.map +1 -0
- package/dist/server/audio/tts/TextToSpeechStream.d.ts +77 -0
- package/dist/server/audio/tts/TextToSpeechStream.d.ts.map +1 -0
- package/dist/server/audio/tts/TextToSpeechStream.js +691 -0
- package/dist/server/audio/tts/TextToSpeechStream.js.map +1 -0
- package/dist/server/audio/voice/index.d.ts +8 -0
- package/dist/server/audio/voice/index.d.ts.map +1 -0
- package/dist/server/audio/voice/index.js +200 -0
- package/dist/server/audio/voice/index.js.map +1 -0
- package/dist/server/index.d.ts +15 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -1
- package/package.json +16 -2
- package/src/cli/version.ts +1 -1
- package/src/client/audio/AudioVisualizer.ts +9 -0
- package/src/client/audio/BarsVisualizer.ts +83 -0
- package/src/client/audio/BlobAudioAnalyzer.ts +152 -0
- package/src/client/audio/BlobTypes.ts +246 -0
- package/src/client/audio/BlobVisualizer.tsx +211 -0
- package/src/client/audio/BlobVisualizerCore.ts +315 -0
- package/src/client/audio/CircleVisualizer.ts +105 -0
- package/src/client/audio/MicVisualizer.tsx +161 -0
- package/src/client/audio/WaveVisualizer.ts +71 -0
- package/src/client/audio/blob-styles/MetaballBlobStyle.ts +253 -0
- package/src/client/audio/blob-styles/MilkdropBlobStyle.ts +387 -0
- package/src/client/audio/blob-styles/OrbsBlobStyle.ts +259 -0
- package/src/client/audio/blob-styles/OrganicBlobStyle.ts +308 -0
- package/src/client/audio/blob-styles/ParticleBlobStyle.ts +321 -0
- package/src/client/audio/blob-styles/SiriBlobStyle.ts +242 -0
- package/src/client/audio/blob-styles/butterchurn.d.ts +41 -0
- package/src/client/index.ts +27 -0
- package/src/server/audio/stt/AudioStreamProcessor.ts +1390 -0
- package/src/server/audio/stt/PyannoteSegmentation.ts +266 -0
- package/src/server/audio/stt/Resampler.ts +125 -0
- package/src/server/audio/stt/SileroVAD.ts +186 -0
- package/src/server/audio/stt/config.ts +49 -0
- package/src/server/audio/tts/LipSync.ts +898 -0
- package/src/server/audio/tts/LipSyncJa.ts +391 -0
- package/src/server/audio/tts/LipSyncZh.ts +224 -0
- package/src/server/audio/tts/TTSCache.ts +128 -0
- package/src/server/audio/tts/TextToSpeech.ts +851 -0
- package/src/server/audio/tts/TextToSpeechStream.ts +1091 -0
- package/src/server/audio/voice/index.ts +310 -0
- package/src/server/index.ts +31 -0
- package/templates/client/allPages.ts +1 -0
- package/templates/client/pages/KagiTestPage.tsx +253 -0
- package/templates/server/index.ts +18 -0
- package/templates/shared/api.ts +52 -0
- package/templates/shared/pages.ts +1 -0
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.117";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Common interface for all audio visualizers */
|
|
2
|
+
export interface AudioVisualizer {
|
|
3
|
+
/** Connect an AnalyserNode from any audio source (mic, file, WebRTC, TTS) */
|
|
4
|
+
setAnalyzer(analyzer: AnalyserNode | null): void;
|
|
5
|
+
/** Attach to a canvas and start rendering */
|
|
6
|
+
attach(canvas: HTMLCanvasElement): void | Promise<void>;
|
|
7
|
+
/** Stop rendering and detach from canvas */
|
|
8
|
+
detach(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AudioVisualizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioVisualizer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/AudioVisualizer.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,6CAA6C;IAC7C,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,4CAA4C;IAC5C,MAAM,IAAI,IAAI,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/AudioVisualizer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AudioVisualizer } from './AudioVisualizer.js';
|
|
2
|
+
/** Canvas frequency bars visualizer with semicircular arrangement */
|
|
3
|
+
export declare class BarsVisualizer implements AudioVisualizer {
|
|
4
|
+
private fpsInterval;
|
|
5
|
+
private canvas;
|
|
6
|
+
private context;
|
|
7
|
+
private analyzer;
|
|
8
|
+
private drawId;
|
|
9
|
+
private color;
|
|
10
|
+
private barCount;
|
|
11
|
+
constructor(options?: {
|
|
12
|
+
color?: string;
|
|
13
|
+
barCount?: number;
|
|
14
|
+
});
|
|
15
|
+
setAnalyzer(analyzer: AnalyserNode | null): void;
|
|
16
|
+
attach(canvas: HTMLCanvasElement): void;
|
|
17
|
+
detach(): void;
|
|
18
|
+
private draw;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=BarsVisualizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarsVisualizer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BarsVisualizer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,qEAAqE;AACrE,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAK3D,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAIhD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAOvC,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,IAAI;CA+Cb"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
/** Canvas frequency bars visualizer with semicircular arrangement */
|
|
3
|
+
export class BarsVisualizer {
|
|
4
|
+
fpsInterval = Math.floor(1000 / 30);
|
|
5
|
+
canvas = null;
|
|
6
|
+
context = null;
|
|
7
|
+
analyzer = null;
|
|
8
|
+
drawId = null;
|
|
9
|
+
color;
|
|
10
|
+
barCount;
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.color = options?.color ?? 'rgba(255,255,255,0.5)';
|
|
13
|
+
this.barCount = options?.barCount ?? 7;
|
|
14
|
+
}
|
|
15
|
+
setAnalyzer(analyzer) {
|
|
16
|
+
this.analyzer = analyzer;
|
|
17
|
+
}
|
|
18
|
+
attach(canvas) {
|
|
19
|
+
this.canvas = canvas;
|
|
20
|
+
this.context = canvas.getContext('2d');
|
|
21
|
+
this.drawId = nanoid();
|
|
22
|
+
this.draw(this.drawId);
|
|
23
|
+
}
|
|
24
|
+
detach() {
|
|
25
|
+
this.drawId = null;
|
|
26
|
+
this.canvas = null;
|
|
27
|
+
this.context = null;
|
|
28
|
+
}
|
|
29
|
+
draw(drawId) {
|
|
30
|
+
if (!this.canvas || !this.context || this.drawId !== drawId) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
setTimeout(() => {
|
|
34
|
+
requestAnimationFrame(() => {
|
|
35
|
+
this.draw(drawId);
|
|
36
|
+
});
|
|
37
|
+
}, this.fpsInterval);
|
|
38
|
+
const lines = this.barCount;
|
|
39
|
+
const w = this.canvas.width / 3;
|
|
40
|
+
const h = this.canvas.height / 3;
|
|
41
|
+
const barWidth = Math.floor(w / lines);
|
|
42
|
+
const x = (this.canvas.width - barWidth * lines) / 2;
|
|
43
|
+
const y = (this.canvas.height - w) / 2;
|
|
44
|
+
this.context.reset();
|
|
45
|
+
this.context.fillStyle = 'transparent';
|
|
46
|
+
this.context.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
47
|
+
if (this.analyzer) {
|
|
48
|
+
const bufferLength = this.analyzer.frequencyBinCount;
|
|
49
|
+
const dataArray = new Uint8Array(bufferLength);
|
|
50
|
+
this.analyzer.getByteFrequencyData(dataArray);
|
|
51
|
+
let volume = 0;
|
|
52
|
+
for (const data of dataArray) {
|
|
53
|
+
volume += data;
|
|
54
|
+
}
|
|
55
|
+
volume = Math.min(1, (volume / (255 * dataArray.length)) * 4);
|
|
56
|
+
this.context.lineCap = 'round';
|
|
57
|
+
this.context.lineWidth = barWidth - 2;
|
|
58
|
+
this.context.strokeStyle = this.color;
|
|
59
|
+
let xCur = x + barWidth / 2;
|
|
60
|
+
for (let i = 0; i < lines; i++) {
|
|
61
|
+
const xPercent = ((xCur - x) / w) * 2 - 1;
|
|
62
|
+
const yPercent = Math.sqrt(1 - xPercent * xPercent);
|
|
63
|
+
const size = (volume * yPercent * h) / 2;
|
|
64
|
+
this.context.moveTo(xCur, y + h / 2 - size);
|
|
65
|
+
this.context.lineTo(xCur, y + h / 2 + size);
|
|
66
|
+
xCur += barWidth;
|
|
67
|
+
}
|
|
68
|
+
this.context.stroke();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=BarsVisualizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BarsVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/BarsVisualizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,qEAAqE;AACrE,MAAM,OAAO,cAAc;IACjB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,MAAM,GAA6B,IAAI,CAAC;IACxC,OAAO,GAAoC,IAAI,CAAC;IAChD,QAAQ,GAAwB,IAAI,CAAC;IACrC,MAAM,GAAkB,IAAI,CAAC;IAC7B,KAAK,CAAS;IACd,QAAQ,CAAS;IAEzB,YAAY,OAA+C;QACzD,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,uBAAuB,CAAC;QACvD,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,WAAW,CAAC,QAA6B;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,MAAyB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEO,IAAI,CAAC,MAAc;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,UAAU,CAAC,GAAG,EAAE;YACd,qBAAqB,CAAC,GAAG,EAAE;gBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAErB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9D,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACtC,IAAI,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC;gBACpD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC5C,IAAI,IAAI,QAAQ,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AudioBands } from '../../shared/Audio.js';
|
|
2
|
+
export declare class BlobAudioAnalyzer {
|
|
3
|
+
private analyser;
|
|
4
|
+
private dataArray;
|
|
5
|
+
private smoothedBands;
|
|
6
|
+
constructor();
|
|
7
|
+
setAnalyzer(analyser: AnalyserNode | null): void;
|
|
8
|
+
getBands(): AudioBands;
|
|
9
|
+
update(): AudioBands;
|
|
10
|
+
private calculateBandAverage;
|
|
11
|
+
private smooth;
|
|
12
|
+
reset(): void;
|
|
13
|
+
getPeaks(): AudioBands;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=BlobAudioAnalyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobAudioAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BlobAudioAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAcxD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAKnB;;IAMF,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IAQhD,QAAQ,IAAI,UAAU;IAItB,MAAM,IAAI,UAAU;IA6CpB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,MAAM;IAId,KAAK,IAAI,IAAI;IASb,QAAQ,IAAI,UAAU;CAyCvB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
const FFT_SIZE = 2048;
|
|
2
|
+
const SMOOTHING_FACTOR = 0.7;
|
|
3
|
+
const FREQ_BINS = {
|
|
4
|
+
bassStart: 1,
|
|
5
|
+
bassEnd: 10,
|
|
6
|
+
midsStart: 11,
|
|
7
|
+
midsEnd: 85,
|
|
8
|
+
trebleStart: 86,
|
|
9
|
+
trebleEnd: 512,
|
|
10
|
+
};
|
|
11
|
+
export class BlobAudioAnalyzer {
|
|
12
|
+
analyser = null;
|
|
13
|
+
dataArray;
|
|
14
|
+
smoothedBands = {
|
|
15
|
+
bass: 0,
|
|
16
|
+
mids: 0,
|
|
17
|
+
treble: 0,
|
|
18
|
+
overall: 0,
|
|
19
|
+
};
|
|
20
|
+
constructor() {
|
|
21
|
+
this.dataArray = new Uint8Array(FFT_SIZE / 2);
|
|
22
|
+
}
|
|
23
|
+
setAnalyzer(analyser) {
|
|
24
|
+
this.analyser = analyser;
|
|
25
|
+
if (analyser) {
|
|
26
|
+
analyser.fftSize = FFT_SIZE;
|
|
27
|
+
this.dataArray = new Uint8Array(analyser.frequencyBinCount);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
getBands() {
|
|
31
|
+
return { ...this.smoothedBands };
|
|
32
|
+
}
|
|
33
|
+
update() {
|
|
34
|
+
if (!this.analyser) {
|
|
35
|
+
this.smoothedBands = {
|
|
36
|
+
bass: this.smoothedBands.bass * 0.9,
|
|
37
|
+
mids: this.smoothedBands.mids * 0.9,
|
|
38
|
+
treble: this.smoothedBands.treble * 0.9,
|
|
39
|
+
overall: this.smoothedBands.overall * 0.9,
|
|
40
|
+
};
|
|
41
|
+
return this.getBands();
|
|
42
|
+
}
|
|
43
|
+
this.analyser.getByteFrequencyData(this.dataArray);
|
|
44
|
+
const rawBass = this.calculateBandAverage(FREQ_BINS.bassStart, FREQ_BINS.bassEnd);
|
|
45
|
+
const rawMids = this.calculateBandAverage(FREQ_BINS.midsStart, FREQ_BINS.midsEnd);
|
|
46
|
+
const rawTreble = this.calculateBandAverage(FREQ_BINS.trebleStart, Math.min(FREQ_BINS.trebleEnd, this.dataArray.length - 1));
|
|
47
|
+
let sum = 0;
|
|
48
|
+
for (let i = 0; i < this.dataArray.length; i++) {
|
|
49
|
+
const normalized = this.dataArray[i] / 255;
|
|
50
|
+
sum += normalized * normalized;
|
|
51
|
+
}
|
|
52
|
+
const rawOverall = Math.sqrt(sum / this.dataArray.length);
|
|
53
|
+
this.smoothedBands = {
|
|
54
|
+
bass: this.smooth(this.smoothedBands.bass, rawBass),
|
|
55
|
+
mids: this.smooth(this.smoothedBands.mids, rawMids),
|
|
56
|
+
treble: this.smooth(this.smoothedBands.treble, rawTreble),
|
|
57
|
+
overall: this.smooth(this.smoothedBands.overall, rawOverall),
|
|
58
|
+
};
|
|
59
|
+
return this.getBands();
|
|
60
|
+
}
|
|
61
|
+
calculateBandAverage(startBin, endBin) {
|
|
62
|
+
let sum = 0;
|
|
63
|
+
let count = 0;
|
|
64
|
+
for (let i = startBin; i <= endBin && i < this.dataArray.length; i++) {
|
|
65
|
+
sum += this.dataArray[i] / 255;
|
|
66
|
+
count++;
|
|
67
|
+
}
|
|
68
|
+
return count > 0 ? sum / count : 0;
|
|
69
|
+
}
|
|
70
|
+
smooth(current, target) {
|
|
71
|
+
return current * SMOOTHING_FACTOR + target * (1 - SMOOTHING_FACTOR);
|
|
72
|
+
}
|
|
73
|
+
reset() {
|
|
74
|
+
this.smoothedBands = {
|
|
75
|
+
bass: 0,
|
|
76
|
+
mids: 0,
|
|
77
|
+
treble: 0,
|
|
78
|
+
overall: 0,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
getPeaks() {
|
|
82
|
+
if (!this.analyser) {
|
|
83
|
+
return { bass: 0, mids: 0, treble: 0, overall: 0 };
|
|
84
|
+
}
|
|
85
|
+
this.analyser.getByteFrequencyData(this.dataArray);
|
|
86
|
+
let bassPeak = 0;
|
|
87
|
+
let midsPeak = 0;
|
|
88
|
+
let treblePeak = 0;
|
|
89
|
+
for (let i = FREQ_BINS.bassStart; i <= FREQ_BINS.bassEnd; i++) {
|
|
90
|
+
bassPeak = Math.max(bassPeak, (this.dataArray[i] ?? 0) / 255);
|
|
91
|
+
}
|
|
92
|
+
for (let i = FREQ_BINS.midsStart; i <= FREQ_BINS.midsEnd; i++) {
|
|
93
|
+
midsPeak = Math.max(midsPeak, (this.dataArray[i] ?? 0) / 255);
|
|
94
|
+
}
|
|
95
|
+
for (let i = FREQ_BINS.trebleStart; i <= Math.min(FREQ_BINS.trebleEnd, this.dataArray.length - 1); i++) {
|
|
96
|
+
treblePeak = Math.max(treblePeak, (this.dataArray[i] ?? 0) / 255);
|
|
97
|
+
}
|
|
98
|
+
let overallPeak = 0;
|
|
99
|
+
for (let i = 0; i < this.dataArray.length; i++) {
|
|
100
|
+
overallPeak = Math.max(overallPeak, (this.dataArray[i] ?? 0) / 255);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
bass: bassPeak,
|
|
104
|
+
mids: midsPeak,
|
|
105
|
+
treble: treblePeak,
|
|
106
|
+
overall: overallPeak,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=BlobAudioAnalyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobAudioAnalyzer.js","sourceRoot":"","sources":["../../../src/client/audio/BlobAudioAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AudioBands } from '../../shared/Audio.js';
|
|
2
|
+
export type { AudioBands };
|
|
3
|
+
/** Available blob visualization styles */
|
|
4
|
+
export type BlobStyleType = 'organic' | 'metaball' | 'siri' | 'particle' | 'orbs' | 'milkdrop';
|
|
5
|
+
/** Configuration options for blob visualizers */
|
|
6
|
+
export interface BlobOptions {
|
|
7
|
+
/** Base/primary color (hex string) */
|
|
8
|
+
color1?: string;
|
|
9
|
+
/** Highlight/secondary color (hex string) */
|
|
10
|
+
color2?: string;
|
|
11
|
+
/** Overall effect intensity (0-2, default: 1) */
|
|
12
|
+
intensity?: number;
|
|
13
|
+
/** Animation speed multiplier (0-2, default: 1) */
|
|
14
|
+
speed?: number;
|
|
15
|
+
/** Overall audio reactivity (0-2, default: 1) */
|
|
16
|
+
audioReactivity?: number;
|
|
17
|
+
/** Bass frequency response (20-250Hz) (0-2, default: 1) */
|
|
18
|
+
bassReactivity?: number;
|
|
19
|
+
/** Mid frequency response (250Hz-2kHz) (0-2, default: 1) */
|
|
20
|
+
midsReactivity?: number;
|
|
21
|
+
/** Treble frequency response (2kHz-20kHz) (0-2, default: 1) */
|
|
22
|
+
trebleReactivity?: number;
|
|
23
|
+
/** Enable bloom post-processing (default: true) */
|
|
24
|
+
bloomEnabled?: boolean;
|
|
25
|
+
/** Bloom effect intensity (0-2, default: 0.5) */
|
|
26
|
+
bloomIntensity?: number;
|
|
27
|
+
/** Particle style: number of particles (500-5000, default: 3000) */
|
|
28
|
+
particleCount?: number;
|
|
29
|
+
/** Particle style: base particle size (1-10, default: 4) */
|
|
30
|
+
particleSize?: number;
|
|
31
|
+
/** Particle style: particle edge blur/softness (0.05-0.5, default: 0.15) */
|
|
32
|
+
particleBlur?: number;
|
|
33
|
+
/** Siri style: number of wave layers (2-8, default: 5) */
|
|
34
|
+
waveCount?: number;
|
|
35
|
+
/** Siri style: wave line thickness (0.005-0.05, default: 0.015) */
|
|
36
|
+
waveThickness?: number;
|
|
37
|
+
/** Orbs style: number of main orbs (2-8, default: 5) */
|
|
38
|
+
orbCount?: number;
|
|
39
|
+
/** Orbs style: orb edge softness (0.02-0.3, default: 0.12) */
|
|
40
|
+
orbSoftness?: number;
|
|
41
|
+
/** Organic style: noise displacement scale (0.1-1.0, default: 0.3) */
|
|
42
|
+
noiseScale?: number;
|
|
43
|
+
/** Organic style: ambient light intensity (0-2, default: 0.5) */
|
|
44
|
+
ambientIntensity?: number;
|
|
45
|
+
/** Metaball style: merge smoothness factor (0.1-1.0, default: 0.5) */
|
|
46
|
+
metaballSmoothness?: number;
|
|
47
|
+
/** Milkdrop style: preset index (0-based, cycles through available presets) */
|
|
48
|
+
milkdropPreset?: number;
|
|
49
|
+
/** Milkdrop style: auto-advance to next preset (default: true) */
|
|
50
|
+
milkdropAutoAdvance?: boolean;
|
|
51
|
+
/** Milkdrop style: auto-advance interval in seconds (15-120, default: 30) */
|
|
52
|
+
milkdropAutoAdvanceInterval?: number;
|
|
53
|
+
}
|
|
54
|
+
/** Default options for each blob style */
|
|
55
|
+
export declare const blobStyleDefaults: Record<BlobStyleType, Partial<BlobOptions>>;
|
|
56
|
+
/** Color preset definition */
|
|
57
|
+
export interface BlobColorPresetDef {
|
|
58
|
+
color1: string;
|
|
59
|
+
color2: string;
|
|
60
|
+
}
|
|
61
|
+
/** Available color presets */
|
|
62
|
+
export declare const blobColorPresets: Record<string, BlobColorPresetDef>;
|
|
63
|
+
export type BlobColorPreset = keyof typeof blobColorPresets;
|
|
64
|
+
/** Interface for blob style implementations */
|
|
65
|
+
export interface BlobStyle {
|
|
66
|
+
/** Initialize the style with scene, camera, etc */
|
|
67
|
+
init(canvas: HTMLCanvasElement, width: number, height: number): void | Promise<void>;
|
|
68
|
+
/** Update with current options */
|
|
69
|
+
setOptions(options: BlobOptions): void;
|
|
70
|
+
/** Update audio levels */
|
|
71
|
+
setAudioBands(bands: AudioBands): void;
|
|
72
|
+
/** Render a frame (update animations, does not call renderer) */
|
|
73
|
+
render(deltaTime: number): void;
|
|
74
|
+
/** Handle resize */
|
|
75
|
+
resize(width: number, height: number): void;
|
|
76
|
+
/** Clean up resources */
|
|
77
|
+
dispose(): void;
|
|
78
|
+
/** Get the Three.js scene for rendering (null if style uses own renderer) */
|
|
79
|
+
getScene(): import('three').Scene | null;
|
|
80
|
+
/** If true, style manages its own WebGL context (skip Three.js renderer) */
|
|
81
|
+
usesOwnRenderer?: boolean;
|
|
82
|
+
/** Connect an external audio analyzer (for styles that need direct audio access) */
|
|
83
|
+
connectExternalAudio?(analyser: AnalyserNode): void;
|
|
84
|
+
}
|
|
85
|
+
/** Merged options with defaults applied */
|
|
86
|
+
export declare function getBlobOptionsWithDefaults(style: BlobStyleType, options: Partial<BlobOptions>): Required<BlobOptions>;
|
|
87
|
+
/** Convert hex color string to THREE.Color-compatible number */
|
|
88
|
+
export declare function hexToNumber(hex: string): number;
|
|
89
|
+
/** Convert hex color to RGB array (0-1 range) */
|
|
90
|
+
export declare function hexToRgb(hex: string): [number, number, number];
|
|
91
|
+
//# sourceMappingURL=BlobTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobTypes.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BlobTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/** Default options for each blob style */
|
|
2
|
+
export const blobStyleDefaults = {
|
|
3
|
+
organic: {
|
|
4
|
+
intensity: 1,
|
|
5
|
+
speed: 0.8,
|
|
6
|
+
bloomIntensity: 0.5,
|
|
7
|
+
audioReactivity: 1,
|
|
8
|
+
bassReactivity: 1.2,
|
|
9
|
+
midsReactivity: 0.8,
|
|
10
|
+
trebleReactivity: 0.6,
|
|
11
|
+
noiseScale: 0.3,
|
|
12
|
+
ambientIntensity: 0.5,
|
|
13
|
+
},
|
|
14
|
+
metaball: {
|
|
15
|
+
intensity: 1,
|
|
16
|
+
speed: 1,
|
|
17
|
+
bloomIntensity: 0.7,
|
|
18
|
+
audioReactivity: 1,
|
|
19
|
+
bassReactivity: 1,
|
|
20
|
+
midsReactivity: 1,
|
|
21
|
+
trebleReactivity: 0.8,
|
|
22
|
+
metaballSmoothness: 0.5,
|
|
23
|
+
},
|
|
24
|
+
siri: {
|
|
25
|
+
intensity: 1.2,
|
|
26
|
+
speed: 1.2,
|
|
27
|
+
bloomIntensity: 1.0,
|
|
28
|
+
audioReactivity: 1,
|
|
29
|
+
bassReactivity: 0.8,
|
|
30
|
+
midsReactivity: 1.2,
|
|
31
|
+
trebleReactivity: 1.4,
|
|
32
|
+
waveCount: 5,
|
|
33
|
+
waveThickness: 0.015,
|
|
34
|
+
},
|
|
35
|
+
particle: {
|
|
36
|
+
intensity: 0.8,
|
|
37
|
+
speed: 0.6,
|
|
38
|
+
bloomIntensity: 0.4,
|
|
39
|
+
audioReactivity: 1,
|
|
40
|
+
bassReactivity: 1.5,
|
|
41
|
+
midsReactivity: 0.7,
|
|
42
|
+
trebleReactivity: 0.5,
|
|
43
|
+
particleCount: 3000,
|
|
44
|
+
particleSize: 4,
|
|
45
|
+
particleBlur: 0.15,
|
|
46
|
+
},
|
|
47
|
+
orbs: {
|
|
48
|
+
intensity: 1.0,
|
|
49
|
+
speed: 0.5,
|
|
50
|
+
bloomIntensity: 0.8,
|
|
51
|
+
audioReactivity: 1,
|
|
52
|
+
bassReactivity: 1.2,
|
|
53
|
+
midsReactivity: 1.0,
|
|
54
|
+
trebleReactivity: 0.8,
|
|
55
|
+
orbCount: 5,
|
|
56
|
+
orbSoftness: 0.12,
|
|
57
|
+
},
|
|
58
|
+
milkdrop: {
|
|
59
|
+
intensity: 1.0,
|
|
60
|
+
speed: 1.0,
|
|
61
|
+
bloomIntensity: 0,
|
|
62
|
+
audioReactivity: 1,
|
|
63
|
+
bassReactivity: 1.0,
|
|
64
|
+
midsReactivity: 1.0,
|
|
65
|
+
trebleReactivity: 1.0,
|
|
66
|
+
milkdropPreset: 0,
|
|
67
|
+
milkdropAutoAdvance: true,
|
|
68
|
+
milkdropAutoAdvanceInterval: 30,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
/** Available color presets */
|
|
72
|
+
export const blobColorPresets = {
|
|
73
|
+
default: { color1: '#4a9eff', color2: '#a855f7' }, // Blue → Purple
|
|
74
|
+
warm: { color1: '#ff8041', color2: '#ff4d01' }, // Orange → Red
|
|
75
|
+
cool: { color1: '#22d3ee', color2: '#3b82f6' }, // Cyan → Blue
|
|
76
|
+
neon: { color1: '#22ff00', color2: '#ff00ff' }, // Green → Magenta
|
|
77
|
+
subtle: { color1: '#6b7280', color2: '#9ca3af' }, // Gray → Light Gray
|
|
78
|
+
sunset: { color1: '#f97316', color2: '#ec4899' }, // Orange → Pink
|
|
79
|
+
ocean: { color1: '#06b6d4', color2: '#6366f1' }, // Cyan → Indigo
|
|
80
|
+
forest: { color1: '#22c55e', color2: '#14b8a6' }, // Green → Teal
|
|
81
|
+
};
|
|
82
|
+
/** Merged options with defaults applied */
|
|
83
|
+
export function getBlobOptionsWithDefaults(style, options) {
|
|
84
|
+
const styleDefaults = blobStyleDefaults[style];
|
|
85
|
+
const colorPreset = blobColorPresets.default ?? {
|
|
86
|
+
color1: '#4a9eff',
|
|
87
|
+
color2: '#a855f7',
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
color1: options.color1 ?? colorPreset.color1,
|
|
91
|
+
color2: options.color2 ?? colorPreset.color2,
|
|
92
|
+
intensity: options.intensity ?? styleDefaults.intensity ?? 1,
|
|
93
|
+
speed: options.speed ?? styleDefaults.speed ?? 1,
|
|
94
|
+
audioReactivity: options.audioReactivity ?? styleDefaults.audioReactivity ?? 1,
|
|
95
|
+
bassReactivity: options.bassReactivity ?? styleDefaults.bassReactivity ?? 1,
|
|
96
|
+
midsReactivity: options.midsReactivity ?? styleDefaults.midsReactivity ?? 1,
|
|
97
|
+
trebleReactivity: options.trebleReactivity ?? styleDefaults.trebleReactivity ?? 1,
|
|
98
|
+
bloomEnabled: options.bloomEnabled ?? false,
|
|
99
|
+
bloomIntensity: options.bloomIntensity ?? styleDefaults.bloomIntensity ?? 0.5,
|
|
100
|
+
particleCount: options.particleCount ?? styleDefaults.particleCount ?? 3000,
|
|
101
|
+
particleSize: options.particleSize ?? styleDefaults.particleSize ?? 4,
|
|
102
|
+
particleBlur: options.particleBlur ?? styleDefaults.particleBlur ?? 0.15,
|
|
103
|
+
waveCount: options.waveCount ?? styleDefaults.waveCount ?? 5,
|
|
104
|
+
waveThickness: options.waveThickness ?? styleDefaults.waveThickness ?? 0.015,
|
|
105
|
+
orbCount: options.orbCount ?? styleDefaults.orbCount ?? 5,
|
|
106
|
+
orbSoftness: options.orbSoftness ?? styleDefaults.orbSoftness ?? 0.12,
|
|
107
|
+
noiseScale: options.noiseScale ?? styleDefaults.noiseScale ?? 0.3,
|
|
108
|
+
ambientIntensity: options.ambientIntensity ?? styleDefaults.ambientIntensity ?? 0.5,
|
|
109
|
+
metaballSmoothness: options.metaballSmoothness ?? styleDefaults.metaballSmoothness ?? 0.5,
|
|
110
|
+
milkdropPreset: options.milkdropPreset ?? styleDefaults.milkdropPreset ?? 0,
|
|
111
|
+
milkdropAutoAdvance: options.milkdropAutoAdvance ?? styleDefaults.milkdropAutoAdvance ?? true,
|
|
112
|
+
milkdropAutoAdvanceInterval: options.milkdropAutoAdvanceInterval ??
|
|
113
|
+
styleDefaults.milkdropAutoAdvanceInterval ??
|
|
114
|
+
30,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/** Convert hex color string to THREE.Color-compatible number */
|
|
118
|
+
export function hexToNumber(hex) {
|
|
119
|
+
return parseInt(hex.replace('#', ''), 16);
|
|
120
|
+
}
|
|
121
|
+
/** Convert hex color to RGB array (0-1 range) */
|
|
122
|
+
export function hexToRgb(hex) {
|
|
123
|
+
const num = hexToNumber(hex);
|
|
124
|
+
return [(num >> 16) / 255, ((num >> 8) & 0xff) / 255, (num & 0xff) / 255];
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=BlobTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobTypes.js","sourceRoot":"","sources":["../../../src/client/audio/BlobTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type ForwardedRef } from 'react';
|
|
2
|
+
import type { BlobOptions, BlobStyleType } from './BlobTypes.js';
|
|
3
|
+
/** Functions exposed via ref for external control */
|
|
4
|
+
export interface BlobVisualizerFunctions {
|
|
5
|
+
setAnalyzer(analyzer: AnalyserNode | null): void;
|
|
6
|
+
setOptions(options: Partial<BlobOptions>): void;
|
|
7
|
+
setStyle(style: BlobStyleType): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface BlobVisualizerProps {
|
|
10
|
+
blobRef?: ForwardedRef<BlobVisualizerFunctions>;
|
|
11
|
+
style?: BlobStyleType;
|
|
12
|
+
options?: Partial<BlobOptions>;
|
|
13
|
+
visible?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function BlobVisualizer(props: BlobVisualizerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=BlobVisualizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlobVisualizer.d.ts","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAMlB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAoC5E,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACtC,WAAW,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAChD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAqJxD"}
|