mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-09-26 21:55:15 -07:00
Add post-processing audio effects system
Adds a full effects pipeline powered by Spotify's pedalboard library, enabling users to apply professional DSP effects (flanger, reverb, delay, compressor, pitch shift, filters, gain) to generated audio. Key features: - Effects chain editor with drag-and-drop reordering (dnd-kit) - Generation versions: clean copy always saved, processed versions created on top - Built-in presets (Robotic, Radio, Echo Chamber, Deep Voice) + custom user presets - Per-profile default effects chain (auto-applied to new generations) - Per-generation effects override from the generation form - Apply effects to existing generations from history (creates new version) - Ephemeral preview endpoint for auditioning effects without persisting - Dedicated Effects sidebar tab with preset management and live preview - Version switcher in history cards with expandable panel - Backward-compatible: existing generations backfilled as clean versions
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { create } from 'zustand';
|
||||
import type { EffectConfig } from '@/lib/api/types';
|
||||
|
||||
interface EffectsStore {
|
||||
selectedPresetId: string | null;
|
||||
setSelectedPresetId: (id: string | null) => void;
|
||||
|
||||
// Working chain for the detail panel (editing a preset or building a new one)
|
||||
workingChain: EffectConfig[];
|
||||
setWorkingChain: (chain: EffectConfig[]) => void;
|
||||
|
||||
// Track if editing an existing preset vs creating new
|
||||
isCreatingNew: boolean;
|
||||
setIsCreatingNew: (v: boolean) => void;
|
||||
}
|
||||
|
||||
export const useEffectsStore = create<EffectsStore>((set) => ({
|
||||
selectedPresetId: null,
|
||||
setSelectedPresetId: (id) => set({ selectedPresetId: id, isCreatingNew: false }),
|
||||
|
||||
workingChain: [],
|
||||
setWorkingChain: (chain) => set({ workingChain: chain }),
|
||||
|
||||
isCreatingNew: false,
|
||||
setIsCreatingNew: (v) => set({ isCreatingNew: v, selectedPresetId: v ? null : null }),
|
||||
}));
|
||||
Reference in New Issue
Block a user