Commit Graph

195 Commits

Author SHA1 Message Date
kennethreitz ea1dafa8dd play.py: Ctrl+C/q returns to menu during play-all, auto-advance on track end
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:56:38 -04:00
kennethreitz 9fd3698082 play.py: next/prev track with n/p keys during playback
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:54:16 -04:00
kennethreitz 4e8870e4e7 Remove h1 — let the cover speak
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:11:22 -04:00
kennethreitz 118ee63255 Remove ASCII art from README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:10:56 -04:00
kennethreitz 54b20d85db Add rendered WAV files for all 24 tracks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:08:36 -04:00
kennethreitz 1501b3b4bc README: prose about sonic landscape and code-as-music philosophy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 15:08:00 -04:00
kennethreitz d0661759e5 Add album cover, embed in README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:42:38 -04:00
kennethreitz 7a1c3f9e7e play.py: numbered WAV filenames matching album order (01_raga_midnight.wav)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:37:59 -04:00
kennethreitz 9d27bb0f91 The Interruption: reese volume 0.28→0.2
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:17:44 -04:00
kennethreitz 9f928d7fa7 play.py: skip ahead/back during playback (+/-/f/s/d/a/space/q)
Callback-based playback with raw terminal input. Single char keys
only — no escape sequences. The Interruption: reese sidechain 0.55.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:14:40 -04:00
kennethreitz e40156787b Revert mellotron on Raga Midnight, wavefold on Acid Reign, bump Ghost Protocol arp
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:06:02 -04:00
kennethreitz a9b356f5cc New synths across 10 more tracks — mellotron, drift, wavefold, granular
Silk Road: mellotron_flute in finale. The Dialogue: drift pad, mellotron ending.
Acid Reign: wavefold in breakdown. Chakra: drift at crown. Raga Midnight:
mellotron_strings over 808 drop. The Temple: granular_pad texture.
Sleight of Hand: mellotron_choir. Gravity: drift tambura.
Ghost Protocol: NES pulled back. An Exception: psycho bass 0.3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:55:52 -04:00
kennethreitz 04d13255e1 Revisit 6 tracks with new pytheory 0.40.9 synths
Ghost Protocol: arp → drift (analog wobble)
Deep Time: shimmer → drift, added granular_pad grain layer
Voltage: added hard_sync part at bar 49
The Interruption: reese bass → drift (analog menace)
An Exception Occurred: added ring_mod during psychosis
Intrusive: thought → wavefold with organ envelope (uglier, harder)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:34:15 -04:00
kennethreitz 48a80d9fa4 Remove artist references from track descriptions
Ghost Protocol: no more Portishead/Strobe references.
Apex: no more Beast Mode reference. Descriptions stand alone.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:19:51 -04:00
kennethreitz d5193b0b66 play.py: widen selection bar to fit tuning/Hz
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:06:35 -04:00
kennethreitz 1cee7b342e play.py: fixed-width selection bar — no more size jumping
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:06:04 -04:00
kennethreitz 9e789bfee9 play.py: hide Hz/tuning from selection bar, show only on unselected
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:05:21 -04:00
kennethreitz 46a440650f play.py: left-justify key names in picker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:04:23 -04:00
kennethreitz 420462d830 play.py: fixed-width columns in picker for table alignment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:03:14 -04:00
kennethreitz d656a7392b Chakra: add key variable, picker shows (multi) for multi-key tracks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:01:49 -04:00
kennethreitz 5538951629 play.py: just show system name (shruti), move after Hz
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 13:00:30 -04:00
kennethreitz 33257f9147 play.py: show tuning system in picker for non-standard tracks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:59:44 -04:00
kennethreitz 2d9802c354 play.py: shorten key names in picker (Fm, D phr, G)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:58:10 -04:00
kennethreitz 31b7a8523d An Exception Occurred: add key variable for picker display
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:57:44 -04:00
kennethreitz e231f0d83b Remove .DS_Store, add to .gitignore
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:56:28 -04:00
kennethreitz 14aba6b396 play.py: show key in track picker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:56:10 -04:00
kennethreitz c4c29b7981 Fix uv config — use .python-version for 3.14 pin
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:54:55 -04:00
kennethreitz 3c9f5f2962 play.py: show track titles in picker, reference pitch for 432Hz tracks
Picker shows docstring titles (RAGA MIDNIGHT, BEAST MODE) instead of
filenames. Non-440 reference pitch shown next to BPM.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:52:35 -04:00
kennethreitz 782cf0075a Reorder album, README tracklist as linked table with tuning
Album arc: opener → cool down → world → energy peak → emotional
heart → exploration → sacred → closing. Track names link to source.
Table shows key, BPM, tuning system, vibe.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:51:23 -04:00
kennethreitz b9d97a64ff Update README with play command, uv pins Python 3.14
README: full picker controls, render-all docs, uv run play.
pyproject: requires-python >=3.10 (compat), uv pins 3.14.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:47:52 -04:00
kennethreitz d5ec081316 Python 3.14, play entry point, setuptools build
Requires Python >=3.14. play.py exposed as 'play' console script
via setuptools. uv sync installs everything.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:45:44 -04:00
kennethreitz 8458eda73b play.py: render-all logging — time, size, errors, total elapsed
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:43:50 -04:00
kennethreitz 29934b5420 play.py: parallel rendering with ThreadPoolExecutor + subprocesses
First-run prompt and 'R' render-all both use 4 parallel workers.
Each track renders in its own subprocess. Colored first-run UI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:41:59 -04:00
kennethreitz 5090411405 Add Apex (track 24), play all/render all, first-run prompt, 30fps picker
Apex: Eb minor, 140 BPM — koto hook, wavefold bass, mellotron strings,
timpani, 32nd koto shreds. Beast Mode's meaner sibling.

play.py: 'a' play all, 'R' render all, first-run render prompt,
30fps picker refresh, WAV cache checkmarks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:40:01 -04:00
kennethreitz 9f6ea88665 play.py: WAV caching, instant playback, 'r' to render in picker
Tracks auto-cache to wavs/ on first play. Subsequent plays load the
WAV instantly (no render wait). 'r' key in picker force-renders.
Checkmark shows cached tracks. Picker returns to loop after playback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:26:44 -04:00
kennethreitz 860dc1f323 Add Shruti Lofi (track 23) — microtonal lo-fi hip hop
D minor, shruti just intonation, 75 BPM. Kalimba blips, Rhodes
chords, sitar hook with microtonal bends, mellotron flute pad,
tambura Sa-Pa drone, lazy boom bap with ghost snares, 808 sub,
vinyl crackle. Singing bowl bookends.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:20:53 -04:00
kennethreitz a1d6559bf3 Add Beast Mode (track 22) — trap + sitar + mellotron at 135 BPM
G minor, 135 BPM. Sitar hook, 808 slides, distorted saw bass with
sidechain, trap hats with 32nd rolls, mellotron flute drop, timpani
war drums, sitar 32nd shred solo. Singing bowl section markers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:01:34 -04:00
kennethreitz a9dbff25d3 Add Music Box Factory (20) + Cathedral (21)
Music Box Factory: G major, 108 BPM — 8 tuned percussion instruments.
Kalimba, vibraphone, celesta, marimba, glockenspiel, xylophone,
crotales, timpani. No synths, no strings.

Cathedral: D minor, 60 BPM — tubular bells in taj_mahal, bagpipe
drone, mellotron choir, timpani thunder, pipe organ, kick in
cathedral reverb. Mellotron choir solo at the heart.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:43:18 -04:00
kennethreitz 1abd7f7d1a Add Emergence (track 19) — acoustic births electronic
E minor, 100 BPM. Singing bowls + tingsha opening, didgeridoo,
mellotron flute, sitar 16th arps with dynamic velocity and 32nd
shreds. Synths emerge at bar 33. Both worlds collide at the peak.
Mellotron solo bridges them. Bowls alone at the end.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:23:01 -04:00
kennethreitz 395571cc94 Add Tape Memory (track 18), play.py loops back to picker
Tape Memory: Db minor, 90 BPM — mellotron flute, FM bells, drift,
crotales, granular texture, hard_sync, PWM, wavefold, ring_mod.
Theremin solo at the peak. Singing bowls + tingsha throughout.
Play.py now returns to track picker after playback finishes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:01:35 -04:00
kennethreitz 02e59afa93 Waveforms: extended to 3:16 — FM solo, saw/square duet, canon, finale
New sections: FM solo melody (bars 65-72), saw + square harmony in
thirds (73-80), sine/triangle/PWM canon in a round (81-88), all
waveforms return for finale then dissolve (89-96). Lead melody louder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 23:43:13 -04:00
kennethreitz dc62b52732 Waveforms: add FM, PWM, wavefold synths — pin pytheory>=0.40.9
Three new oscillator types join the stack: FM (metallic, bar 25),
PWM (wobbling pulse width, bar 33), wavefold (harsh harmonics, bar 41).
Nine waveforms total now stacking into the peak.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 23:29:16 -04:00
kennethreitz 5e083ade8c Add Waveforms (17), Intrusive (16), Voices (15) — update all listings
Waveforms: F minor, 118 BPM — percussive synth blips stacking with
occasional sustained pads, 808 sub, rhythmic drums with ghost notes.
Intrusive: saw phrase loops, acceptance arc with sub and cello.
Voices: five vocal parts multiplying, piano as reality.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:33:51 -04:00
kennethreitz e949ca3d81 Add Intrusive (track 16) — invasive thoughts as a repeating synth phrase
Bb minor, 92 BPM. One saw synth phrase loops endlessly. Rhodes tries
to play something else, drums try to drown it — fighting makes it
louder. Acceptance at bar 33: stop fighting, sub bass enters as
ground, cello warmth, the thought slows and passes.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:32:44 -04:00
kennethreitz f006170506 Voices: dotted eighth delay on piano for reality cutting through
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:31:54 -04:00
kennethreitz 99530578bd Add Voices (track 15) — auditory hallucinations in music
F# minor, 65 BPM. Five vocal parts multiplying across the stereo
field, each with different vowels/delay/reverb/pan. Overwhelm at
bar 25. Piano enters as reality at bar 33. Voices fade one by one.
One last whisper at bar 55, then silence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:24:00 -04:00
kennethreitz e86fef392e An Exception Occurred: theremin volume + velocity pulled back to stop clipping
Peak volume 0.55→0.32, velocities capped at 85. Still screaming,
just not clipping.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:17:33 -04:00
kennethreitz a181fc5128 play.py: word-wrapped multi-line track descriptions in picker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:14:37 -04:00
kennethreitz 68d697b669 An Exception Occurred: singing bowl chorus, deep tambura, louder tabla
Three singing bowls panned across stereo during despair. Deep tambura
drone from bar 1 — Sa-Pa fifth that darkens to minor third during
the shift, disappears in psychosis, returns in recovery. Tabla 0.38.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:13:01 -04:00
kennethreitz 6b4aba776d An Exception Occurred: theremin octave down, longer despair, bass boost
Theremin ceiling lowered from +24 to +12. Despair section doubled to
8 bars — broken minor melody attempt, lowest piano note of the piece.
Psychosis bass volume 0.5→0.7. Tingsha + tabla added for meditation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 02:07:36 -04:00