diff --git a/components/editor/AudioEditor.tsx b/components/editor/AudioEditor.tsx index bdb017b..7e05266 100644 --- a/components/editor/AudioEditor.tsx +++ b/components/editor/AudioEditor.tsx @@ -95,6 +95,7 @@ export function AudioEditor() { removeTrack, updateTrack, clearTracks, + loadTracks, } = useMultiTrack(); // Track whether we should auto-select on next add (when project is empty) @@ -955,15 +956,8 @@ export function AudioEditor() { throw new Error('Project not found'); } - // Clear current state - clearTracks(); - - // Load tracks - for (const track of projectData.tracks) { - if (track.audioBuffer) { - addTrackFromBufferOriginal(track.audioBuffer, track.name); - } - } + // Load tracks with all their properties restored + loadTracks(projectData.tracks); // Restore settings setZoom(projectData.settings.zoom); @@ -976,7 +970,7 @@ export function AudioEditor() { addToast({ title: 'Project Loaded', - description: `"${projectData.metadata.name}" loaded successfully`, + description: `"${projectData.metadata.name}" loaded successfully (${projectData.tracks.length} track${projectData.tracks.length !== 1 ? 's' : ''})`, variant: 'success', duration: 2000, }); @@ -989,7 +983,7 @@ export function AudioEditor() { duration: 3000, }); } - }, [clearTracks, addTrackFromBufferOriginal, addToast]); + }, [loadTracks, addToast]); // Delete project const handleDeleteProject = React.useCallback(async (projectId: string) => { @@ -1252,6 +1246,19 @@ export function AudioEditor() {

Audio UI

+ {/* Project Name */} +
+ setCurrentProjectName(e.target.value)} + onBlur={handleSaveProject} + className="bg-transparent border-none outline-none text-sm font-medium text-muted-foreground hover:text-foreground focus:text-foreground transition-colors px-2 py-1 rounded hover:bg-accent/50 focus:bg-accent" + placeholder="Untitled Project" + style={{ width: `${Math.max(12, currentProjectName.length)}ch` }} + /> +
+ {/* Track Actions */}