From b9d97a64ff0edf8699c7b7ae7e8b5446e5a6d890 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 3 Apr 2026 12:47:52 -0400 Subject: [PATCH] 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) --- README.md | 43 ++++++++++++++++++++++++++----------------- pyproject.toml | 8 +++++++- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index c83d997..1353610 100644 --- a/README.md +++ b/README.md @@ -46,39 +46,48 @@ Each track is a `.py` file. Run it to hear it. ```bash uv sync +uv run play ``` -**Interactive player** — pick a track, play/pause, seek: +On first run, you'll be prompted to render all tracks to WAV (parallel, ~3-4 min). After that, playback is instant. + +**Interactive player** — animated track picker with album order: ```bash -uv run play.py +uv run play # pick from list +uv run play tracks/the_temple.py # play specific track ``` -**Play a specific track:** +**Picker controls:** -```bash -uv run play.py tracks/the_temple.py -``` +| Key | Action | +|-----|--------| +| `↑`/`↓` | Navigate (wraps around) | +| `Enter` | Play track (from WAV cache if available) | +| `r` | Render selected track to WAV | +| `a` | Play all tracks in album order | +| `R` | Render all tracks (4 parallel workers) | +| `q` | Quit | **Playback options:** ```bash -uv run play.py tracks/acid_reign.py --from 17 --to 32 # measure range -uv run play.py tracks/the_temple.py --from-time 3:30 # seek to time -uv run play.py tracks/ghost_protocol.py --solo arp,kick # solo parts -uv run play.py tracks/deep_time.py --mute wind # mute parts -uv run play.py tracks/the_temple.py --pitch 440 # override tuning -uv run play.py tracks/acid_reign.py --bpm 160 # override tempo -uv run play.py tracks/silk_road.py --loop 3 # loop playback +uv run play tracks/acid_reign.py --from 17 --to 32 # measure range +uv run play tracks/the_temple.py --from-time 3:30 # seek to time +uv run play tracks/ghost_protocol.py --solo arp,kick # solo parts +uv run play tracks/deep_time.py --mute wind # mute parts +uv run play tracks/the_temple.py --pitch 440 # override tuning +uv run play tracks/acid_reign.py --bpm 160 # override tempo +uv run play tracks/silk_road.py --loop 3 # loop playback ``` **Export & inspect:** ```bash -uv run play.py tracks/raga_midnight.py -o raga.wav # export WAV -uv run play.py tracks/culture_clash.py --info # show metadata -uv run play.py tracks/the_interruption.py --parts # list parts -uv run play.py --list # list all tracks +uv run play tracks/raga_midnight.py -o raga.wav # export WAV +uv run play tracks/the_interruption.py --info # show metadata +uv run play tracks/the_interruption.py --parts # list parts +uv run play --list # list all tracks ``` `Ctrl+C` to stop playback. diff --git a/pyproject.toml b/pyproject.toml index bac0784..d25b948 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,11 +6,17 @@ license = "ISC" authors = [ { name = "Kenneth Reitz", email = "me@kennethreitz.org" }, ] -requires-python = ">=3.14" +requires-python = ">=3.10" dependencies = [ "pytheory>=0.40.9", ] +[tool.uv] +python-preference = "only-managed" + +[tool.uv.python] +version = "3.14" + [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta"