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
8b9dcb4bd4
Disable share links on tracks
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 01:05:02 -04:00
kennethreitz
695c5ef98f
Update uv.lock for Python 3.14
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 00:56:25 -04:00
kennethreitz
b6009f9a11
Add web player — HTML5 audio, oscilloscope, SEO, share links
...
Static site with nginx on fly.io. Features:
- Album art, track list with descriptions and metadata
- Persistent bottom player bar with seek, volume, next/prev
- Real-time oscilloscope via Web Audio API
- Deep linking via URL hash (#track_name)
- Share link per track (copy to clipboard)
- Keyboard shortcuts (space, arrows, n/p)
- Mobile responsive
- SEO meta tags, Open Graph, Twitter cards
- Streaming service link placeholders
- MP3s converted from WAVs for web delivery
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-04 00:39:40 -04:00
kennethreitz
c1b4a11d51
Update album description in README.md
...
Removed a sentence about a piano's story from the album description.
2026-04-03 20:34:27 -04:00
kennethreitz
e4ac27e951
Fix formatting in README for play command examples
2026-04-03 17:00:47 -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
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