mirror of
https://codeberg.org/uzu/strudel
synced 2026-08-19 18:41:58 -04:00
119 lines
3.4 KiB
Plaintext
119 lines
3.4 KiB
Plaintext
---
|
|
title: Xenharmonic Functions
|
|
layout: ../../layouts/MainLayout.astro
|
|
---
|
|
|
|
import { MiniRepl } from '../../docs/MiniRepl';
|
|
import { JsDoc } from '../../docs/JsDoc';
|
|
|
|
# Xenharmonic Functions (experimental)
|
|
|
|
{/* TODO expand explanation of xenharmony */}
|
|
|
|
These functions allow the use of scales other than your typical chromatic 12 based ones.
|
|
|
|
### tune(scale)
|
|
|
|
{/* TODO (maybe): combine jsdoc things in tune.mjs with here */}
|
|
|
|
<JsDoc client:idle name="tune" h={0} />
|
|
|
|
Here's an example of how to configure a basic hexany scale:
|
|
|
|
<MiniRepl client:idle tune={`i("0 1 2 3 4 5").tune("hexany15").mul("220").freq()`} />
|
|
|
|
Try other scales like `hexany1`, `iraq`, `gumbeng`, `gunkali`, or `tranh3`
|
|
|
|
For a full list of available scales from tunejs, see http://abbernie.github.io/tune/scales.html
|
|
|
|
You can set your root to be a particular note with `getFreq`
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("4 8 9 10 - - 5 7 9 11 - -").tune("tranh3")
|
|
.mul(getFreq('c3'))
|
|
.freq().clip(.5).room(1)`}
|
|
/>
|
|
|
|
Some tunings become more pronounced with a longer reverb decay:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("<[5 6 8 10] - [5 7 9 12] -> -").tune("gumbeng")
|
|
.mul(getFreq('c3'))
|
|
.freq().clip(.8).room("3:10").rdim(10000).rfade(5)`}
|
|
/>
|
|
|
|
Additionally, you can combo this with `fmap` so that the base note changes:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("9 11 12 10 - - -").tune("gunkali")
|
|
.mul("<c3 c3 a3 d#3>".fmap(getFreq))
|
|
.freq().legato("2 .7").room("1:15").rdim(8500).rlp(14000).rfade(8)`}
|
|
/>
|
|
|
|
Combining this with various polyrhythm tricks can become very evocative:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("<[0 3 1 -] [-1 4 2 8]> ~ ~,<-4 -5>".add(4))
|
|
.tune("iraq")
|
|
.mul("<c3 d3 c#3>".fmap(getFreq))
|
|
.freq().clip(.5).room(1).rfade(9)`}
|
|
/>
|
|
|
|
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:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("4 5 6 7 8 9").tune("sanza")
|
|
.mul(getFreq('c3'))
|
|
.freq()`}
|
|
/>
|
|
|
|
Notes 7 and 9 will clash quite a bit if you arp them normally. Many tunings will have this sort of sound, and it can feel distracting on its own.
|
|
See how close they are on the pitch wheel?
|
|
|
|
<MiniRepl client:idle tune={`i("[7 9]!3").tune("sanza").mul(getFreq('c3')).freq()._pitchwheel()`} />
|
|
|
|
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:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("[0 1 2 3 4 5 6]@0.3 -"
|
|
.add("<2 5 8 1>"))
|
|
.tune("sanza")
|
|
.mul(getFreq('c3')).freq()
|
|
.legato("3").room(1).rfade(5)`}
|
|
/>
|
|
|
|
Note the legato and reverb effects make sure the sound of the strumming gets to wash together. Alternating the direction of the strum can make the
|
|
tones sound even more alive, too.
|
|
|
|
The `tranh3` tuning has a similar set of notes, with two clashing. You might trying plugging that in above and see if you find a favorite strumming pattern.
|
|
|
|
You can also give tune a list of frequencies to use as the scale:
|
|
|
|
<MiniRepl
|
|
client:idle
|
|
tune={`i("0 1 2 3 4").tune([
|
|
261.6255653006,
|
|
302.72962012827,
|
|
350.29154279212,
|
|
405.32593044476,
|
|
469.00678383895,
|
|
523.2511306012
|
|
]).mul(220).freq();`}
|
|
/>
|
|
|
|
### xen(scaleOrRatios)
|
|
|
|
{/* TODO add explanation of EDO to documentation */}
|
|
|
|
<JsDoc client:idle name="Pattern.xen" h={0} />
|