Edit segments

{draft.segments.length} track(s) · {formatDuration(totalDuration(draft))} total audio

{#if issues.length > 0}

{issues.length} issue(s) to fix before confirming:

    {#each issues as i}
  • {i.message}
  • {/each}
{/if}
{#each draft.segments as s, i (s.id)}
{s.trackNumber} onaction({ type: "editSegmentTitle", segmentId: s.id, title: e.currentTarget.value })} placeholder="Title" />
{formatRange(s)} plays {durationLabel(s)}
{ e.preventDefault(); const at = formNum(e, "at"); if (at !== null && Number.isFinite(at)) { onaction({ type: "splitSegment", segmentId: s.id, at, newSegmentId: genId() }); } const f = e.currentTarget; if (f instanceof HTMLFormElement) f.reset(); }} >

Skips {#if s.removedSegments.length > 0} ({s.removedSegments.length} · {formatDuration(removedDuration(s))} cut) {/if}

{#if s.removedSegments.length > 0}
{#each removedRegions(s) as reg (reg.uuid)} {/each}
    {#each s.removedSegments as r (r.uuid)}
  • onaction({ type: "toggleRemovedSegment", segmentId: s.id, removedUuid: r.uuid })} /> {categoryLabel(r.category)} {r.label} {formatDuration(r.start)}–{formatDuration(r.end)} {#if r.enabled}will cut{/if}
  • {/each}
{/if}
{ e.preventDefault(); const f = e.currentTarget; if (!(f instanceof HTMLFormElement)) return; const fd = new FormData(f); const start = Number(fd.get("s")); const end = Number(fd.get("e")); const lbl = String(fd.get("label") ?? "Skip") || "Skip"; if (Number.isFinite(start) && Number.isFinite(end)) { onaction({ type: "addRemovedSegment", segmentId: s.id, removed: newRemovedSegment(genId(), start, end, lbl), }); } f.reset(); }} >
{/each}
{#if selectedSegment} {#key selectedSegment.id} (selectedSegmentId = null)} /> {/key} {:else}
Pick Lookup on a segment to search MusicBrainz, or use Match album to fill all at once.
{/if}
{#if matchAlbumOpen} (matchAlbumOpen = false)} /> {/if}