diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap
index ecbc33ea..b602749d 100644
--- a/test/__snapshots__/examples.test.mjs.snap
+++ b/test/__snapshots__/examples.test.mjs.snap
@@ -3395,6 +3395,117 @@ exports[`runs examples > example "end" example index 0 1`] = `
]
`;
+exports[`runs examples > example "envCurve" example index 0 1`] = `
+[
+ "[ 0/1 → 1/8 | note:F#3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 1/8 → 1/4 | note:G#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 1/4 → 3/8 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 3/8 → 1/2 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 1/2 → 5/8 | note:B3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 5/8 → 3/4 | note:G#3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 3/4 → 7/8 | note:A3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 7/8 → 1/1 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 1/1 → 9/8 | note:E4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 9/8 → 5/4 | note:G#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 5/4 → 11/8 | note:G#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 11/8 → 3/2 | note:A3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 3/2 → 13/8 | note:F#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 13/8 → 7/4 | note:D4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 7/4 → 15/8 | note:A3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 15/8 → 2/1 | note:F#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 2/1 → 17/8 | note:C#5 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 17/8 → 9/4 | note:B4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 9/4 → 19/8 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 19/8 → 5/2 | note:B4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 5/2 → 21/8 | note:D4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 21/8 → 11/4 | note:G#3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 11/4 → 23/8 | note:F#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 23/8 → 3/1 | note:F#3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 3/1 → 25/8 | note:A3 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 25/8 → 13/4 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 13/4 → 27/8 | note:C#5 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 27/8 → 7/2 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 7/2 → 29/8 | note:C#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 29/8 → 15/4 | note:C#5 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 15/4 → 31/8 | note:A4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+ "[ 31/8 → 4/1 | note:G#4 room:1 cutoff:100 release:2 envTarget:[source lpf] envParam:[detune frequency] envDepth:[500 4000] envDecay:[0.3 0.15] envCurve:[lin exp] ]",
+]
+`;
+
+exports[`runs examples > example "envDepth" example index 0 1`] = `
+[
+ "[ 0/1 → 1/8 | note:F#3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 1/8 → 1/4 | note:G#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 1/4 → 3/8 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 3/8 → 1/2 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 1/2 → 5/8 | note:B3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 5/8 → 3/4 | note:G#3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 3/4 → 7/8 | note:A3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 7/8 → 1/1 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 1/1 → 9/8 | note:E4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 9/8 → 5/4 | note:G#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 5/4 → 11/8 | note:G#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 11/8 → 3/2 | note:A3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 3/2 → 13/8 | note:F#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 13/8 → 7/4 | note:D4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 7/4 → 15/8 | note:A3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 15/8 → 2/1 | note:F#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 2/1 → 17/8 | note:C#5 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 17/8 → 9/4 | note:B4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 9/4 → 19/8 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 19/8 → 5/2 | note:B4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 5/2 → 21/8 | note:D4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 21/8 → 11/4 | note:G#3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 11/4 → 23/8 | note:F#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 23/8 → 3/1 | note:F#3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 3/1 → 25/8 | note:A3 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 25/8 → 13/4 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 13/4 → 27/8 | note:C#5 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 27/8 → 7/2 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 7/2 → 29/8 | note:C#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 29/8 → 15/4 | note:C#5 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 15/4 → 31/8 | note:A4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+ "[ 31/8 → 4/1 | note:G#4 room:1 cutoff:100 envTarget:[source lpf] envParam:[detune frequency] envDepth:[4800 400] ]",
+]
+`;
+
+exports[`runs examples > example "envRelease" example index 0 1`] = `
+[
+ "[ 0/1 → 1/8 | note:F#3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 1/8 → 1/4 | note:G#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 1/4 → 3/8 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 3/8 → 1/2 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 1/2 → 5/8 | note:B3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 5/8 → 3/4 | note:G#3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 3/4 → 7/8 | note:A3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 7/8 → 1/1 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 1/1 → 9/8 | note:E4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 9/8 → 5/4 | note:G#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 5/4 → 11/8 | note:G#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 11/8 → 3/2 | note:A3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 3/2 → 13/8 | note:F#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 13/8 → 7/4 | note:D4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 7/4 → 15/8 | note:A3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 15/8 → 2/1 | note:F#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 2/1 → 17/8 | note:C#5 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 17/8 → 9/4 | note:B4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 9/4 → 19/8 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 19/8 → 5/2 | note:B4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 5/2 → 21/8 | note:D4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 21/8 → 11/4 | note:G#3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 11/4 → 23/8 | note:F#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 23/8 → 3/1 | note:F#3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 3/1 → 25/8 | note:A3 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 25/8 → 13/4 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 13/4 → 27/8 | note:C#5 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 27/8 → 7/2 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 7/2 → 29/8 | note:C#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 29/8 → 15/4 | note:C#5 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 15/4 → 31/8 | note:A4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+ "[ 31/8 → 4/1 | note:G#4 room:1 cutoff:100 release:3 envDepth:[4800 400] envTarget:[source lpf] envParam:[detune frequency] envDecay:[0.03 0.15] envCurve:[exp exp] envSustain:0.5 envRelease:3 ]",
+]
+`;
+
exports[`runs examples > example "euclid" example index 0 1`] = `
[
"[ 0/1 → 1/8 | note:c3 ]",
diff --git a/website/src/pages/learn/xen.mdx b/website/src/pages/learn/xen.mdx
index 32e2c0b4..b8b27ac7 100644
--- a/website/src/pages/learn/xen.mdx
+++ b/website/src/pages/learn/xen.mdx
@@ -16,10 +16,7 @@ These functions allow the use of scales other than your typical chromatic 12 bas
Here's an example of how to configure a basic hexany scale:
-
+
Try other scales like `hexany1`, `iraq`, `gumbeng`, `gunkali`, or `tranh3`
@@ -67,6 +64,7 @@ Another helpful trick when exploring new tunings is to strum them.
Many have a much more enchanting sound that was chosen over many generations of musicians for being strummed.
Take the `sanza` tuning:
+
+
This quality is often due to how the tunings were formed with instruments that were played differently than a piano.
As such, some tunings are much better strummed, with the subtle clash of the detuned notes actually making the sound much more magical: