Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • armada
  • ui
  • audio-mounts.json
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(tide-table): put the machine's labels in front of ears, using the lab that already exists · b8bfec85
    PLN: "dotn we have a webapp for listening to seams in a set? you could use it for
    me to confirm your labels. reusable tooling pattern."
    
    It does — armada/ui/bounds.html, the Boundary Lab. So this builds no second page.
    make_bounds.py generates the document that page already reads, which means the
    confirmation loop is the one that already stores calls per gig in localStorage and
    already exports boundaries-<gig>.json.
    
    That direction is the point. The three-lens fusion is a machine opinion: 11 of 18
    segments have two lenses behind them, 4 are honestly unresolved, and the two rows
    that were WRONG were caught by PLN's memory rather than by any score. An analysis
    pipeline whose output lands in a report has nowhere to be corrected.
    
    The contract was read from BoundaryLab.tsx, not assumed, and two details would
    have been wrong if guessed: marks[].t is in MASTER time (the page subtracts
    clipStart itself), and `url` is handed to WaveformPlayer with dur = clipEnd -
    clipStart, so it must point at a CLIP of that length rather than at the whole
    recording. Mark keys are colour-coded by the page, so the segments where a lens
    OVERRODE the embedding get `takeover` — brand magenta, which its own comment calls
    "the one to try first" — because that is exactly where an ear call is worth most.
    
    Clips plus a mount rather than the whole file, following audio-mounts.json's own
    reasoning: it maps /audio/<prefix>/ for BOTH vite dev and armada/serve.py
    deliberately, since "a UI that only works under npm run dev is a demo, not a
    tool". A 40s clip also loads instantly on a phone over LAN, which is where this
    gets used. Peaks are normalised per clip because these are 40s windows of a room
    mic whose level wanders, and a waveform you cannot see is not a waveform.
    
    Verified rather than asserted: /bounds.html 200, the document 200 at 190 KB, a
    clip 200 at 641 KB, and a Range request returns 206 with exactly 1024 bytes — so
    seeking works, which is the whole point of auditioning on a phone.
    PLN (Algolia) authored Aug 29, 2026
    b8bfec85
audio-mounts.json 1.38 KB
EditWeb IDE
×

Replace audio-mounts.json

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.