Monorepo for Aesthetic.Computer aesthetic.computer
core pop SCORE.md
20 kB
Markdown

Score for Pop #

Mill Mission #

pop is the research home for music that comes out of Aesthetic Computer — songs, instrumentals, and the writing about them. The papers platter pushes AC's thinking out as text. pop does the same job in the form of tracks: short, finished pieces of music that can leave the building and be heard.

The mill is not a label. It is a research lane. Every track here exists because it was the most honest way to compress an idea — a feature, a vision, a paper, a moment in the project. If a thread can survive being written as a song, it was real. If it can survive being compressed to ninety seconds, it was essential.

What This Is #

Pop tracks are one output of the AC research platter. They share source material with papers/ — the same threads, the same readings, the same code — but render as audio. The platter feeds both. Some threads become papers, some become tracks, some become both.

Attribution #

AC pop tracks — and the essays written about them — are work of @jeffrey / aesthetic.computer. The DistroKid artist is Aesthetic Dot Computer; the byline on any pop-track essay is @jeffrey (matching papers/cli.mjs, which sets AUTHOR_NAME = "@jeffrey"). Do not byline AC pop tracks or AC papers as "Studio Zollo" — that studio name belongs only to @jeffrey's separate personal-art / non-AC attributions, never to AC work.

Posture #

bottom-up + compositional. tracks here are composed from AC's own instruments — the notepat sample bank, sinebells, chord, beat — the same primitives the recap waltz bed already uses. no suno-style end-to-end song generation; that's product-in, top-down, and not compositional. AI vocal (ElevenLabs) is the one exception, since vocal is performance on top of the composition, not the compositional substrate.

Process #

platter (raw material: notes, code, conversations, papers)
  → thread (a vision worth singing)
    → composition beds (chords + topline + rhythm + rate)
      → election (one bed becomes the piece's musical genome)
        → arrangement (dance, texture, sound design, lyrics, vocal)
          → mix (~1:30 mp3, audio-only)

New track lanes begin with a neutral batch from node pop/bin/render-composition-beds.mjs. Compare the beds without genre production, then record the choice with --elect NN. Do not polish rhythm, timbre, visual treatment, or vocal before the harmony/topline election.

An elected genome may also drive a measure-by-measure native performance. The C engine owns timing and keeps future measures buffered; agent inference and time/weather inputs may shape later measures but never block audio. See REALTIME-COMPOSITION.md.

Audio-only by default. No video, no chrome. If a track later becomes a video lane, that's a recap-side concern, not a pop concern.

Shipped + in-flight singles (DistroKid status, masters, covers, videos) are tracked in RELEASES.md.

Media files (final mixes, beds, raw billable vocal stems) are not in git — code is the source of truth, media is backed up to the assets system per-track. See ASSETS.md.

Swimlanes #

1. big pictures (big-pictures/) #

Hip hop / trap dance versions of jeffrey's AC visions. Roughly 1:30 per track. Lyrics rapped over a 4/4 trap bed (808s, triplet hats), one track per "big picture" — a single AC vision pulled from the papers platter (laptop orchestras, kidlisp, native OS, identity, latency, etc).

Voice posture: emo-rap honesty. Conviction quiet but absolute. No flexing, no industry posture. Internal rhyme over end rhyme. The vision is the hook.

See big-pictures/README.md for the format spec.

2. voice (voice/) #

The jeffrey harness for Pink Trombone — a tiny, runnable, anatomically grounded jeffrey voice fitted to jeffrey-pvc on a minimal phoneme corpus, with PT parameter bounds derived from the jeffrey-platter photographs. Research lane, not a track lane: the deliverable is a C/WASM-runnable synth + a paper, not an mp3.

See voice/README.md for the pipeline. Status: scaffolded 2026-05-04.

3. dance (dance/) #

Audio-only dance tracks built bottom-up from AC instruments. One AC vision per track, compressed to a 4-bar melodic theme over a four-on-the-floor bed — not a rap hook. Roughly 1:30 per track.

Opens on trance as the first sub-format (138 BPM, minor key, supersaw lead, sidechained pad + bass). The lane lives or dies on the breakdown → build → drop arc, not vibe.

Voice posture: jeffrey-pvc as one-shot hook phrase in the drop + spoken word in the breakdown. Not rapped, not fully sung. Instrumental tracks are also valid.

Prerequisite: a supersaw voice (5–7 detuned saws in unison) doesn't exist in AC yet and is the gating instrument for this lane.

See dance/README.md for the format spec and dance/STUDY.md for the genre study + arrangement law.

4. chillwave (chillwave/) #

Audio-only chillwave / ambient tracks built bottom-up from AC instruments. One AC vision (or mood) per track, slow + spacious, compressed to a melody-over-noise-bed rather than a hook or theme. Roughly 1:30–3:00 per track — longer than the other lanes because the form lives on slow swell.

Voice posture: instrumental by default. jeffrey-pvc as whispered fragments only when present — never sung, never rapped. Reverb-soaked spoken word.

Bed: pink-noise ocean (LFO LP, ~8s wave period) + slow white-noise filter sweeps (~22s cycle, opens fully on the swell) + sparse descending sine-blip bubbles + sinepower pad chord + sinebells melody from the score.

See chillwave/README.md for the format spec.

5. jungle (jungle/) #

Audio-only sunlit jungle built bottom-up from AC instruments — chopped breakbeats, deep dub sub, reggae skank, dub sirens. ~165 BPM, felt half-time. These are beats for fía to rap over: the lane ships the instrumental, fía is the live MC toasting in spanish on top. Her voice is a real human performance — not jeffrey-pvc, not AI — so it sits fully inside the bottom-up posture with no exception needed.

Opens on sunbreak (golden / daytime, not dark-club) with three variants: jungleton (jungletón — dembow tresillo woven in), raggasol (classic ragga jungle), rodando (liquid rollers).

The hybrid break (decided @jeffrey, 2026-05-16). Jungle is classically built on a sample — the Amen break. That collides with the no-top-down-sampling posture. The lane's resolution is a hybrid: the groove is the AC percussion kit (percussion.mjs) chopped into Amen-style syncopation, plus a synthesized bitcrush/flange snare-roll break-stab at phrase ends as the genre nod. No Winstons sample, no loop. Not an exception to the posture — its honest answer. Whether AC-played jungle can carry the form is the research question this lane exists to test.

See jungle/README.md for the format spec.

6. hippyhayzard (hippyhayzard/) #

Audio-only happy hardcore × nightcore that the form lets turn into an earthbound/mother sorrow-ballad — the name is the spec: hippy (bright major euphoria) colliding with hazard (a minor rave-siren switch). ~152 BPM, half-time ballad feel, a 16-bar hand-voiced Bach chorale (borrowed iv, deceptive cadence), 1:28 with a drop-out break.

Three new bottom-up voices were built for it (same module shape as the dance synths, pure-float for an eventual ac-native C port): skrill (Skrillex FM + swept-formant talking bass — dance/synths/), hoover (Alpha-Juno "Mentasm" with the pitch whoop), zitar (sitar = Karplus-Strong + jawari buzz + sympathetic-string bank).

Voice posture: jeffrey-pvc as a sung lead (not rapped, not one-shot) — the lyric is the vision, tender and plain. bin/sing.mjs is the ballad-tuned vocal pipeline (say → align → WORLD pitch → stretch → intimate mix onto the bed).

See hippyhayzard/README.md for the format spec and hippyhayzard/STUDY.md for the genre study + the blend law. Status: scaffolded 2026-05-19; first sung 1:28 cut rendered, vocal↔section bar-lock is the open refinement.

7. hellsine (hellsine/) #

A concept track under one strict constraint: every voice is a sine wave — no noise, no saw, no square, no samples. The thesis: a distorted sine is the gabber kick, so "all-sine + hardcore" is hardcore's literal DNA. The track carries a full John Williams melodic structure (a hand-written heroic leitmotif, stated → developed → transposed → triumphantly restated) and is built to work as epic study music: continuous, immersive, no dead air under a film arc. ~1:45, 182 BPM, D minor with a climax key-lift. The strictest possible reading of the bottom-up posture — one waveform, a whole genre, a whole compositional tradition.

Voice posture: instrumental. The "voices" are additive-sine brass / strings, sine-FM stabs, a saturated-sine hoover, and the saturated-sine kick. No vocal.

See hellsine/README.md for the all-sine law + the voice table + the form. Status: scaffolded 2026-05-19.

8. booch (booch/) #

Audio-only fermented hip-hop: a golden-era boom-bap foundation (Queen Latifah / Pete Rock — ~94 BPM, swung 16ths, fat boom kick, bap snare, jazz Rhodes loop, vinyl crackle) cultured with Timbaland future-funk on top (sparse tabla/tumbi accents, hard-gated rests, ad-lib silence). The name is the form: booch = kombucha = slow-fermented mother culture — the lane studies that metaphor literally. The two sub-styles aren't averaged; the track switches between them on purpose (verse 1 full Latifah pocket, verse 2 sparse Timbaland pocket). The ferment is the swing.

Voice posture: jeffrey-pvc as rapped lead (not sung, not one-shot) — narrow pitch range, tight to the 16th-note grid, Latifah-confident on the hook, Missy-playful on verse 2. Mirrors the big-pictures/ TTS-on-bottom-up-composition posture but at boom-bap tempo, not trap.

See booch/README.md for the format spec and booch/STUDY.md for the genre study + the blend law. Status: scaffolded 2026-05-24; first track visualize-my-booch lyrics + .np score drafted, render/sing pipeline pending.

9. novelizer (novelizer/) #

The novel-voice research lane (research lane like voice/ and dsp/, not a track lane). Its project: research synthesis techniques the AC stable doesn't have — scanned synthesis, pulsar trains, feedback-FM chaos, banded-waveguide friction, VOSIM, two-mass creature voices — and prove each as a portable C99 voice (libm only, AC house style) rendered against a fixed battery of test melodies, then scored for novelty / musicality / entertainability. Keepers graduate into track lanes, dance/synths/-style JS ports, gm_synth, or AC Native.

See novelizer/README.md for the harness contract and batch workflow, novelizer/REPORT.md for verdicts. Status: batch 1 landed 2026-07-02 — six voices (scanner, pulsar, frictus, twomass, chaosfm, vosim), all judged keepers.

10. bracelet (bracelet/) #

Binaural spatial necklaces — the join of two things AC already had and had never connected: the Toussaint rhythm geometry running in minitek/, and the procedural binaural core in nullabye/c/ac_hrtf.h.

The cycle becomes a ring of sound sources around the listener's head (step i at azimuth 2πi/n, step 0 ahead, horizontal plane), which turns two equivalences that are asserted on paper and never heard into physical operations: rotation spins the sound field — precession in time and rotation in space become the same operation — and reflection is a left/right mirror across the median plane. E(k,n) stops being a number and becomes a regular k-gon of sound sources around your skull.

The lane's first real finding is a negative one: most canonical timelines are achiral. son, bossa, shiko, tresillo, cinquillo and bembé are each their own reflection up to rotation, so mirroring them only turns the ring. Only rumba, soukous and gahu are chiral — and the ring must additionally carry its centroid off the mirror axis, which rules out soukous. The mirror section uses gahu. The obvious choice would have been a null test.

Voice posture: instrumental. Headphones required — on speakers the track collapses to mono and there is nothing left.

See bracelet/README.md for the mapping law, the form, and the per-strike verification. Status: first cut rendered 2026-08-07 (bracelet, 1:49, 138 BPM, A minor).

11. notespatial (notespatial/) #

The ring, heard from the middle. Note(s)pat(ial) Native — the eleven-chapter spatial suite for six AC OS laptops written for the September 24, 2026 CultureHub LA performance — printed binaurally from the center seat by the studio's model of the room (fedac/native/tools/notespatial-native-render.mjs: the runtime's own envelopes and gm_synth core, per-seat effects, measured KEMAR HRTFs), then mastered by the house law with one static gain. The score is the release; the room is the instrument. Instrumental, 12:56, headphones.

See notespatial/README.md. Status: master cut and packet staged 2026-09-25, awaiting @jeffrey's listen.

12. (open) #

More lanes will land here as they prove themselves. Candidates: kidlisp-as-instrument tracks, AC-native ensemble cuts, voice-memo-grade demo lane. None of them have earned a swimlane yet — they need a real track first.

Shared tooling — rhythm #

pop/lib/necklace.mjs + pop/lib/c/ac_necklace.h are the one implementation of the geometry of musical rhythm: Bjorklund, necklace/bracelet canonical forms, maximal evenness (chord-sum, per Demaine et al.), balance, rhythmic oddity, deepness and shelling, off-beatness, syncopation measures, and the distance geometry (chronotonic, swap, Hamming) including morph paths between timelines. The C header is allocation-free and libm-only, same posture as pop/nullabye/c/ac_hrtf.h, so it compiles unchanged to WebAssembly.

pop/lib/necklace-space.mjs maps a cycle onto the space around a listener's head — step i at azimuth 2πi/n — and carries the perceptual limits that bound the mapping (Mills' minimum audible angle, the precedence window, London's entrainment ceiling). It feeds ac_hrtf.h.

Both are specified by papers/rhythm-platter/: every digest entry there ends in a tools: block naming the functions it requires, and where the digest and the code disagree the digest is the spec.

node pop/bin/necklace.mjs son                       # analyse a timeline
node pop/bin/necklace.mjs E 5 16 --space --bpm 138  # place it around a head
node pop/bin/necklace.mjs son rumba --morph         # walk one into the other
npm run test:pop-necklace                           # the acceptance test

The library replaced hand-rolled copies in minitek/c/{hypnotek,dubtek}.c, which now include the header. That lift is verified lossless three ways: the test reproduces both engines' published numbers (mean E = 0.888, total D = 7.67, the 0.996/0.993/0.989 clave ordering), a parity harness pins the C header against the JS twin across 76 rows, and both tracks re-render byte-identical WAVs. acidtek.c was left alone — its "off-beatness" is Barlow indispensability, not Toussaint's measure, and its comment now says so.

Shared tooling — single study (critical listening) #

pop/study/ is the single-study-toolkit: static analysis of a finished single, read from the outside in the way a listener meets it — the mastered object (LUFS, loudness range, crest, stereo image, spectral tilt), then its shape in time (self-similarity → section letters + a phrase tier), then who is playing when (six-band energy, percussive share, onset density), then what the notes are (key global + per-section, dominant voice). One command per track, one to compare a shelf of them:

cd pop
.venv/bin/python study/study.py track.mp3 --out study/out/slug --title T --artist A
.venv/bin/python study/compare.py study/out/*/report.json --out study/out/comparison

This is the mill's critique bench: run it on our own masters next to work we admire and let the deltas argue. First use (oskie's One Step vs. four /pop releases) is written up in papers/study-one-step/. Registered in the pop menu as analysis.single-study / analysis.study-compare; honesty limits (approximate LRA/true-peak, per-track section letters, streaming-rip air band) live in study/README.md. Study inputs and outputs stay out of git — study/out/ is ignored, and third-party audio never gets committed.

Sample sources (commercial-safe) #

Tracks ship to DistroKid/Spotify, so any sourced audio MUST be CC0 / public-domain or project-owned. Approved sources:

  • Freesound API — approved source; filter license:"Creative Commons 0" (CC0) only. Credentials are NOT committed — they live in the private vault: aesthetic-computer-vault/freesound/credentials.json (Aesthetic Computer account; api_key = search/preview token, client_id/secret = OAuth2 for full-quality downloads).
  • archive.org — CC0 / publicdomain/zero items only (verify each item's licenseurl; "license: none" ≠ public domain).
  • Project-owned — the AC zoo bank (fedac/native/samples/zoo/) and any AC field recordings.

Per-track sourced SFX are logged with provenance + license in that track's gitignored out/ dir (e.g. pop/dance/out/.sfx-credits.txt — trancepenta uses CC0 archive.org horse gallop + neigh).

References #

Third-party lyrics (emo rap reference corpus, etc) live in the vault. They are not committed to this repo. See references/README.md.


maintained by @jeffrey

Tracking a vocal — the definitive process (2026-09-30) #

Every sung vocal in /pop goes through the same five instruments, in this order. The aligner seeds; the ear decides; the videos prove it.

  1. Seed — pop/<lane>/bin/word-times.py --fa (MMS forced alignment of the known lyric, onsets snapped ≤ 40 ms to a detected attack, words tiled edge to edge, breath ≥ 250 ms). The syllable-bump re-cut is opt-in (--shape); it scored worse than raw alignment.
  2. Ear — sylla-prep.py cuts one clip per line and writes a spec with track = the whole stem; SyllaWizard --spec … opens the entire vocal as one scrolling spectrogram with every word's box in place. Drag edges, "from here ▶" to shift everything after a word, Save.
  3. Collect + study — sylla-collect.py folds the boxes into src/word-bounds.json; bounds-study.py [--apply] scores the hand bounds against the machines and her envelope and nudges late onsets (an attack 30–120 ms before a loud onset) and short releases.
  4. Apply — word-times.py --fa again (hand bounds win), then the lane's splice and bake.
  5. Prove — two videos, judged by eye and ear together:
    • the lyric check (score-video.mjs --lyrics): every word a block on its own lane over her waveform, bars numbered in playing order with bar.beat under every beat, so any moment can be named ("28.2"); with --click the same lanes play over her stem on a bare click + kick (the clip-lane click video — loner's review-score4 language on lyricline's audio);
    • the lyricline (pop/bin/lyricline.mjs): her stem on a bare click + kick from the chart's real beat times, each word flashing at the instant its audio lands, the bar.beat counter running. Render only the seam in question (--from/--to). Born on imab, fixed-BPM; this one follows the chart.

Holding a vowel across a seam: pop/bin/vowel-hold.py (Rubber Band R3 stretch of the real vowel by default; world and loop kept), applied to the LEAD stem only, sized to the next sung word (tail.toNextVoice in the splice). Cut at the end of the steady pitch, never in a glide. Reference lane: pop/sailor-song/ (README has the command sequence).