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
  • tools
  • lcxl3.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(tide-table): recover a tracklist from one room mic, when every existing lens is blind · 470cc882
    PLN downloaded the CosmicFest capture and called it "an interesting test". It is:
    a 63-minute handheld stage-mic MP3, and all three boundary lenses the toolbox
    owns need something it does not have. Orbit-activity needs stems, there are
    none. The gig-log `track` events are the real tracklist, but the 1 Hz recorder
    never ran that night — newest session is 2026-08-20. Gap detection assumes a
    set stops between tracks, and a livecoded set does not.
    
    What is left is audio, plus one large advantage: we know what was prepped, so
    this is matching over ~23 candidates rather than open discovery. PLN warns "the
    set was slightly altered", so candidates are treated as candidates — presence
    is strong evidence, absence is weak.
    
    Two lenses, because neither is sufficient. Tempo finds seams but cannot name
    them: five candidates sit at 120 BPM and three at 124, and tempo from audio is
    only ever determined up to a factor of two. Sample signature names a segment,
    and PLN pointed at exactly the right prior art — sample_tfidf.py already
    computes which sounds IDENTIFY a track. take5 and love_parade are df=1;
    jungle_breaks is in 80 tracks and worthless. 15 of 23 candidates carry a sound
    rare enough (df<=6) to fingerprint; 19 such banks, 533k reference hashes.
    
    Constellation fingerprints rather than correlation, because the reference is a
    dry one-shot off disk and the query is that sound through a PA, a room, a
    limiter, "ppl messed with it", and a 320 kbps encode. Peak constellations encode
    only which time-frequency points stick up locally, which survives all of that.
    
    My first attempt at extracting banks was wrong and the output said so: 9 tokens
    across 23 tracks, every count 1, and a label reading "shares every bank" that
    actually meant "nothing parsed". The regex looked for `s "name"` while the
    ParVagues idiom applies a bare string — `$ "meth_bass" # n "..."`. The fix was
    not a better regex, it was using the parser that already existed.
    
    The docstring carries the limits because they are easy to launder: a detection
    means the SOUND occurred, not that the TRACK played, since banks get reused
    live. Recall is asymmetric — a track whose signature never sounded is invisible.
    And vote counts are not comparable between banks, because a 582-file bank offers
    far more chances to match than a 4-file one.
    
    Also adds `lcxl3.py sniff`: capture raw SysEx in full. The custom-mode format is
    undocumented, and Components writes modes to the device over SysEx — capturing
    those bytes is the difference between a layout authored in lcxl_grid.py and one
    merely stored in a web app.
    PLN (Algolia) authored Aug 28, 2026
    470cc882
lcxl3.py 24 KB
EditWeb IDE
×

Replace lcxl3.py

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.