Files
voicebox/app/src/stores/serverStore.ts
T
James Pine 97292ecef7 feat: add chunk crossfade slider (0ms = hard cut)
Persisted setting (default 50ms) controls how audio chunks are blended
together.  Set to 0 for a clean hard cut with no overlap.
2026-03-13 06:48:06 -07:00

50 lines
1.2 KiB
TypeScript

import { create } from 'zustand';
import { persist } from 'zustand/middleware';
interface ServerStore {
serverUrl: string;
setServerUrl: (url: string) => void;
isConnected: boolean;
setIsConnected: (connected: boolean) => void;
mode: 'local' | 'remote';
setMode: (mode: 'local' | 'remote') => void;
keepServerRunningOnClose: boolean;
setKeepServerRunningOnClose: (keepRunning: boolean) => void;
maxChunkChars: number;
setMaxChunkChars: (value: number) => void;
crossfadeMs: number;
setCrossfadeMs: (value: number) => void;
}
export const useServerStore = create<ServerStore>()(
persist(
(set) => ({
serverUrl: 'http://127.0.0.1:17493',
setServerUrl: (url) => set({ serverUrl: url }),
isConnected: false,
setIsConnected: (connected) => set({ isConnected: connected }),
mode: 'local',
setMode: (mode) => set({ mode }),
keepServerRunningOnClose: false,
setKeepServerRunningOnClose: (keepRunning) => set({ keepServerRunningOnClose: keepRunning }),
maxChunkChars: 800,
setMaxChunkChars: (value) => set({ maxChunkChars: value }),
crossfadeMs: 50,
setCrossfadeMs: (value) => set({ crossfadeMs: value }),
}),
{
name: 'voicebox-server',
},
),
);