Scale notes spelled with flats (e.g. the Eb blue note in the blues
scale) were silently dropped from scale_diagram() because the fretboard
spells that pitch as D#, so the string comparison never matched. Match
notes enharmonically via the system's canonical name and display them
using the scale's own spelling. Pre-existing bug (also in 0.42.x),
surfaced while flipping the docs for the low-to-high release.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The v0.43.0 commit updated fretboard.rst and chords.rst but missed the
fingering/tab examples in quickstart, cookbook, and nashville-blues-tabs.
Update those Fingering reprs and fb.tab()/scale_diagram blocks to the new
low-to-high default, and fix the "Reading Tab Notation" prose (chord tab
now lists strings low-to-high; high_to_low=True restores the old layout).
Part.to_tab() examples are unchanged (orientation-agnostic, high-on-top).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fretboard string lists and Fingering positions/string-names now read
low-to-high (lowest-pitched string first), matching how chord diagrams
and tablature are conventionally written. Pass high_to_low=True to any
fretboard constructor to restore the pre-0.43 high-to-low behavior.
Design: each board keeps a private canonical (high-to-low) tone store
so the fingering scorer and GUITAR_OVERRIDES table stay untouched; a
single _orient() helper re-orients at the user-facing boundary (and,
being self-inverse, also canonicalizes custom tuning/position input).
Fingering carries its own orientation flag and presents oriented
positions/names via properties. The fingering cache key now includes
orientation so the two orderings don't collide.
to_tab() and Part.strum() now sort by pitch internally, so their output
is identical regardless of board orientation.
- All 25 instrument presets gain a high_to_low param, routed through a
canonical build path.
- Tests updated for the new default; added orientation-specific tests.
- Docs/examples flipped to low-to-high; chord_charts.py example now uses
the built-in Fingering.tab() instead of a hand-rolled renderer.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- chords: open_voicing() alongside other voicings, normal_form() in
pitch class sets section
- tones: is_natural, is_sharp, is_flat accidental properties
- scales: Key.seventh() for individual degrees, expanded
Scale.recommend() explanation of how ranking works
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New documentation section covering the Nashville number system,
blues scale theory, and tablature export — topics that were
previously scattered across cookbook and fretboard docs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Three new export methods on Score:
- to_lilypond() — complete LilyPond source files for PDF engraving
- to_musicxml() — MusicXML 4.0 for MuseScore/Sibelius/Finale
- to_tab() — ASCII guitar/bass tablature (also on Part)
All three handle multi-part scores, bass clef detection, tied notes
across barlines, chords, and drum tone filtering.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Five new synth waveforms: tape-replay Mellotron (strings/flute/choir
tapes with wow, flutter, saturation, 8s fadeout), hard sync oscillator,
ring modulation, wavefolding, and analog drift VCO with pitch
instability. 14 new instrument presets for Score.part(). Synth kwargs
now pass through play()/save()/_render(). 808 bass envelope fixed
from pluck to piano.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two variants modeling Himalayan singing bowl acoustics:
- Strike: mallet hit with chirp from inharmonic partials, long ring
- Ring: rim-rubbed sustained tone with slow build and beating modes
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Wurlitzer: reed-based, nasal, biting — bark on hard hits
- Vibraphone: aluminum bars with motor tremolo (spinning disc)
- Pipe organ: multi-rank (8'+4'+2'), constant air, wind chiff
- Choir: formant-filtered glottal source, vowel control via lyric=,
no vibrato (ensemble handles voice variation)
- All four with instrument presets, audio demos, and docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CAJON_SLAP is now dry wood crack (no wires). New CAJON_SLAP_SNARE
has the buzzy version for cajóns with snare wires engaged.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Added hand-on-wood transient (lowpassed noise for soft palm feel)
before the box resonance kicks in. Deeper sub, longer air cavity
thump. You hear the hand, then the box.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Click count-off → snare groove with quad sweeps and bass splits →
flams and diddles → buzz roll into big unison hit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bass has 180/320Hz box resonance modes. Slap has wood panel
resonance under the wire buzz. Tap has hollow finger-on-plywood.
Everything sounds like hitting a wooden box now.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Teental ends with bayan fill. Keherwa has ge_bend accents throughout
plus a bend-heavy final bar. Chakradar preceded by bayan showcase.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dagga now booms at 30Hz with sustained sub, wider thump band,
and heavier stick impact. The kind of hit you feel in your chest.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The melodic renderer was choking all signal at each new note,
killing strum/hold resonance. Removed — notes now naturally
overlap and ring out. Banjo lick now uses 16th notes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fundamental now decays at 0.6/s instead of 1.5/s — rings long
enough that rapid roll hits stack into a singing 'oooh' resonance.
Upper modes still die fast for the initial thump character.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Clean harmonics with dominant fundamental, gentle upper partials,
and soft finger pluck transient. Much purer, singing tone.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tine + tonebar + electromagnetic pickup model with bell-like
harmonics, metallic attack transient, and pickup nonlinearity.
electric_piano instrument preset now uses rhodes_synth instead of FM.
FM section updated to show bells. Audio demos for both.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Detects silence below -60dB threshold and trims with 0.2s tail
for natural decay. 69 audio files regenerated.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Basic waveforms now play without envelope shaping so you hear
the raw timbre. Complete Example bass at 1200 instead of 600.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Every synth section in the docs now has an audio player.
Classic waveforms, FM, supersaw, and all 31 instrument synths
each play a C major arpeggio for easy comparison.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both pages now show the same rock beat example in G major with
piano, saw lead, triangle bass. Code and audio are in sync.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>