From c82834c7d6f1453471e30d61f066f44dae6b3f71 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 30 Mar 2026 04:27:09 -0400 Subject: [PATCH] =?UTF-8?q?Track=203:=20Chakra=20=E2=80=94=20root=20to=20c?= =?UTF-8?q?rown=20frequency=20activation=20journey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seven sections targeting Solfeggio chakra frequencies with metric modulation tempo increases (60 → 90 → 108 → 135 BPM). Tambura drone, harmonium, FM singing bowl, Rhodes arps, sitar melody, tabla (enters solar plexus), theremin (enters throat chakra). Crown dissolves into pure 963 Hz and silence. Co-Authored-By: Claude Opus 4.6 (1M context) --- tracks/chakra.py | 548 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 548 insertions(+) create mode 100644 tracks/chakra.py diff --git a/tracks/chakra.py b/tracks/chakra.py new file mode 100644 index 0000000..72e5266 --- /dev/null +++ b/tracks/chakra.py @@ -0,0 +1,548 @@ +""" +CHAKRA — a journey from root to crown through seven frequency activations. + +Each section targets a chakra's Solfeggio frequency, with metric modulation +creating natural tempo increases (quarter = previous triplet, ×3/2 ratio). + + 1. Root (Muladhara) — 396 Hz, 60 BPM — grounding, deep + 2. Sacral (Svadhisthana) — 417 Hz, 90 BPM — flow, sensual + 3. Solar Plexus (Manipura) — 528 Hz, 90 BPM — power, transformation + 4. Heart (Anahata) — 639 Hz, 108 BPM — love, connection + 5. Throat (Vishuddha) — 741 Hz, 108 BPM — expression, truth + 6. Third Eye (Ajna) — 852 Hz, 135 BPM — intuition, vision + 7. Crown (Sahasrara) — 963 Hz, 135 BPM → silence — unity, dissolution +""" + +from pytheory import Key, Duration, Score, Tone, play_score +from pytheory.rhythm import DrumSound + +# ── Solfeggio tones — exact chakra frequencies ────────────────── +# We'll use Tone objects at specific frequencies via .from_hz() +# and also use scale tones for melodic content + +score = Score("4/4", bpm=60, temperament="just") + +# Helper: find the nearest tone to a frequency +def chakra_tone(hz): + """Create a tone near the target chakra frequency.""" + return Tone.from_hz(hz) + +# Chakra frequencies +ROOT_HZ = 396 +SACRAL_HZ = 417 +SOLAR_HZ = 528 +HEART_HZ = 639 +THROAT_HZ = 741 +THIRD_EYE_HZ = 852 +CROWN_HZ = 963 + +root_tone = chakra_tone(ROOT_HZ) +sacral_tone = chakra_tone(SACRAL_HZ) +solar_tone = chakra_tone(SOLAR_HZ) +heart_tone = chakra_tone(HEART_HZ) +throat_tone = chakra_tone(THROAT_HZ) +third_eye_tone = chakra_tone(THIRD_EYE_HZ) +crown_tone = chakra_tone(CROWN_HZ) + +print(f"Chakra tones:") +for name, t in [("Root", root_tone), ("Sacral", sacral_tone), + ("Solar", solar_tone), ("Heart", heart_tone), + ("Throat", throat_tone), ("Third Eye", third_eye_tone), + ("Crown", crown_tone)]: + print(f" {name:10s}: {t} ({t.hz:.0f} Hz)") + +# ── Keys for each chakra section ──────────────────────────────── +# Root/Sacral: G major (grounding) +# Solar/Heart: C major (warm, open) +# Throat/Third Eye: E major (bright, expressive) +# Crown: dissolves into pure frequency + +key_lower = Key("G", "major") # root, sacral +key_middle = Key("C", "major") # solar, heart +key_upper = Key("E", "major") # throat, third eye + +sl = key_lower.scale +sm = key_middle.scale +su = key_upper.scale + +# ═══════════════════════════════════════════════════════════════════ +# 1. ROOT — MULADHARA (396 Hz) — 60 BPM, 8 bars +# Deep, slow, grounding. Tambura drone + harmonium + singing bowl. +# ═══════════════════════════════════════════════════════════════════ + +# ── Tambura — Sa-Pa drone in G ────────────────────────────────── +tambura = score.part("tambura", synth="sine", envelope="pad", volume=0.4, + reverb=0.8, reverb_type="taj_mahal", + chorus=0.3, chorus_rate=0.08, chorus_depth=0.01, + lowpass=1000, pan=-0.25) + +# Drone throughout entire piece — changes root with each section +# ROOT: G drone +for _ in range(8): + tambura.add(sl[0].add(-24), Duration.HALF) # G2 + tambura.add(sl[4].add(-24), Duration.HALF) # D3 + +# ── Harmonium — slow breathing chords ─────────────────────────── +harmonium = score.part("harmonium", instrument="harmonium", volume=0.35, + reverb=0.6, reverb_type="taj_mahal", + chorus=0.2, chorus_rate=0.15, chorus_depth=0.008, + humanize=0.08) + +# ROOT: simple I chord, breathing in and out +root_prog = key_lower.progression("I", "IV") +for _ in range(2): + for chord in root_prog: + harmonium.add(chord, Duration.WHOLE) +# Repeat softer +for _ in range(2): + for chord in root_prog: + harmonium.add(chord, Duration.WHOLE, velocity=80) + +# ── Singing bowl — FM bell at 396 Hz ─────────────────────────── +bowl = score.part("bowl", synth="fm", envelope="bell", volume=0.3, + reverb=0.9, reverb_type="taj_mahal", + fm_ratio=2.0, fm_index=1.5) + +# Strike every 2 bars — let it ring +bowl.add(root_tone, Duration.WHOLE, velocity=90) +bowl.rest(Duration.WHOLE) +bowl.add(root_tone, Duration.WHOLE, velocity=85) +bowl.rest(Duration.WHOLE) +bowl.add(root_tone, Duration.WHOLE, velocity=80) +bowl.rest(Duration.WHOLE) +bowl.add(root_tone, Duration.WHOLE, velocity=75) +bowl.rest(Duration.WHOLE) + +# ── Rhodes — sparse, warm ────────────────────────────────────── +rhodes = score.part("rhodes", instrument="electric_piano", volume=0.3, + reverb=0.6, reverb_type="taj_mahal", + tremolo_depth=0.1, tremolo_rate=3.0, + humanize=0.08) + +# ROOT: gentle arpeggiated I chord +for _ in range(4): + rhodes.add(sl[0], Duration.QUARTER, velocity=70) + rhodes.add(sl[2], Duration.QUARTER, velocity=65) + rhodes.add(sl[4], Duration.QUARTER, velocity=60) + rhodes.rest(Duration.QUARTER) +for _ in range(4): + rhodes.rest(Duration.WHOLE) + +# ═══════════════════════════════════════════════════════════════════ +# 2. SACRAL — SVADHISTHANA (417 Hz) — 90 BPM, 8 bars +# Flowing, sensual. Sitar enters. Tempo lifts. +# ═══════════════════════════════════════════════════════════════════ +score.set_tempo(90) + +# Tambura continues — same root for sacral +for _ in range(8): + tambura.add(sl[0].add(-24), Duration.HALF) + tambura.add(sl[4].add(-24), Duration.HALF) + +# Harmonium — I IV V IV +sacral_prog = key_lower.progression("I", "IV", "V", "IV") +for _ in range(2): + for chord in sacral_prog: + harmonium.add(chord, Duration.WHOLE) + +# Bowl shifts to 417 Hz +for _ in range(4): + bowl.add(sacral_tone, Duration.WHOLE, velocity=80) + bowl.rest(Duration.WHOLE) + +# Rhodes — fuller arps +for _ in range(4): + for t in [sl[0], sl[2], sl[4], sl[2]]: + rhodes.add(t, Duration.EIGHTH, velocity=75) + for t in [sl[3], sl[4], sl[2], sl[0]]: + rhodes.add(t, Duration.EIGHTH, velocity=70) + +for _ in range(4): + rhodes.rest(Duration.WHOLE) + +# ── Sitar enters — flowing melody ────────────────────────────── +sitar = score.part("sitar", instrument="sitar", volume=0.5, + reverb=0.4, reverb_type="taj_mahal", + delay=0.3, delay_time=0.333, delay_feedback=0.35, + pan=-0.15, humanize=0.1) + +# Silent during root (8 bars at 60bpm) +for _ in range(8): + sitar.rest(Duration.WHOLE) + +# Sacral: gentle melody +sitar_sacral = [ + (sl[0], Duration.QUARTER, 80), (sl[2], Duration.QUARTER, 75), + (sl[4], Duration.HALF, 85), + (sl[3], Duration.QUARTER, 75), (sl[2], Duration.EIGHTH, 70), + (sl[1], Duration.EIGHTH, 65), (sl[0], Duration.HALF, 80), +] +for _ in range(2): + for note, dur, vel in sitar_sacral: + sitar.add(note, dur, velocity=vel) +for _ in range(4): + sitar.rest(Duration.WHOLE) + +# ═══════════════════════════════════════════════════════════════════ +# 3. SOLAR PLEXUS — MANIPURA (528 Hz) — 90 BPM stays, 8 bars +# Power, fire. Tabla enters. Energy builds. +# ═══════════════════════════════════════════════════════════════════ + +# Tambura shifts to C +for _ in range(8): + tambura.add(sm[0].add(-24), Duration.HALF) # C2 + tambura.add(sm[4].add(-24), Duration.HALF) # G2 + +# Harmonium — brighter, C major +solar_prog = key_middle.progression("I", "V", "IV", "I") +for _ in range(2): + for chord in solar_prog: + harmonium.add(chord, Duration.WHOLE) + +# Bowl at 528 Hz — the "love frequency" +for _ in range(4): + bowl.add(solar_tone, Duration.WHOLE, velocity=85) + bowl.rest(Duration.WHOLE) + +# Rhodes — more active +for _ in range(4): + for t in [sm[0], sm[2], sm[4], sm[0].add(12)]: + rhodes.add(t, Duration.EIGHTH, velocity=80) + for t in [sm[4], sm[2], sm[0], sm[4].add(-12)]: + rhodes.add(t, Duration.EIGHTH, velocity=75) +for _ in range(4): + rhodes.rest(Duration.WHOLE) + +# Sitar — stronger, climbing +sitar_solar = [ + (sm[0], Duration.EIGHTH, 85), (sm[2], Duration.EIGHTH, 80), + (sm[4], Duration.QUARTER, 95), + (sm[0].add(12), Duration.QUARTER, 100), + (sm[4], Duration.EIGHTH, 85), (sm[2], Duration.EIGHTH, 80), + (sm[0], Duration.HALF, 90), +] +for _ in range(2): + for note, dur, vel in sitar_solar: + sitar.add(note, dur, velocity=vel) +for _ in range(4): + sitar.rest(Duration.WHOLE) + +# ── Tabla enters — gentle at first ───────────────────────────── +tabla = score.part("tabla", volume=0.35, + reverb=0.25, reverb_decay=1.2, humanize=0.08) + +NA = DrumSound.TABLA_NA +TIT = DrumSound.TABLA_TIT +GE = DrumSound.TABLA_GE +tDHA = DrumSound.TABLA_DHA +GEB = DrumSound.TABLA_GE_BEND + +# Silent for root + sacral (16 bars) +for _ in range(16): + tabla.rest(Duration.WHOLE) + +# Solar: light keherwa +for _ in range(8): + tabla.hit(tDHA, Duration.EIGHTH, velocity=80) + tabla.hit(GE, Duration.EIGHTH, velocity=55) + tabla.hit(NA, Duration.EIGHTH, velocity=65) + tabla.hit(TIT, Duration.EIGHTH, velocity=42) + tabla.hit(NA, Duration.EIGHTH, velocity=60) + tabla.hit(TIT, Duration.EIGHTH, velocity=40) + tabla.hit(tDHA, Duration.EIGHTH, velocity=75) + tabla.hit(NA, Duration.EIGHTH, velocity=58) + +# ═══════════════════════════════════════════════════════════════════ +# 4. HEART — ANAHATA (639 Hz) — 108 BPM, 8 bars +# Love, openness. Everything blooms. Metric modulation: ×6/5 +# ═══════════════════════════════════════════════════════════════════ +score.set_tempo(108) + +# Tambura stays on C — heart center +for _ in range(8): + tambura.add(sm[0].add(-24), Duration.HALF) + tambura.add(sm[4].add(-24), Duration.HALF) + +# Harmonium — open, warm +heart_prog = key_middle.progression("I", "vi", "IV", "V") +for _ in range(2): + for chord in heart_prog: + harmonium.add(chord, Duration.WHOLE) + +# Bowl at 639 Hz +for _ in range(4): + bowl.add(heart_tone, Duration.WHOLE, velocity=88) + bowl.rest(Duration.WHOLE) + +# Rhodes — flowing arps +for _ in range(8): + for t in [sm[0], sm[2], sm[4], sm[0].add(12), sm[4], sm[2]]: + rhodes.add(t, Duration.EIGHTH, velocity=78) + rhodes.rest(Duration.QUARTER) + +# Sitar — emotional, singing +sitar_heart = [ + (sm[4], Duration.QUARTER, 100), + (sm[0].add(12), Duration.QUARTER, 110), + (sm[6], Duration.EIGHTH, 90), + (sm[4], Duration.EIGHTH, 85), + (sm[2], Duration.HALF, 95), + (sm[0], Duration.QUARTER, 85), + (sm[2], Duration.QUARTER, 90), + (sm[4], Duration.HALF, 100), + (sm[2], Duration.QUARTER, 85), + (sm[0], Duration.QUARTER, 80), +] +for _ in range(2): + for note, dur, vel in sitar_heart: + sitar.add(note, dur, velocity=vel) +for _ in range(4): + sitar.rest(Duration.WHOLE) + +# Tabla — livelier +for _ in range(8): + tabla.hit(tDHA, Duration.EIGHTH, velocity=90, articulation="accent") + tabla.hit(TIT, Duration.SIXTEENTH, velocity=50) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=45) + tabla.hit(NA, Duration.EIGHTH, velocity=70) + tabla.hit(GEB, Duration.EIGHTH, velocity=95) + tabla.hit(NA, Duration.EIGHTH, velocity=65) + tabla.hit(tDHA, Duration.EIGHTH, velocity=85) + tabla.hit(TIT, Duration.EIGHTH, velocity=48) + +# ═══════════════════════════════════════════════════════════════════ +# 5. THROAT — VISHUDDHA (741 Hz) — 108 BPM stays, 8 bars +# Expression. Theremin enters — the voice. +# ═══════════════════════════════════════════════════════════════════ + +# Tambura shifts to E +for _ in range(8): + tambura.add(su[0].add(-12), Duration.HALF) # E3 + tambura.add(su[4].add(-12), Duration.HALF) # B3 + +# Harmonium — bright E major +throat_prog = key_upper.progression("I", "V", "vi", "IV") +for _ in range(2): + for chord in throat_prog: + harmonium.add(chord, Duration.WHOLE) + +# Bowl at 741 Hz +for _ in range(4): + bowl.add(throat_tone, Duration.WHOLE, velocity=85) + bowl.rest(Duration.WHOLE) + +# Rhodes — staccato arps, rhythmic +for _ in range(8): + for t in [su[0], su[2], su[4], su[0].add(12)]: + rhodes.add(t, Duration.SIXTEENTH, velocity=80) + rhodes.rest(Duration.HALF) + +# Sitar — higher register, faster +sitar_throat = [ + (su[0].add(12), Duration.EIGHTH, 105), + (su[6], Duration.EIGHTH, 95), + (su[4], Duration.EIGHTH, 90), + (su[2], Duration.EIGHTH, 85), + (su[0], Duration.QUARTER, 95), + (su[4], Duration.QUARTER, 100), +] +for _ in range(4): + for note, dur, vel in sitar_throat: + sitar.add(note, dur, velocity=vel) + +# Tabla — more intensity +for bar in range(8): + if bar % 4 == 3: + # Fill + tabla.hit(tDHA, Duration.EIGHTH, velocity=100, articulation="accent") + tabla.hit(GEB, Duration.EIGHTH, velocity=115) + tabla.hit(NA, Duration.SIXTEENTH, velocity=75) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=55) + tabla.hit(GEB, Duration.EIGHTH, velocity=110) + tabla.hit(tDHA, Duration.EIGHTH, velocity=95) + tabla.hit(NA, Duration.EIGHTH, velocity=70) + tabla.hit(GEB, Duration.QUARTER, velocity=120) + else: + tabla.hit(tDHA, Duration.EIGHTH, velocity=95, articulation="accent") + tabla.hit(TIT, Duration.SIXTEENTH, velocity=50) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=45) + tabla.hit(NA, Duration.EIGHTH, velocity=72) + tabla.hit(GEB, Duration.EIGHTH, velocity=100) + tabla.hit(NA, Duration.EIGHTH, velocity=68) + tabla.hit(tDHA, Duration.EIGHTH, velocity=88) + tabla.hit(TIT, Duration.EIGHTH, velocity=50) + +# ── Theremin — the voice of the throat chakra ─────────────────── +theremin = score.part("theremin", instrument="theremin", volume=0.5, + reverb=0.5, reverb_type="taj_mahal", + delay=0.25, delay_time=0.278, delay_feedback=0.3, + pan=0.2, humanize=0.06) + +# Silent for root+sacral+solar+heart (32 bars) +for _ in range(32): + theremin.rest(Duration.WHOLE) + +# Throat: theremin wails — long bends, expressive +theremin.add(su[4], Duration.HALF, velocity=95, bend=1.0) +theremin.add(su[0].add(12), Duration.HALF, velocity=105, bend=-0.5) +theremin.add(su[2], Duration.QUARTER, velocity=90) +theremin.add(su[4], Duration.QUARTER, velocity=100, bend=0.5) +theremin.add(su[0].add(12), Duration.HALF, velocity=110, bend=1.5) +theremin.add(su[6], Duration.QUARTER, velocity=100, bend=-0.5) +theremin.add(su[4], Duration.QUARTER, velocity=95) +theremin.add(su[2], Duration.HALF, velocity=90, bend=1.0) +theremin.add(su[0], Duration.HALF, velocity=85) +for _ in range(4): + theremin.rest(Duration.WHOLE) + +# ═══════════════════════════════════════════════════════════════════ +# 6. THIRD EYE — AJNA (852 Hz) — 135 BPM, 8 bars +# Vision. Everything accelerates. Sitar shreds. Intense. +# ═══════════════════════════════════════════════════════════════════ +score.set_tempo(135) + +# Tambura on E — higher energy +for _ in range(8): + tambura.add(su[0].add(-12), Duration.HALF) + tambura.add(su[4].add(-12), Duration.HALF) + +# Harmonium — rapid chord changes +eye_prog = key_upper.progression("I", "V", "vi", "IV", "I", "V", "vi", "IV") +for chord in eye_prog: + harmonium.add(chord, Duration.HALF) + +# Bowl at 852 Hz +for _ in range(4): + bowl.add(third_eye_tone, Duration.WHOLE, velocity=90) + bowl.rest(Duration.WHOLE) + +# Rhodes — 16th note arps +for _ in range(4): + for t in [su[0], su[2], su[4], su[0].add(12), + su[4], su[2], su[0], su[4].add(-12)]: + rhodes.add(t, Duration.SIXTEENTH, velocity=82) + for t in [su[3], su[4], su[0].add(12), su[4], + su[2], su[0], su[4].add(-12), su[0]]: + rhodes.add(t, Duration.SIXTEENTH, velocity=78) + +for _ in range(4): + rhodes.rest(Duration.WHOLE) + +# Sitar — fast arps, visionary +for _ in range(4): + for t in [su[0], su[2], su[4], su[0].add(12), + su[4], su[2], su[0], su[4].add(-12)]: + sitar.add(t, Duration.SIXTEENTH, velocity=100) + for t in [su[2], su[4], su[0].add(12), su[2].add(12), + su[0].add(12), su[4], su[2], su[0]]: + sitar.add(t, Duration.SIXTEENTH, velocity=95) +for _ in range(4): + sitar.rest(Duration.WHOLE) + +# Tabla — full energy +for bar in range(8): + tabla.hit(tDHA, Duration.SIXTEENTH, velocity=100, articulation="accent") + tabla.hit(TIT, Duration.SIXTEENTH, velocity=52) + tabla.hit(NA, Duration.SIXTEENTH, velocity=75) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=48) + tabla.hit(tDHA, Duration.SIXTEENTH, velocity=98) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=50) + tabla.hit(GEB, Duration.SIXTEENTH, velocity=105) + tabla.hit(NA, Duration.SIXTEENTH, velocity=70) + tabla.hit(tDHA, Duration.SIXTEENTH, velocity=102, articulation="accent") + tabla.hit(TIT, Duration.SIXTEENTH, velocity=52) + tabla.hit(NA, Duration.SIXTEENTH, velocity=72) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=48) + tabla.hit(GEB, Duration.SIXTEENTH, velocity=108) + tabla.hit(NA, Duration.SIXTEENTH, velocity=68) + tabla.hit(tDHA, Duration.SIXTEENTH, velocity=95) + tabla.hit(TIT, Duration.SIXTEENTH, velocity=50) + +# Theremin — intense, high, bending +theremin.add(su[0].add(12), Duration.QUARTER, velocity=110, bend=2.0) +theremin.add(su[4].add(12), Duration.QUARTER, velocity=115, bend=-1.0) +theremin.add(su[2].add(12), Duration.EIGHTH, velocity=105) +theremin.add(su[0].add(12), Duration.EIGHTH, velocity=100) +theremin.add(su[4], Duration.HALF, velocity=108, bend=1.5) +theremin.add(su[0].add(24), Duration.HALF, velocity=120, bend=2.0) +theremin.add(su[4].add(12), Duration.HALF, velocity=110, bend=-1.5) +for _ in range(5): + theremin.rest(Duration.WHOLE) + +# ═══════════════════════════════════════════════════════════════════ +# 7. CROWN — SAHASRARA (963 Hz) — 135 BPM → dissolve, 8 bars +# Unity. Everything simplifies. Pure frequency. Silence. +# ═══════════════════════════════════════════════════════════════════ + +# Tambura — rises to crown, then fades +for vel in [80, 75, 65, 55, 45, 35, 20, 10]: + tambura.add(su[0], Duration.HALF, velocity=vel) + tambura.add(su[4], Duration.HALF, velocity=max(5, vel - 10)) + +# Harmonium — one sustained chord, fading +harmonium.add(key_upper.progression("I")[0], Duration.WHOLE, velocity=80) +harmonium.add(key_upper.progression("I")[0], Duration.WHOLE, velocity=65) +harmonium.add(key_upper.progression("I")[0], Duration.WHOLE, velocity=50) +harmonium.add(key_upper.progression("I")[0], Duration.WHOLE, velocity=35) +for _ in range(4): + harmonium.rest(Duration.WHOLE) + +# Bowl at 963 Hz — the crown. Rings alone. +bowl.add(crown_tone, Duration.WHOLE, velocity=95) +bowl.add(crown_tone, Duration.WHOLE, velocity=90) +bowl.add(crown_tone, Duration.WHOLE, velocity=80) +bowl.add(crown_tone, Duration.WHOLE, velocity=65) +bowl.add(crown_tone, Duration.WHOLE, velocity=50) +bowl.add(crown_tone, Duration.WHOLE, velocity=35) +bowl.add(crown_tone, Duration.WHOLE, velocity=20) +bowl.rest(Duration.WHOLE) + +# Rhodes — one last arp, dissolving +rhodes.add(su[0], Duration.QUARTER, velocity=65) +rhodes.add(su[2], Duration.QUARTER, velocity=55) +rhodes.add(su[4], Duration.QUARTER, velocity=45) +rhodes.add(su[0].add(12), Duration.QUARTER, velocity=35) +for _ in range(7): + rhodes.rest(Duration.WHOLE) + +# Sitar — one held note, fading +sitar.add(su[0].add(12), Duration.WHOLE, velocity=70, bend=0.5) +sitar.add(su[0].add(12), Duration.WHOLE, velocity=50) +for _ in range(6): + sitar.rest(Duration.WHOLE) + +# Tabla — one final soft DHA, then silence +tabla.hit(tDHA, Duration.WHOLE, velocity=50) +for _ in range(7): + tabla.rest(Duration.WHOLE) + +# Theremin — highest note, dissolving into the cosmos +theremin.add(crown_tone, Duration.WHOLE, velocity=90, bend=3.0) +theremin.add(crown_tone, Duration.WHOLE, velocity=70, bend=2.0) +theremin.add(crown_tone, Duration.WHOLE, velocity=45, bend=1.0) +for _ in range(5): + theremin.rest(Duration.WHOLE) + +# ═════════════════════════════════════════════════════════════════ +import sys + +print(f"Parts: {list(score.parts.keys())}") +print(f"Duration: {score.duration_ms / 1000:.1f}s | {score.measures} measures") +print() +print(" Root (396 Hz) → 60 BPM") +print(" Sacral (417 Hz) → 90 BPM") +print(" Solar (528 Hz) → 90 BPM") +print(" Heart (639 Hz) → 108 BPM") +print(" Throat (741 Hz) → 108 BPM") +print(" Third Eye (852 Hz) → 135 BPM") +print(" Crown (963 Hz) → 135 BPM → silence") +print() + +if "--live" in sys.argv: + print("Playing CHAKRA (live engine)...") + from pytheory_live.live import LiveEngine + engine = LiveEngine(buffer_size=1024) + engine.play_score(score) +else: + print("Playing CHAKRA...") + play_score(score)