From 50f4ed6b4bd5283520b1ec88e66c798264f36a2e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 30 Mar 2026 13:57:38 -0400 Subject: [PATCH] =?UTF-8?q?Track=207:=20Deep=20Time=20=E2=80=94=20ambient?= =?UTF-8?q?=20drone,=20B=20minor,=2040=20BPM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No rhythm, no melody. Just layers of texture dissolving into space. Sine drones (root + fifth + octave), harmonium breathing every 4 bars, singing bowl strikes every 8, triangle shimmer, wind noise with LFOs, cello entering late as the human voice. Just intonation, taj mahal reverb on everything. 7.5 minutes of deep listening. Co-Authored-By: Claude Opus 4.6 (1M context) --- tracks/deep_time.py | 155 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 tracks/deep_time.py diff --git a/tracks/deep_time.py b/tracks/deep_time.py new file mode 100644 index 0000000..c72f98c --- /dev/null +++ b/tracks/deep_time.py @@ -0,0 +1,155 @@ +""" +DEEP TIME — ambient drone. No rhythm, no melody, just texture and space. +Like listening to the earth breathe through a cathedral. +""" + +from pytheory import Key, Duration, Score, Tone, play_score + +key = Key("B", "minor") +s = key.scale + +B = s[0]; Cs = s[1]; D = s[2]; E = s[3] +Fs = s[4]; G = s[5]; A = s[6] + +score = Score("4/4", bpm=40, temperament="just") + +# ═══════════════════════════════════════════════════════════════════ +# No structure. Just layers appearing and dissolving. +# 48 bars at 40 BPM = ~7.5 minutes +# ═══════════════════════════════════════════════════════════════════ + +# ── DRONE 1 — deep sine, the foundation of the earth ─────────── +earth = score.part("earth", synth="sine", envelope="pad", volume=0.25, + reverb=0.9, reverb_type="taj_mahal", + chorus=0.3, chorus_rate=0.03, chorus_depth=0.015, + lowpass=400) + +for _ in range(48): + earth.add(B.add(-36), Duration.WHOLE, velocity=60) + +# ── DRONE 2 — fifth above, slow beating ──────────────────────── +fifth = score.part("fifth", synth="sine", envelope="pad", volume=0.18, + reverb=0.9, reverb_type="taj_mahal", + chorus=0.4, chorus_rate=0.02, chorus_depth=0.02, + lowpass=500, pan=0.3) + +for _ in range(4): + fifth.rest(Duration.WHOLE) +for _ in range(44): + fifth.add(Fs.add(-24), Duration.WHOLE, velocity=50) + +# ── DRONE 3 — octave, barely there ───────────────────────────── +octave = score.part("octave", synth="sine", envelope="pad", volume=0.12, + reverb=0.9, reverb_type="taj_mahal", + chorus=0.5, chorus_rate=0.015, chorus_depth=0.025, + lowpass=600, pan=-0.3) + +for _ in range(8): + octave.rest(Duration.WHOLE) +for _ in range(40): + octave.add(B.add(-24), Duration.WHOLE, velocity=45) + +# ── HARMONIUM — breathing chords, glacial ────────────────────── +harmonium = score.part("harmonium", instrument="harmonium", volume=0.1, + reverb=0.8, reverb_type="taj_mahal", + chorus=0.3, chorus_rate=0.1, chorus_depth=0.01) + +for _ in range(12): + harmonium.rest(Duration.WHOLE) + +# One chord every 4 bars — like breathing +chords = [ + key.progression("i")[0], + key.progression("iv")[0], + key.progression("i")[0], + key.progression("v")[0], + key.progression("i")[0], + key.progression("VI")[0], + key.progression("iv")[0], + key.progression("i")[0], + key.progression("i")[0], +] +for chord in chords: + harmonium.add(chord, Duration.WHOLE, velocity=45) + harmonium.rest(Duration.WHOLE) + harmonium.rest(Duration.WHOLE) + harmonium.rest(Duration.WHOLE) + +# ── SINGING BOWL — one strike, ages apart ────────────────────── +bowl = score.part("bowl", instrument="singing_bowl", volume=0.25, + reverb=0.95, reverb_type="taj_mahal") + +# Strike once every 8 bars +for i in range(6): + bowl.add(B.add(-12), Duration.WHOLE, velocity=max(35, 70 - i * 5)) + for _ in range(7): + bowl.rest(Duration.WHOLE) + +# ── HIGH TEXTURE — triangle shimmer, almost subliminal ───────── +shimmer = score.part("shimmer", synth="triangle", envelope="pad", volume=0.06, + reverb=0.9, reverb_type="taj_mahal", + chorus=0.6, chorus_rate=0.05, chorus_depth=0.03, + lowpass=2000, pan=-0.4) +shimmer.lfo("lowpass", rate=0.01, min=800, max=3000, bars=48, shape="sine") + +for _ in range(16): + shimmer.rest(Duration.WHOLE) + +# Slowly evolving — holds for 4 bars at a time +shimmer_notes = [Fs, D, E, Fs, B, A, Fs, D] +for note in shimmer_notes: + for _ in range(4): + shimmer.add(note.add(12), Duration.WHOLE, velocity=35) + +# ── NOISE WASH — the wind ────────────────────────────────────── +wind = score.part("wind", synth="noise", envelope="pad", volume=0.03, + reverb=0.8, reverb_type="taj_mahal", + lowpass=500) +wind.lfo("lowpass", rate=0.008, min=200, max=1500, bars=48, shape="sine") +wind.lfo("volume", rate=0.015, min=0.01, max=0.05, bars=48, shape="triangle") + +for _ in range(48): + wind.add(B, Duration.WHOLE, velocity=30) + +# ── CELLO — one long note, enters late, the human voice ──────── +cello = score.part("cello", instrument="cello", volume=0.15, + reverb=0.7, reverb_type="taj_mahal", + humanize=0.05) + +for _ in range(32): + cello.rest(Duration.WHOLE) + +# Bars 33-44: one held note that slowly rises +cello.add(B.add(-12), Duration.WHOLE, velocity=40) +cello.add(B.add(-12), Duration.WHOLE, velocity=45) +cello.add(B.add(-12), Duration.WHOLE, velocity=50) +cello.add(B.add(-12), Duration.WHOLE, velocity=55) +cello.add(Cs, Duration.WHOLE, velocity=50) +cello.add(Cs, Duration.WHOLE, velocity=48) +cello.add(D, Duration.WHOLE, velocity=52) +cello.add(D, Duration.WHOLE, velocity=50) +cello.add(Cs, Duration.WHOLE, velocity=45) +cello.add(B.add(-12), Duration.WHOLE, velocity=42) +cello.add(B.add(-12), Duration.WHOLE, velocity=38) +cello.add(B.add(-12), Duration.WHOLE, velocity=30) + +# Bars 45-48: silence — dissolve +for _ in range(4): + cello.rest(Duration.WHOLE) + +# ═════════════════════════════════════════════════════════════════ +import sys + +print(f"Key: {key}") +print(f"BPM: 40 (just intonation)") +print(f"Parts: {list(score.parts.keys())}") +print(f"Duration: {score.duration_ms / 1000:.1f}s | {score.measures} measures") + +if "--live" in sys.argv: + print("Playing DEEP TIME (live engine)...") + from pytheory_live.live import LiveEngine + engine = LiveEngine(buffer_size=1024) + engine.play_score(score) +else: + print("Playing DEEP TIME...") + play_score(score)