-
-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adding “quasi-harmonic” inharmonic timbres based on L-systems #845
Comments
Dumping the partials with extra info here for convenience:
Edit: changed rules for silver, plastic and supergolden for their partials here to be more uniform. |
I suggest not closing it yet, maybe somebody will implement the partial generator itself to make with less data... But use your judgement yeahg. |
Hmm... Maybe I'll just cross out the implemented stuff here then? |
Yep, maybe add a couple checkboxes at the very top or where convenient. EDIT: Added myself, add more if anything’s missing! |
Status:
Proposal
There’s a method of making timbres that have constant partial density (in the limit) like harmonic or harmonic subgroup timbres do, but allowing irrational numbers being a suitable equave when partials of the note one equave up get to be exactly a subset of partials of the lower note.
This allows for a reasonably full timbral quality, at the same time without overcrowding higher partials into semblance of white noise, like in cymbals or gongs. Scaling property allows to have a weak form of JI: any interval between two partials, especially lower partials, gets found in the higher partials lots of times, and not only this, but transposing by this interval will actually match many pairs of partials, even if to a lesser degree than when using the equave.
An example “quasi-JI” scale to use with golden timbres 2…5: here. This scale was formed from intervals between partials of timbre 4 (IIRC) but in reality they’re kind of universal there. In note comments, “#n” means partial number n, where #1 = 1, #2 = ϕ. Notably, the scale allowed itself to be symmetric and also have rational 3/2. If adding further prominent partial ratios, one encounters 4/3 as well, and also 2/1 is easy to be found a lot between notes of this scale. That’s no surprise because ϕ is the algebraic irrational with the simplest defining equation using integer coefficients, so happy accidents happen probably most often in the case of ℤ[ϕ] to which the partials of golden timbres belong.
Framework and examples
The framework is simple, an L-system. We represent differences between partials, starting from zero, by letters and grow the string of letters until it’s long enough, applying the same replacements in parallel to each letter once for each iteration. Each system here is such that each iteration actually scales the whole set of partials by some fixed factor S and inserts new partials in between, including maintaining that the fundamental 1 is always present. Below, E always means a difference of 1, so the string always starts with E.
Examples (rulesets are in bold):
For a familiar one, a harmonic timbre has the simplest system like E → EE, or E → Eᵏ for any positive integer k. An odd-harmonic timbre results from E → ED, D → DDD where D = 2: the rules scale by 3, so E and D subdivide accordingly [↓note 1].
Now, a dense golden timbre has the simplest system: start from E, replacements are E → EF, F → E, and E again means 1 and F = ϕ − 1 = (√5 − 1)/2 ≈ 0.618. Scaling is by ϕ.
We can actually have many timbres that look like this by choosing E → FE some times and E → EF other times, even on letter-by-letter basis (vs. each whole string iteration), but we need to retain the first E in the string so we can actually make a system like this for one of the other deterministic alternatives: E → EF, Ɛ → FƐ, F → Ɛ — the first E gets remembered as untouchable, all others get to be Ɛ (= 1 too) instead and replace in mirrored way.
Having differences of 0.6 is a bit too much for my taste, so there’s also a rarefied version: just blow everything up by ϕ, don’t subdivide this time but again add 1 because we need it. Equivalently this can be achieved by: E → EF, F → Φ, Φ → FΦ where Φ = ϕ.
And again, we can have a mirrored replacement variant for variety: E → EF, F → Φ, Φ → ΦF.
A silver timbre scales by 1 + √2, it goes E → ER, R → EER where R = √2 (again, EER can be permuted without changing the overal flavor of the timbre).
So when we iteratively generate about 128 letters in the string, then they get replaced with numbers, and the sequence of their partial sums give timbre’s partials.
Notes
Reference implementation
...in Python 12 (v10 probably suffices too) is here, with a couple of simple tests and heaps of sanity checks in the algorithm itself.
Naming
I have no idea how to better name the entire class of these L-system timbres:
Help I’m bad at naming!
And now I’m off to making a couple of pre-baked timbres and adding them in the inharmonic section.
The text was updated successfully, but these errors were encountered: