import { useState } from "react" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Slider } from "@/components/ui/slider" import { Switch } from "@/components/ui/switch" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { useModal } from "@/features/modals/services" import { AppliedEffect } from "../types" // Тип для активного аудио эффекта interface ActiveAudioEffect { id: string name: string type: string enabled: boolean params: Record } // Предустановленные аудио эффекты const audioEffectPresets = { fadeIn: { id: "fade-in", name: "Fade In", type: "AudioFadeIn", enabled: true, params: { duration: 1.0 }, }, fadeOut: { id: "fade-out", name: "Fade Out", type: "AudioFadeOut", enabled: true, params: { duration: 1.0 }, }, equalizer: { id: "equalizer", name: "Equalizer", type: "AudioEqualizer", enabled: true, params: { gain_low: 0, gain_mid: 0, gain_high: 0 }, }, compressor: { id: "compressor", name: "Compressor", type: "AudioCompressor", enabled: true, params: { threshold: -20, ratio: 4, attack: 5, release: 50 }, }, reverb: { id: "reverb", name: "Reverb", type: "AudioReverb", enabled: true, params: { room_size: 0.5, damping: 0.5, wet: 0.3 }, }, delay: { id: "delay", name: "Delay", type: "AudioDelay", enabled: true, params: { delay: 0.5, decay: 0.3 }, }, normalize: { id: "normalize", name: "Normalize", type: "AudioNormalize", enabled: true, params: { target: -23 }, }, denoise: { id: "denoise", name: "Denoise", type: "AudioDenoise", enabled: true, params: { amount: 0.5 }, }, } export function AudioEffectsEditorModal() { const { modalData, closeModal } = useModal() // Получаем данные из modalData const clip = modalData?.clip const track = modalData?.track const onApplyEffects = modalData?.onApplyEffects as ((effects: AppliedEffect[]) => void) | undefined const [activeEffects, setActiveEffects] = useState>( (modalData?.activeEffects as Record) || {}, ) const [selectedTab, setSelectedTab] = useState("basic") const toggleEffect = (effectId: string, preset: ActiveAudioEffect) => { if (activeEffects[effectId]) { const { [effectId]: _, ...rest } = activeEffects setActiveEffects(rest) } else { setActiveEffects({ ...activeEffects, [effectId]: { ...preset }, }) } } const updateEffectParam = (effectId: string, param: string, value: number) => { if (activeEffects[effectId]) { setActiveEffects({ ...activeEffects, [effectId]: { ...activeEffects[effectId], params: { ...activeEffects[effectId].params, [param]: value, }, }, }) } } const handleApply = () => { const effects: AppliedEffect[] = Object.values(activeEffects).map((effect, index) => ({ id: `applied-audio-effect-${Date.now()}-${index}`, effectId: effect.id, enabled: true, order: index, customParams: effect.params, })) if (onApplyEffects) { onApplyEffects(effects) } closeModal() } return (
Базовые Динамика Пространство Коррекция {/* Fade In/Out */}

Fade In

Плавное нарастание громкости

toggleEffect("fade-in", audioEffectPresets.fadeIn)} />
{activeEffects["fade-in"] && (
updateEffectParam("fade-in", "duration", value[0])} />
)}

Fade Out

Плавное затухание громкости

toggleEffect("fade-out", audioEffectPresets.fadeOut)} />
{activeEffects["fade-out"] && (
updateEffectParam("fade-out", "duration", value[0])} />
)}
{/* Equalizer */}

Эквалайзер

Настройка частот

toggleEffect("equalizer", audioEffectPresets.equalizer)} />
{activeEffects.equalizer && (
updateEffectParam("equalizer", "gain_low", value[0])} />
updateEffectParam("equalizer", "gain_mid", value[0])} />
updateEffectParam("equalizer", "gain_high", value[0])} />
)}
{/* Compressor */}

Компрессор

Выравнивание динамического диапазона

toggleEffect("compressor", audioEffectPresets.compressor)} />
{activeEffects.compressor && (
updateEffectParam("compressor", "threshold", value[0])} />
updateEffectParam("compressor", "ratio", value[0])} />
)}
{/* Normalize */}

Нормализация

Выравнивание громкости

toggleEffect("normalize", audioEffectPresets.normalize)} />
{activeEffects.normalize && (
updateEffectParam("normalize", "target", value[0])} />
)}
{/* Reverb */}

Реверберация

Добавление пространства

toggleEffect("reverb", audioEffectPresets.reverb)} />
{activeEffects.reverb && (
updateEffectParam("reverb", "room_size", value[0])} />
updateEffectParam("reverb", "wet", value[0])} />
)}
{/* Delay */}

Задержка (Delay)

Эхо эффект

toggleEffect("delay", audioEffectPresets.delay)} />
{activeEffects.delay && (
updateEffectParam("delay", "delay", value[0])} />
updateEffectParam("delay", "decay", value[0])} />
)}
{/* Denoise */}

Шумоподавление

Удаление фонового шума

toggleEffect("denoise", audioEffectPresets.denoise)} />
{activeEffects.denoise && (
updateEffectParam("denoise", "amount", value[0])} />
)}
) }