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
  • foundry
  • beatocc.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    fix(foundry): the loops have holes in them — an aggregate cannot see a hole · 672b0fb3
    PLN opened fred_angie_bass, the first kit he tried, and found two bad loops
    immediately: ":0 starts, then silence, then starts again" and ":2 why is this
    not trimmed, silence before silence after?". Both had shipped as tier S with
    zero flags, one at grade 0.991.
    
    He was right, and it is worse than two files. Binning each loop's envelope on
    its own beat grid says 12 of 111 loops carry dead air — and 5 of 14 bass loops,
    36%, which is why he hit it on his first click. angie:0 has beats 7-9 of 32 at
    -88 dBFS; bighen_bass:1 has a five-beat hole and 62.5% occupancy at grade 0.983.
    
    This is the third time this session that silence beat the grader, and the
    reason is the same each time, one level further down. Silence-as-optimum was
    fixed at export, then again in the finder before ranking, but every one of those
    checks is an AGGREGATE: file peak, whole-file RMS, max of the beat table. An
    aggregate cannot see a hole. A loud loop with a silent bar inside it passes all
    three. And kitcheck's dead-bar rejector looks at BARS, so a 2.5-beat gap
    straddling a bar boundary is invisible — angie:0's two bars read -18.3 and
    -15.9 dBFS while the beats between them read -88. Resolution was a correctness
    input and I had treated it as a detail.
    
    So this commit does not fix it, it measures it. beatocc.py bins the envelope on
    the loop's own beat grid (bpm and bars from the manifest, never re-estimated)
    and reports SHAPE rather than level: head and tail dead beats, longest interior
    dead run, occupancy, plus a beat map under -v. It exits non-zero when any loop
    has dead air, so it can go straight into kitgate once the thresholds are known.
    
    Thresholds deliberately not chosen yet. Occupancy floors have to be per family
    like the periodicity floors — marea_vox/06_breaths_1b at 25% occupancy is a
    breath, not a defect, while a bass loop at 62% is broken — and the head-silence
    question has three plausible answers (trim, rotate, reject) with rotation ruled
    out already, since angie:2's offset is 1.17 beats and _rotate_to_downbeat snaps
    to beats. Placing those floors by guess is how silence got graded A in the first
    place. #24 on the board carries the open decisions and the data needed for each.
    
    The Fred pack section is now marked DEFECTIVE rather than SHIPPED. It needs a
    re-cut once the shape check exists, and PLN's verdict stands as written:
    "tbh i dont think the loops are usable."
    PLN (Algolia) authored Aug 22, 2026
    672b0fb3
beatocc.py 4.33 KB
EditWeb IDE
×

Replace beatocc.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.