Commit Graph

64 Commits

Author SHA1 Message Date
kennethreitz a3256ac15d play.py: slower spectrum decay (0.4/frame) — peaks hold and fall gently
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 14:31:13 -04:00
kennethreitz cce0a750c3 play.py: auto-detect terminal width for spectrum analyzer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 13:43:20 -04:00
kennethreitz 80bb3ae1de play.py: bass tilt 30%→10% on spectrum
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:59:55 -04:00
kennethreitz fabcd0de92 play.py: spectrum 76 chars wide — nearly full terminal width
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:59:11 -04:00
kennethreitz ef6e7ab54c play.py: spectrum peak hold with slow decay
Peaks hold and decay by 1 level per frame (~40fps = smooth falloff).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:57:43 -04:00
kennethreitz 219ac4974b play.py: tilt EQ on spectrum — bass reduced 70%, highs untouched
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:57:09 -04:00
kennethreitz 054d837454 play.py: spectrum log 8→3 — quiet parts nearly silent on display
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 07:56:09 -04:00
kennethreitz 76bcc531f9 play.py: spectrum log 15→8 — even more contrast
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:38:40 -04:00
kennethreitz 1dd53ac8c0 play.py: reduce log compression on spectrum (50→15) for more contrast
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:38:02 -04:00
kennethreitz dc8e9627d7 play.py: extra newline before controls
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:36:29 -04:00
kennethreitz c43156e40b play.py: 3-row braille spectrum — 12 levels of vertical resolution
Each frequency band maps to 0-12 height across 3 rows of braille.
Top row shows peaks only, bottom row shows everything.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:33:39 -04:00
kennethreitz 387fcfb3d7 play.py: spectrum above controls, progress below
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:30:44 -04:00
kennethreitz 72ab3c7949 play.py: lighter braille spectrum — ⡀⡄⡆⡇
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:28:55 -04:00
kennethreitz 135ea951d2 play.py: braille spectrum analyzer ⡀⡄⡆⡇⣇⣧⣷⣿
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:28:13 -04:00
kennethreitz b87188798b play.py: log scale on spectrum analyzer for better sensitivity
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:26:53 -04:00
kennethreitz e5e0093dc9 Fix oscilloscope — overwrite in place instead of scrolling
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:25:19 -04:00
kennethreitz ebb6067e53 play.py: FFT spectrum analyzer with colored frequency bands
Logarithmic frequency bins via FFT. Bass (green) → mids (yellow) →
highs (red). Block characters ▁▂▃▄▅▆▇█. 40fps at 48 bands.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:24:20 -04:00
kennethreitz 2bb36d0e41 play.py: 40fps oscilloscope with centered waveform display
Shorter sample window (30ms), finer block characters, centered
on zero crossing. Flat line shows as ─, peaks as █.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:22:45 -04:00
kennethreitz 186e5b8aff play.py: oscilloscope refresh 20fps (was ~7fps)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:21:48 -04:00
kennethreitz 5f1b95609b play.py: terminal oscilloscope during playback
Block character waveform (▁▂▃▄▅▆▇█) sampled from the audio buffer
at the current playback position. Amber colored. Updates in real time
above the progress bar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 01:21:18 -04:00
kennethreitz ffea82b246 play.py: n/p in single play mode keeps navigating through album
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 16:57:55 -04:00
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 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 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 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 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 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 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 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 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 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