- Modified createTrack and createTrackFromBuffer to accept height parameter - Updated useMultiTrack to pass height when creating tracks - Applied settings.ui.defaultTrackHeight when adding new tracks - Applied settings.editor.defaultZoom for initial zoom state - Removed duplicate useSettings hook declaration in AudioEditor - New tracks now use configured default height from settings 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import { useState, useCallback } from 'react';
|
|
import type { Track } from '@/types/track';
|
|
import { createTrack, createTrackFromBuffer } from '@/lib/audio/track-utils';
|
|
|
|
export function useMultiTrack() {
|
|
// Note: localStorage persistence disabled in favor of IndexedDB project management
|
|
const [tracks, setTracks] = useState<Track[]>([]);
|
|
|
|
const addTrack = useCallback((name?: string, height?: number) => {
|
|
const track = createTrack(name, undefined, height);
|
|
setTracks((prev) => [...prev, track]);
|
|
return track;
|
|
}, []);
|
|
|
|
const addTrackFromBuffer = useCallback((buffer: AudioBuffer, name?: string, height?: number) => {
|
|
const track = createTrackFromBuffer(buffer, name, undefined, height);
|
|
setTracks((prev) => [...prev, track]);
|
|
return track;
|
|
}, []);
|
|
|
|
const removeTrack = useCallback((trackId: string) => {
|
|
setTracks((prev) => prev.filter((t) => t.id !== trackId));
|
|
}, []);
|
|
|
|
const updateTrack = useCallback((trackId: string, updates: Partial<Track>) => {
|
|
setTracks((prev) =>
|
|
prev.map((track) =>
|
|
track.id === trackId ? { ...track, ...updates } : track
|
|
)
|
|
);
|
|
}, []);
|
|
|
|
const clearTracks = useCallback(() => {
|
|
setTracks([]);
|
|
}, []);
|
|
|
|
const reorderTracks = useCallback((fromIndex: number, toIndex: number) => {
|
|
setTracks((prev) => {
|
|
const newTracks = [...prev];
|
|
const [movedTrack] = newTracks.splice(fromIndex, 1);
|
|
newTracks.splice(toIndex, 0, movedTrack);
|
|
return newTracks;
|
|
});
|
|
}, []);
|
|
|
|
const setTrackBuffer = useCallback((trackId: string, buffer: AudioBuffer) => {
|
|
setTracks((prev) =>
|
|
prev.map((track) =>
|
|
track.id === trackId ? { ...track, audioBuffer: buffer } : track
|
|
)
|
|
);
|
|
}, []);
|
|
|
|
const loadTracks = useCallback((tracksToLoad: Track[]) => {
|
|
setTracks(tracksToLoad);
|
|
}, []);
|
|
|
|
return {
|
|
tracks,
|
|
addTrack,
|
|
addTrackFromBuffer,
|
|
removeTrack,
|
|
updateTrack,
|
|
clearTracks,
|
|
reorderTracks,
|
|
setTrackBuffer,
|
|
loadTracks,
|
|
};
|
|
}
|