The Dialogue: dry sitar shred, changelog update, remove .claude from repo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-01 12:08:42 -04:00
parent b0738dfb1d
commit ce48cc3121
9 changed files with 7 additions and 80 deletions
@@ -1,5 +0,0 @@
- [Kenneth's music preferences](user_kenneth_music.md) — mixing, composition, workflow for Interpretations album
- [Interpretations Album](project_interpretations_album.md) — album project, tracks are real music not demos
- [Commit every change](feedback_commit_every_change.md) — don't batch commits, commit after every edit
- [Volume and compressor](feedback_volume_compressor.md) — volume=0.0 breaks parts, use velocity for fading
- [Taj mahal on drums](feedback_taj_mahal_drums.md) — creates choir artifacts, use algorithmic reverb instead
@@ -1,10 +0,0 @@
---
name: Commit every change
description: Kenneth wants every code change committed immediately, not batched
type: feedback
---
Commit every change as it's made — don't batch up multiple changes before committing.
**Why:** Kenneth works iteratively and wants a clean git history of each tweak. He often asks to hear the result immediately after changes, and having uncommitted work makes rollbacks harder.
**How to apply:** After every edit (volume change, instrument swap, part addition), commit immediately before playing or moving on.
@@ -1,10 +0,0 @@
---
name: Taj mahal reverb creates choir sound on drums
description: Convolution reverb (taj_mahal) on percussive hits creates unwanted harmonic/choral artifacts
type: feedback
---
Don't use reverb_type="taj_mahal" on drum/percussion parts — the long IR creates harmonic resonances that sound like a choir. Use algorithmic reverb (reverb=0.35, reverb_decay=1.5) for drums instead.
**Why:** Discovered during Raga Midnight — tabla with taj_mahal reverb sounded like a choir was singing. Cathedral reverb is OK for cajon. Taj mahal works great on sustained instruments (tambura, sitar, Rhodes, pad, singing bowl).
**How to apply:** Reserve taj_mahal for melodic/sustained instruments. Use algorithmic or cathedral reverb for percussion.
@@ -1,14 +0,0 @@
---
name: Volume and compressor behavior
description: part.volume doesn't always work as expected due to master compressor — use velocity for fading, rests for silence
type: feedback
---
Don't use volume=0.0 on parts and then .set(volume=X) to fade in — the renderer may not handle this correctly. Instead:
- Start parts at their real volume
- Use .rest() for silent sections
- Fade dynamics via velocity, not volume
- The master compressor normalizes sparse arrangements to full volume — more parts playing simultaneously keeps relative levels sane
**Why:** We discovered volume=0.0 parts produced silence even after .set() changes, and the compressor over-amplified solo instruments.
**How to apply:** Always set non-zero starting volume. Use velocity for dynamics. For drum parts, volume param requires the pytheory fix (drum_part.volume multiplication in play.py).
@@ -1,10 +0,0 @@
---
name: Interpretations Album
description: Kenneth is making an album called "Interpretations" — raga.py is intended as a real track
type: project
---
Kenneth is producing an album called "Interpretations". The raga.py example ("Raga Midnight") is intended as an actual track on this album, not just a demo. Quality bar is album-ready.
**Why:** This is real music production, not just testing pytheory features.
**How to apply:** Treat composition decisions seriously — musical quality matters more than demonstrating API features. Push for authenticity and expressiveness.
@@ -1,29 +0,0 @@
---
name: Kenneth's music production preferences
description: Preferences for mixing, sound design, and composition learned during Interpretations album
type: user
---
Kenneth is producing an album called "Interpretations" using pytheory. He has a good ear and knows what he wants.
Mixing preferences:
- Loves taj mahal reverb on melodic instruments
- Wants loud kick and sub bass — always asks to make them louder
- Prefers cathedral reverb on cajon over taj mahal
- Dislikes didgeridoo being too loud — it eats the mix
- Sitar needs to cut through — less reverb, more volume
- Drums generally need to be louder than initial settings
Composition preferences:
- Likes Indian classical instruments (tabla, sitar, tambura, dhol)
- Appreciates proper musical structure (tabla tihai cadence, raga form)
- Enjoys genre mashups (Mario + Drake, acid + cajon)
- Wants humanize on most parts
- Sarah is involved — she requested the Sufjan/RKS track
- Prefers 432 Hz reference pitch for meditative tracks
- Likes shruti tuning system on Score (not Key)
Workflow:
- Iterates fast — makes a change, listens, adjusts
- Commits frequently
- Uses pytheory's play_score() for rendering, not the live engine (for now)
+1
View File
@@ -4,3 +4,4 @@ __pycache__/
*.egg-info/
wavs/
mp3s/
.claude/
+2
View File
@@ -2,7 +2,9 @@
## 2026-04-01
- **Track 10: The Dialogue** — E Phrygian, 75 BPM, shruti just intonation, A=432 Hz. Sitar (human) and theremin (machine) find each other through call-and-response. House kick + hats + clap enter at bar 41. 32nd note sitar shredding at the peak with dry reverb.
- **Track 9: The Temple** — A Phrygian, 65 BPM, shruti just intonation, A=432 Hz. Singing bowls, tambura, harmonium, bansuri, tabla solo, triple sitar solo with 32nd note shredding, theremin at the peak, electronic kick.
- Raga Midnight: sitar reverb reduced for clarity
- **play.py** — interactive curses track picker, progress bar playback, `--from-time`/`--to-time` seeking, `--pitch` override, `--solo`/`--mute` parts, WAV/MIDI export.
- Acid Reign: cajon louder (0.5), less reverb (0.2)
- ASCII art header added to README
+4 -2
View File
@@ -220,7 +220,8 @@ for _ in range(2):
(Ma,112),(Pa.add(-12),80),(Pa,115),(Pa.add(-12),82),
(Dha,118),(Pa.add(-12),80),(Ni,120),(Pa.add(-12),82)]:
sitar.add(note, Duration.SIXTEENTH, velocity=vel)
# 32nd note shred
# 32nd note shred — pull reverb back so the notes cut through
sitar.set(reverb=0.1, delay=0.08)
for note in [Sa, Re, Ga, Ma, Pa, Dha, Ni, Sa.add(12),
Sa.add(12), Ni, Dha, Pa, Ma, Ga, Re, Sa]:
sitar.add(note, 0.125, velocity=125)
@@ -228,7 +229,8 @@ for note in [Sa, Re, Ga, Ma, Pa, Dha, Ni, Sa.add(12),
for note in [Ni, Dha, Pa, Ma, Ga, Re, Sa, Pa.add(-12),
Sa, Re, Ga, Ma, Pa, Dha, Ni, Sa.add(12)]:
sitar.add(note, 0.125, velocity=120)
# Held peak note
# Held peak note — reverb back for the sustain
sitar.set(reverb=0.35, delay=0.25)
sitar.add(Sa.add(12), Duration.HALF, velocity=127, bend=-0.2)
sitar.add(Pa, Duration.HALF, velocity=110)
sitar.add(Sa, Duration.WHOLE, velocity=100, bend=-0.15)