import { Scissors, TrendingDown, TrendingUp, Volume2, Zap } from "lucide-react" import { useState } from "react" import { useTranslation } from "react-i18next" import { Button } from "@/components/ui/button" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Slider } from "@/components/ui/slider" import { useAudioEngine } from "../../hooks/use-audio-engine" import { AudioClip, FadeOptions } from "../../services/audio-clip-editor" interface AudioClipEditorProps { clip: AudioClip onUpdate: (clip: AudioClip) => void onSplit: (time: number) => void } export function AudioClipEditorComponent({ clip, onUpdate, onSplit }: AudioClipEditorProps) { const { t } = useTranslation() const { engine: audioEngine } = useAudioEngine() const [fadeInDuration, setFadeInDuration] = useState(clip.fadeIn || 0) const [fadeOutDuration, setFadeOutDuration] = useState(clip.fadeOut || 0) const [fadeType, setFadeType] = useState("cosine") const [splitPosition, setSplitPosition] = useState(50) const [isNormalizing, setIsNormalizing] = useState(false) const handleFadeIn = () => { if (!audioEngine?.clipEditor) return const updatedClip = audioEngine.clipEditor.applyFadeIn(clip, { type: fadeType, duration: fadeInDuration, }) onUpdate(updatedClip) } const handleFadeOut = () => { if (!audioEngine?.clipEditor) return const updatedClip = audioEngine.clipEditor.applyFadeOut(clip, { type: fadeType, duration: fadeOutDuration, }) onUpdate(updatedClip) } const handleSplit = () => { const splitTime = (clip.duration * splitPosition) / 100 onSplit(splitTime) } const handleNormalize = async () => { if (!audioEngine?.clipEditor) return setIsNormalizing(true) try { const normalizedClip = audioEngine.clipEditor.normalizeClip(clip, -3) onUpdate(normalizedClip) } finally { setIsNormalizing(false) } } return (

{t("fairlightAudio.audioClipEditor.title")}

{/* Fade Controls */}
{/* Fade In */}
{fadeInDuration.toFixed(1)}s
setFadeInDuration(v)} min={0} max={5} step={0.1} className="flex-1" />
{/* Fade Out */}
{fadeOutDuration.toFixed(1)}s
setFadeOutDuration(v)} min={0} max={5} step={0.1} className="flex-1" />
{/* Split Control */}
{splitPosition}%
setSplitPosition(v)} min={0} max={100} step={1} className="flex-1" />
{/* Normalize */}
{t("fairlightAudio.audioClipEditor.normalizeTo")}
) }