The pad envelope has slow attack — wrong for fast acid lines.
Updated both the docs code and the audio generator.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete Example now uses rock beat with piano/saw/bass in G major.
Added audio player for the arpeggiator code example.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
save_wav was writing mono — now properly writes stereo from
render_score's (n_samples, 2) output. All 31 files regenerated.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
28 audio samples total. Tabla (teental, keherwa, chakradar at fast
tempos), dhol, dholak, mridangam, metal blast, cajón. No labels
on stacked players.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
20 WAV files covering quickstart, sequencing, drums, playback,
and cookbook examples. Audio players embedded after every code
block that calls play_score().
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- docs/generate_audio.py renders 12 code examples as WAV files
- Audio players embedded in sequencing and drums docs via raw HTML
- Covers: piano hold, articulations, dynamics, filter ramp, rock,
bossa nova, djembe, tabla, marching snare, ensemble, strum, swell
- WAV files gitignored — generated at build time
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Cache time arrays and exp_decay envelopes (avoid reallocation)
- Cache drum hit renders (same sound at same length = same output)
- Vectorize piano_wave harmonic synthesis: 30 sin() calls in a
Python loop → one 2D numpy.sin() operation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Acid bass (ensemble=3), 16-player strings, tabla with solo and tihai,
8-player snare line, 6-player lead synth. Showcases ensemble, ramp,
LFO, sidechain, articulations, and dynamic curves.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
16-beat chakradar: tihai of tihais with 3 escalating phrases
and crescendo triplet finale landing on sam.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Full arrangement with three-octave square wave lead, drums, bass,
supersaw pads, and a saw solo section. Melody transcribed from MIDI.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace the numeral package with ~30 lines of int2roman()/roman2int()
in _statics.py. Reduces supply chain surface. Fixes#47.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Showcases ramp(), articulations, Part.hit(), filter automation,
and cross-genre fusion. 303 acid bass with tabla entering at the
peak and riding through the outro.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Smoothly sweep any parameter (lowpass, reverb, distortion, etc.)
from current value to target with linear, ease_in, ease_out, or
ease_in_out interpolation curves.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Part.crescendo(), Part.decrescendo(), Part.swell(), and Part.dynamics()
for velocity ramps and custom curves across note sequences.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add 6 new drum fills: cajon flam, cajon rumble, cajon breakdown,
metal triplet, metal blast, metal cascade. 27 fills total.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Duration enum now supports multiplication, division, and addition
so expressions like `Duration.WHOLE * 2` work instead of raising TypeError.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Harmonium: single free reed, nasal midrange, bellows swell.
The sound of kirtan and qawwali.
- Doumbek (darbuka): dum (center bass), tek (edge sharp), ka (muted).
4 patterns: maqsoum, baladi, saidi, ayoub.
2 fills: doumbek roll, doumbek accent.
- 42 synth waveforms total
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tihai (3x crescendo landing on sam), chakkardar (32nd triplet
cascade), tiri kita (rapid 16th dayan burst), bayan (bass bends),
tabla call (dayan/bayan call-and-response).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
No more timing gaps. The leading string is held at 15% velocity
at the same beat position as the full chord via hold(), adding
strum texture without stealing time.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
hold() adds a note without advancing the beat position, so the
next note starts at the same time. Enables: piano sustain (bass
rings while melody plays), drone notes under melody, held chords
with moving lines.
Two lines in the renderer: skip beat_pos advance when _hold is set.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Grace notes created audible gap before chord and sounded like
separate plucks. Pure chord hit sounds better.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
G-D-Em-C at 120 BPM. Picked intro, strummed verse, electric lead
melody, strings swell, rock drums. The most popular chord progression
in pop history.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Random key, tempo, reverb space, instruments, and melodies.
Melodies walk the scale stepwise (not random jumps), arpeggios
follow chord tones in order, piano walks up/down. Tabla solo
always closes with random strokes. No seed — truly unique each play.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Didgeridoo drone throughout, granular abyss, kalimba light,
cello surfacing, piano + quiet uke, pedal steel + theremin solo
(searching → building → soaring peak), strings/flute/harp/timpani
at the peak, 4-part tabla solo finale (whisper → ghosts → 9-tuplet
call-response → 32nd triplet cascade + grand tihai).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>