MCPcopy Create free account
hub / github.com/RylanBot/melody-workshop / createMultiTrack

Function createMultiTrack

src/hooks/useMultiTrackContext.tsx:44–78  ·  view source on GitHub ↗
(audio: TrackMeta[])

Source from the content-addressed store, hash-verified

42 const [activeId, setActiveId] = useState<number>(0);
43
44 const createMultiTrack = (audio: TrackMeta[]) => {
45 if (!containerRef.current) return;
46 cleanUpResource();
47
48 const newTracks = audio.map((track) => ({
49 id: track.id,
50 url: track.url,
51 startPosition: track.position,
52 ...TRACK_OPTIONS
53 }));
54
55 multiTrackRef.current = MultiTrack.create(newTracks, {
56 container: containerRef.current,
57 cursorColor: "#0a9528",
58 cursorWidth: 1.5,
59 dragBounds: true,
60 timelineOptions: {
61 insertPosition: "beforebegin"
62 }
63 });
64
65 multiTrackRef.current.on("start-position-change", ({ id, startPosition }) => {
66 const numericId = id as number;
67 setTracks((prev) =>
68 prev.map((track) => (track.id === numericId ? { ...track, position: startPosition } : track))
69 );
70 });
71
72 const parentDiv = containerRef.current?.querySelector("#multitrack > div > div");
73 if (parentDiv) {
74 const children = Array.from(parentDiv.children) as HTMLElement[];
75 // 第 0 个是 timeline,第 1 个是 cursor
76 children[1].classList.add("active");
77 }
78 };
79
80 const addTracks = (audio: { url: string; name: string }[]) => {
81 const newTracks = [

Callers 2

addTracksFunction · 0.85
deleteTrackFunction · 0.85

Calls 1

cleanUpResourceFunction · 0.70

Tested by

no test coverage detected