ugly-app 0.1.288 → 0.1.289
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/BlobVisualizer.d.ts +1 -0
- package/dist/client/audio/BlobVisualizer.d.ts.map +1 -1
- package/dist/client/audio/BlobVisualizer.js +5 -0
- package/dist/client/audio/BlobVisualizer.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/audio/BlobVisualizer.tsx +7 -0
- package/templates/client/pages/AudioTestPage.tsx +45 -29
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.289";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -11,6 +11,7 @@ export interface BlobVisualizerProps {
|
|
|
11
11
|
style?: BlobStyleType;
|
|
12
12
|
options?: Partial<BlobOptions>;
|
|
13
13
|
visible?: boolean;
|
|
14
|
+
analyzer?: AnalyserNode | null;
|
|
14
15
|
}
|
|
15
16
|
export declare function BlobVisualizer(props: BlobVisualizerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
17
|
//# sourceMappingURL=BlobVisualizer.d.ts.map
|
|
@@ -1 +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;
|
|
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;IAClB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA2JxD"}
|
|
@@ -48,6 +48,11 @@ export function BlobVisualizer(props) {
|
|
|
48
48
|
coreRef.current = null;
|
|
49
49
|
};
|
|
50
50
|
}, []);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
if (props.analyzer !== undefined) {
|
|
53
|
+
coreRef.current?.setAnalyzer(props.analyzer);
|
|
54
|
+
}
|
|
55
|
+
}, [props.analyzer]);
|
|
51
56
|
useEffect(() => {
|
|
52
57
|
const initStyle = async () => {
|
|
53
58
|
if (!coreRef.current) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlobVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAEL,WAAW,EACX,SAAS,EACT,mBAAmB,EACnB,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,KAAK,UAAU,eAAe,CAAC,IAAmB;IAChD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC/E,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACjF,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACzE,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACjF,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YACzE,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACjF,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC/E,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"BlobVisualizer.js","sourceRoot":"","sources":["../../../src/client/audio/BlobVisualizer.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.289";
|
|
@@ -57,6 +57,7 @@ export interface BlobVisualizerProps {
|
|
|
57
57
|
style?: BlobStyleType;
|
|
58
58
|
options?: Partial<BlobOptions>;
|
|
59
59
|
visible?: boolean;
|
|
60
|
+
analyzer?: AnalyserNode | null;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
export function BlobVisualizer(props: BlobVisualizerProps) {
|
|
@@ -74,6 +75,12 @@ export function BlobVisualizer(props: BlobVisualizerProps) {
|
|
|
74
75
|
};
|
|
75
76
|
}, []);
|
|
76
77
|
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (props.analyzer !== undefined) {
|
|
80
|
+
coreRef.current?.setAnalyzer(props.analyzer);
|
|
81
|
+
}
|
|
82
|
+
}, [props.analyzer]);
|
|
83
|
+
|
|
77
84
|
useEffect(() => {
|
|
78
85
|
const initStyle = async () => {
|
|
79
86
|
if (!coreRef.current) {
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
import type {
|
|
16
16
|
AudioVisualizer,
|
|
17
17
|
BlobStyleType,
|
|
18
|
-
BlobVisualizerFunctions,
|
|
19
18
|
UglyBotSocket,
|
|
20
19
|
} from 'ugly-app/client';
|
|
21
20
|
|
|
@@ -97,6 +96,11 @@ function CanvasVizView({
|
|
|
97
96
|
useEffect(() => {
|
|
98
97
|
const canvas = canvasRef.current;
|
|
99
98
|
if (!canvas) return;
|
|
99
|
+
// Match canvas resolution to display size
|
|
100
|
+
const rect = canvas.getBoundingClientRect();
|
|
101
|
+
const dpr = window.devicePixelRatio || 1;
|
|
102
|
+
canvas.width = rect.width * dpr;
|
|
103
|
+
canvas.height = rect.height * dpr;
|
|
100
104
|
const viz = createCanvasViz(type);
|
|
101
105
|
vizRef.current = viz;
|
|
102
106
|
if (analyzer) viz.setAnalyzer(analyzer);
|
|
@@ -105,18 +109,11 @@ function CanvasVizView({
|
|
|
105
109
|
viz.detach();
|
|
106
110
|
vizRef.current = null;
|
|
107
111
|
};
|
|
108
|
-
|
|
109
|
-
}, [type]);
|
|
110
|
-
|
|
111
|
-
useEffect(() => {
|
|
112
|
-
vizRef.current?.setAnalyzer(analyzer);
|
|
113
|
-
}, [analyzer]);
|
|
112
|
+
}, [type, analyzer]);
|
|
114
113
|
|
|
115
114
|
return (
|
|
116
115
|
<canvas
|
|
117
116
|
ref={canvasRef}
|
|
118
|
-
width={600}
|
|
119
|
-
height={200}
|
|
120
117
|
style={{ width: '100%', height: 200, borderRadius: 8, background: '#111' }}
|
|
121
118
|
/>
|
|
122
119
|
);
|
|
@@ -131,12 +128,6 @@ function VisualizerView({
|
|
|
131
128
|
vizType: VizType;
|
|
132
129
|
analyzer: AnalyserNode | null;
|
|
133
130
|
}) {
|
|
134
|
-
const blobRef = useRef<BlobVisualizerFunctions>(null);
|
|
135
|
-
|
|
136
|
-
useEffect(() => {
|
|
137
|
-
blobRef.current?.setAnalyzer(analyzer);
|
|
138
|
-
}, [analyzer]);
|
|
139
|
-
|
|
140
131
|
if (canvasVizTypes.has(vizType)) {
|
|
141
132
|
return <CanvasVizView type={vizType as CanvasVizType} analyzer={analyzer} />;
|
|
142
133
|
}
|
|
@@ -151,8 +142,8 @@ function VisualizerView({
|
|
|
151
142
|
return (
|
|
152
143
|
<div style={{ height: 300, position: 'relative' }}>
|
|
153
144
|
<BlobVisualizer
|
|
154
|
-
blobRef={blobRef}
|
|
155
145
|
style={vizType as BlobStyleType}
|
|
146
|
+
analyzer={analyzer}
|
|
156
147
|
/>
|
|
157
148
|
</div>
|
|
158
149
|
);
|
|
@@ -508,7 +499,8 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
508
499
|
|
|
509
500
|
const ttsAudio = useTTSAnalyzer();
|
|
510
501
|
const streamIdRef = useRef<string | null>(null);
|
|
511
|
-
const
|
|
502
|
+
const playStartRef = useRef(0);
|
|
503
|
+
const wordTimersRef = useRef<ReturnType<typeof setTimeout>[]>([]);
|
|
512
504
|
const unsubsRef = useRef<Array<() => void>>([]);
|
|
513
505
|
|
|
514
506
|
function addLog(msg: string, kind: LogEntry['kind'] = 'info') {
|
|
@@ -531,29 +523,45 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
531
523
|
addLog(`Got tts:chunk streamId=${data.streamId} (expected=${streamId}) audioLen=${data.audio?.length ?? 0}`);
|
|
532
524
|
if (data.streamId !== streamId) return;
|
|
533
525
|
if (data.audio) {
|
|
526
|
+
if (!playStartRef.current) playStartRef.current = Date.now();
|
|
534
527
|
ttsAudio.playChunk(data.audio);
|
|
535
528
|
addLog(`Queued audio chunk (${data.audio.length} b64 chars)`, 'ok');
|
|
536
529
|
}
|
|
537
530
|
}),
|
|
538
531
|
socket.on('tts:word', (data) => {
|
|
539
532
|
if (data.streamId !== streamId) return;
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
533
|
+
const word = data.word ?? (data as Record<string, unknown>).text as string | undefined;
|
|
534
|
+
const idx = (data as Record<string, unknown>).wordIndex as number | undefined;
|
|
535
|
+
addLog(`Word: "${word}" idx=${idx} startMs=${data.startMs}`);
|
|
536
|
+
if (word != null) {
|
|
537
|
+
// Schedule highlight at the word's startMs relative to playback start
|
|
538
|
+
const delay = typeof data.startMs === 'number' ? data.startMs - (Date.now() - playStartRef.current) : 0;
|
|
539
|
+
const apply = () => {
|
|
540
|
+
setCurrentWord(word);
|
|
541
|
+
if (typeof idx === 'number') {
|
|
542
|
+
setWordHistory((prev) => {
|
|
543
|
+
const next = prev.map((w) => ({ ...w, active: false }));
|
|
544
|
+
if (idx < next.length) {
|
|
545
|
+
next[idx] = { ...next[idx]!, active: true };
|
|
546
|
+
}
|
|
547
|
+
return next;
|
|
548
|
+
});
|
|
549
549
|
}
|
|
550
|
-
|
|
551
|
-
|
|
550
|
+
};
|
|
551
|
+
if (delay > 10) {
|
|
552
|
+
const timer = setTimeout(apply, delay);
|
|
553
|
+
wordTimersRef.current.push(timer);
|
|
554
|
+
} else {
|
|
555
|
+
apply();
|
|
556
|
+
}
|
|
552
557
|
}
|
|
553
558
|
}),
|
|
554
559
|
socket.on('tts:done', (data) => {
|
|
555
560
|
addLog(`Got tts:done streamId=${data.streamId}`);
|
|
556
561
|
if (data.streamId !== streamId) return;
|
|
562
|
+
for (const t of wordTimersRef.current) clearTimeout(t);
|
|
563
|
+
wordTimersRef.current = [];
|
|
564
|
+
playStartRef.current = 0;
|
|
557
565
|
setPlaying(false);
|
|
558
566
|
setCurrentWord('');
|
|
559
567
|
addLog('Playback complete', 'ok');
|
|
@@ -563,6 +571,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
563
571
|
socket.on('tts:error', (data) => {
|
|
564
572
|
addLog(`Got tts:error streamId=${data.streamId} msg=${data.message}`, 'err');
|
|
565
573
|
if (data.streamId !== streamId) return;
|
|
574
|
+
for (const t of wordTimersRef.current) clearTimeout(t);
|
|
575
|
+
wordTimersRef.current = [];
|
|
576
|
+
playStartRef.current = 0;
|
|
566
577
|
setPlaying(false);
|
|
567
578
|
addLog(`TTS error: ${data.message ?? 'unknown'}`, 'err');
|
|
568
579
|
unsubAll();
|
|
@@ -575,7 +586,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
575
586
|
if (!text.trim()) return;
|
|
576
587
|
const streamId = `tts-${++ttsCounter}`;
|
|
577
588
|
streamIdRef.current = streamId;
|
|
578
|
-
|
|
589
|
+
playStartRef.current = 0;
|
|
590
|
+
for (const t of wordTimersRef.current) clearTimeout(t);
|
|
591
|
+
wordTimersRef.current = [];
|
|
579
592
|
|
|
580
593
|
setPlaying(true);
|
|
581
594
|
setCurrentWord('');
|
|
@@ -616,6 +629,9 @@ function TTSSection({ socket }: { socket: UglyBotSocket }) {
|
|
|
616
629
|
if (streamIdRef.current) {
|
|
617
630
|
socket.send('tts:cancel', { streamId: streamIdRef.current });
|
|
618
631
|
}
|
|
632
|
+
for (const t of wordTimersRef.current) clearTimeout(t);
|
|
633
|
+
wordTimersRef.current = [];
|
|
634
|
+
playStartRef.current = 0;
|
|
619
635
|
unsubAll();
|
|
620
636
|
socket.release();
|
|
621
637
|
setPlaying(false);
|