User:Arseniiv/Timbres
Here are some approaches to picking harmonics for timbres for this and that purpose, aside of just taking out entire sequences of multiples of, say, 5 from a harmonic timbre.
Golden-harmonic timbres
When you want the golden ratio interval (≈833.1 ¢) to sound nice, you can take a timbre with harmonics 1 : φ : φ² : φ³ : ..., but this set of harmonics looks pretty scarce. What can you populate it with to still handle φ interval nicely but also to be more interesting and to make the timbre more adjustable?
Note that to construct a harmonic timbre from a “bare octave-allowing timbre” 1 : 2 : 4 : 8 : ..., one can just take sums of various subsets of {1, 2, 4, 8, ...} and take all of them as the new timbre. One then recovers all the natural numbers: 3 = 2 + 1, 5 = 4 + 1, 6 = 4 + 2, 7 = 4 + 2 + 1 and so on (of course you know your binary). We can apply the same sums-of-subsets construction here, but with a caveat: as φn = φn − 1 + φn − 2, we probably should disallow subsets like {φ², φ³, φ⁴}: in this one, φ⁴ effectively contained twice, and its sum is “incorrect”. (That’s easy to do: just disallow subsets which contain {φn, φn + 1} for some n.) Proceeding this way from powers of φ, we get intervals
- 1, φ, φ + 1 ≡ φ², φ + 2, 2φ + 1 ≡ φ³, 2φ + 2, 3φ + 1, 3φ + 2 ≡ φ⁴, 3φ + 3, 4φ + 2, 4φ + 3, 4φ + 4, 5φ + 3 ≡ φ⁵, 5φ + 4, 6φ + 3, 6φ + 4, 6φ + 5, 7φ + 4, 7φ + 5, 8φ + 4, 8φ + 5 ≡ φ⁶, ... (G1)
We can note that neighboring intervals in this list differ either by 1 or φ − 1 ≈ 0.68, so they are spaced quite nicely to not be immediately a dissonant mess. (As in harmonic timbres they are all spaced by 1 and that sounds nice, given the greater harmonics are very quiet in regard to the small ones. And 0.68 is pretty close to 1 and is rarer encountered.)
Now multiply an interval r from this list by φ. As it’s a sum of powers of φ with no exponents differing by just 1, so is r φ. We can place other rules on powers in these sums, given these rules behave well under multiplication by φ.
We can slightly depart from a sums-of-subsets approach, filtering all possible m φ + n intervals in another way: as earlier, include each power of φ, and also as earlier make differences between adjacent intervals 1 or φ − 1, but no other constraints. Though I feel the intervals picked, considered as points (m, n) in the plane, should be close to the polygonal chain with vertices φk.
The following ASCII art illustrates such a planar representation for the interval list (G1) constructed above. It’s easily seen we can change an angle here and there, e. g. add 2φ + 3 while leaving out 3φ + 1.
| 0 1 2 3 4 5 n --+--------------→ 0 | o-@ . . | / . . 1 | @-@-o . . | / . . @ — powers of φ 2 | @-o . . o — other intervals | / . . - — adding 1 3 | o-@-o . / — adding (φ − 1) | / . 4 | o-o-o . | / . 5 | @-o . | / . 6 | o-o-o | / 7 | o-o | / 8 | o-@-... | m ↓
Initially I came to this scheme by taking base-Fibonacci numeral system but treating each Fibonacci number as a power of φ. I tried to compact the description but it might have gone hard to understand, so feel free to comment.
And I think something in this vein may be possible for any other interval which is a root x of a low-degree polynomial equation xn = ... with integer coefficients (or even rational ones?). And I hope very much such a timbre sounds well — hadn’t tested that yet.
Another timbre
Now I think (G1) has its harmonics too close. We can fix this without remorse if we treat 1 as somewhat distinct from all others and start really adding two chosen differences only from φ. In that case we can choose 1 and φ (we may just scale all of (G1) by φ, effectively skipping some harmonics that are too close to their neighbors):
- 1, φ, φ + 1 ≡ φ², 2φ + 1 ≡ φ³, 3φ + 1, 3φ + 2 ≡ φ⁴, 4φ + 2, 4φ + 3, 5φ + 3 ≡ φ⁵, 6φ + 3, 6φ + 4, 7φ + 4, 8φ + 4, 8φ + 5 ≡ φ⁶, ... (G2)
Other findings without structuring
We can use a similar approach to build a simple “√2-enduring” timbre:
- 1, √2, 2, (√2 + 1), 2√2, √2 + 2, 4, (√2 + 3), 2√2 + 2, (3√2 + 1), 4√2, 3√2 + 2, 2√2 + 4, √2 + 6, 8, ... (S1 and S2)
Here we also can either use differences √2 − 1 ≈ 0.4 and 2 − √2 ≈ 0.6 right from the start, or we can start adding 2 − √2 and 2√2 − 2 ≈ 0.8 just after reaching 2, effectively skipping half of the harmonics of the first timbre each time we go from an even power of √2 to the next odd power.
News 2021-10
Regarding (G1)
Finally I’ve written some code to generate all that stuff. Let’s start with (G1), as it’s pretty easy to implement, if I’m not mistaken that it’s specifically (G1) I made. You just take a fibonacci-base system and represent consecutive natural numbers in it: 1, 10, 100, 101, 1000, 1001, 1010, 10000, 10001, 10010, 10100, 10101, 100000, … — and then treat these as if they are base-φ. That does the trick, and rarefied timbres like (G2) might be filtered out by simply banning some digit combinations (that’s not new at this stage: you get these digit strings for (G1) by forbidding consecutive 11 in all possible binary strings).
Well, theory aside I have two recordings for you:
- A showcase of this timbre at intervals of several φ down and up. Harmonics are smeared a bit like in Paul Naşca’s PADSynth, and it makes the timbre sound less harsh IMO.
- Something like a chord (φ + 2) : 3φ : (φ + 5) : (3φ + 3). I picked these more or less at random, just for the intervals to be not too small nor too wide.
Hopefully I’ll make it somehow more streamlined in the following days.
Regarding (G2)
Okaey it was shockingly easy to render (G2) this night too. 🎻 It turned out I myself wrote above that all you need is multiply all ratios of (G1) by φ (and add 1 at the start of it all), so I just did that. Here is the comparison:
- Showcase of this one like the one before.
- The same chord, though I tried on a lower note (2000¢ lower, in fact). Still a pretty nice chord eh?
Regarding a silver timbre
This shouldn’t be neither (S1) nor (S2): first, the harmonics seem to sit too far apart, and second, I based the timbre on the silver ratio s = √2 + 1, not just plain √2. Listen here:
- Sampled in octaves which shares some partials. Come to that, I should’ve tried octaves for golden timbres too: they should handle this about right too.
- Chord, this time (s + 2) : (2s + 1) : (s + 5) : (3s + 3). I think I picked these intervals in a bad way, the chord for golden timbres sounded nicer for me.
First ten partials:
1 2.41421 4.82843 5.82843 8.24264 10.65685 11.65685 14.07107 16.48528 18.89949
— a bit over-rarified.
A late thought: oh of course that would be too rarified: s > 2! (Not a factorial.) I probably was wise to pick √2 when I mused about these things the first time, but that was too long ago, I forgot half the metadata. So I think a proper (S2) timbre is coming soon, but first I sleep.
Simple intervals played with (G1)
Here are about a dozen samples added to the same pack at Freesound as the others above. Intervals played are 2:1, 3:2, 4:3, 5:3, 5:4, 6:5, 7:4, 7:5, 7:6, 8:7 and the “timbral equivalents” of those for (G1). The first eight partials of (G1) are
1: 1 1 1.00000 2: φ φ 1.61803 3: φ+1 φ² 2.61803 4: φ+2 φ²+1 3.61803 5: 2φ+1 φ³ 4.23607 6: 2φ+2 φ³+1 5.23607 7: 3φ+1 φ³+φ 5.85410 8: 3φ+2 φ⁴ 6.85410
and here I call 4x:3x an interval between 4th and 3rd partials of this particular timbre, (φ+2):(φ+1) ≈ 1.38197, and like that for all others. Note this convention conflates many JI intervals into the same one, like 2x:1x = 3x:2x = 5x:3x = 7x:4x = φ.
Decimal values of these modified intervals along with JI ones are
7x:6x 1.11803 193.15068¢ 8:7 1.14286 231.17842¢ 7:6 1.16667 266.87585¢ 5x:4x 1.17082 273.02315¢ 8x:7x 1.17082 273.02315¢ 6:5 1.20000 315.64129¢ 6x:5x 1.23607 366.91254¢ 5:4 1.25000 386.31371¢ 4:3 1.33333 498.04067¢ 4x:3x 1.38197 560.07156¢ 7x:5x 1.38197 560.07156¢ 7:5 1.40000 582.51219¢ 3:2 1.50000 701.95500¢ 2x:1x 1.61803 833.08603¢ 3x:2x 1.61803 833.08603¢ 5x:3x 1.61803 833.08603¢ 7x:4x 1.61803 833.08603¢ 5:3 1.66667 884.36218¢ 7:4 1.75000 968.82591¢ 2:1 2.00000 1200.00000¢
Harmonic timbres with missing partials
Here is a folder of samples of various intervals and triads for testing how deleting multiples of 3, 5 or both makes septimal and undecimal thirds/sixths differ positively (or not) from pental ones; also 7/5 (for timbres without multiples of 3, specifically).
This time the lowest note of an interval or chord is always the same pitch. This should be more useful for comparisons.
A harmonic timbre with 3 retuned to 8/3
More specifically, all partials 3n m are replaced with (8/3)n m. This is to make fifths work in some way like fourths. Listen here. For me it sounds surprisingly consonant, considering retuning 5 to 24/5 sounds just evil. Though I can’t say I see what harmonic reifications this timbre brings.
An inharmonic timbre tuned to 17edo
Here.
Partials are, in \17 steps,
# 1 2 3 4 5 6 7 8 0, 17, 27, 34, 40, 44, 48, 51, # 9 10 11 12 13 14 15 16 54, 57, 59, 61, 63, 65, 67, 68, # 17 18 19 20 21 22 23 24 25 69, 71, 72, 74, 75, 76, 77, 78, 79,
where 5, 10, 15, 20, but not 25, are 1\17 higher than “the best” (as 5 is represented so-so).
This tweak is an idea from XA Discord. When I originally tried the same idea but with 5, 10, 15, 20 tuned a step lower, the timbre sounded pretty disastrous by itself, disregarding any harmonic possibilities, but I didn’t think to try to salvage that.
A general algorithm to make timbres like these
Now let’s make some constrants fixed and look at a solution that came to me 2022-11-13 by night after meddling with golden and silver timbres again.
We’d like to construct an increasing sequence s of real numbers such that:
- s0 = 1;
- a set of its values is mapped into itself under multiplication by a given α ≥ 1;
- its differences sn + 1 − sn are finitely many.
We’ll work with those differences. Pick a finite alphabet {A, …} and for each letter L define its value [L], a positive real number so that:
- [A] = 1;
- for each letter L, there is a word L1⋯Ln such that its total value [L1] + … + [Ln] = α ⋅ [L].
So there is a way to scale each difference α times and break it into unscaled ones, and there is a way to start (A). We’re going to build a sequence of differences iteratively.
Let’s make a context-free Wikipedia:L-system over this alphabet. Its start word will be A and each of its production rules L ⟶ w should “scale by α”—satisfy [w] = α [L] (above, we guaranteed there are such w for each letter L). We also want to observe this L-system has a “left limit” in the sense that for each integer N, there is an iteration of the system sharing a prefix of length N with every further iteration. Having that, we can construct a limiting word of the system as the unique word which shares prefixes of unbounded non-decreasing lengths with each iteration of the system.
This limit ℓ is what we’re after. Take [math]s_n = \sum_{i=0}^n [\ell_n][/math], that is, differences of s are the values of ℓ’s letters. By construction we see conditions (2) and (3) satisfied, and if (1) is not, we just divide all of s by s0.
A perhaps better way to guarantee (1) is to pick production rule(s) for A so that its successor(s) always starts with A itself. Moreover, if there’s only one production rule for each letter, and A’s successor is more than A itself, then we have a limit automatically: A is a prefix of its immediate derivation, which is a larger prefix of its immediate derivation, and so on.
In simple words, we constructed a way for each difference we’re allowed to use, when stretched by α, to be subdivided using just those same differences. This makes quite a regular structure. I conjecture for a deterministic L-system it’s always the case that [math]s_n = C n + \mathcal O(1)[/math].
Generalizations
One can use different production rulesets (for example one on even iterations and another on odd iterations) given that the limit exists and they all do scale by α. One can also apply rulesets to the limit word (possibly another ω times (and more) which is probably pointless). If you find differences of s too small, you can apply another rules to the limit word picked in such a way that letters with small values disappear. One also can apply rules only in some places. The last two kinds of tweaks may invalidate conditions (1) and (2), though there is a sense to speak about partial satisfaction of (2), in a statistical sense, which can then remain.
Examples
Harmonic timbre
Don’t add any letters, use any rule of form A ⟶ Aα where α > 1 is an integer.
The limit is AAAAAAAAA… and so s is 1, 2, 3, 4, …
Golden timbres
The scale factor α is the golden ratio φ.
Add a letter B with [B] = φ − 1, and the rules are A ⟶ AB and B ⟶ A. (Note that φ [A] = φ = 1 + φ − 1 = [AB], and that φ [B] = φ2 − φ = 1 = [A].)
The limit is G ≡ ABAABABAABAABABAABABA…, and so s is 1, φ, φ + 1, φ + 2, 2 φ + 1, 2 φ + 2, 3 φ + 1, 3 φ + 2, 3 φ + 3, 4 φ + 2, …
If we find φ − 1 too small a difference, we can add a letter C with value [C] = φ, and apply to G once rules A ⟶ BA, B ⟶ A, and then, again once, A ⟶ C, B ⟶ A, and end up with ACCACACCACCACACCACACC… This word doesn’t give us a set which is mapped into itself when multiplied by φ, but is close to that in a sense.
One can also apply a stochastic ruleset A ⟶ (AB or BA), B ⟶ A to G, except the first A which goes to AB to be sure the result starts with A. We end up with a set of timbres which is, I believe, every possible one satisfying (1)…(3) for scaling by φ.
We don’t end with a set of timbres which satisfy (2), but we will if we use this ruleset in a special way while generating the limit (not after). Namely, as is already typical, we replace the first A with AB, then each iteration we’ll get a word which has a previous word as its prefix; and we need to pick a rule for each A in that prefix which was used beforehand. So we always apply A ⟶ AB to the first A in the word, we always apply a rule to the second A which we applied after we got a word where the second A appeared, and so on, and we only have freedom to pick which alternate rules to apply in the newly-generated suffix. That still allows for a countable set of variations of the limit word. Now, all these do satisfy (2) though it might be not as obvious as with the fully deterministic process.
Preserving the initial A
We can preserve the initial A in the string and also rarefy the timbre at the last step by two neat tricks. First, make our iterated ruleset be Å ⟶ ÅB, A ⟶ (AB or BA), B ⟶ A. Å is a pun for A₀ and is preserved and marks the start, but all other As that get generated are normal. Then after generation we apply another “rarefying” ruleset Å ⟶ ÅB, A ⟶ C, B ⟶ A just once. No matter were rules stochastic or not, this approach gets us starting with ÅB which means partials 1, φ.
Silver timbres
Our α is √2 + 1.
Add a letter B with value [B] = √2 − 1, and the rules are A ⟶ AAB, B ⟶ A.
The limit of that is AABAABAAABAABAAAB… but [B] ≈ 0.4 might seem to small, so…
Apply to it once A ⟶ AC, B ⟶ A where [C] = √2. Now we get a nice and proper timbre because we had space to consolidate differences and not shatter (2)—because AC is a reformulation of an older AAB consequent.
Our new word is ACACAACACAACACACAACACAA…
We can apply A ⟶ (AC or CA) stochastically too (ensuring the first A is fixed, as above).