User:Arseniiv/Timbres: Difference between revisions

Arseniiv (talk | contribs)
m fixes are endless
Arseniiv (talk | contribs)
 
(21 intermediate revisions by the same user not shown)
Line 42: Line 42:


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 ''x''<sup>''n''</sup> = ... with integer coefficients (or even rational ones?). And I hope very much such a timbre sounds well — hadn’t tested that yet.
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 ''x''<sup>''n''</sup> = ... 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:
* [https://freesound.org/people/arseniiv/sounds/591466/ 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.
* [https://freesound.org/people/arseniiv/sounds/591467/ 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:
* [https://freesound.org/people/arseniiv/sounds/591469/ Showcase of this one] like the one before.
* [https://freesound.org/people/arseniiv/sounds/591470/ 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:
* [https://freesound.org/people/arseniiv/sounds/591472/ Sampled in silver ratios].
* [https://freesound.org/people/arseniiv/sounds/591473/ 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.
* [https://freesound.org/people/arseniiv/sounds/591474/ 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:
<pre>1
2.41421
4.82843
5.82843
8.24264
10.65685
11.65685
14.07107
16.48528
18.89949</pre>
— 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 [https://freesound.org/people/arseniiv/packs/33199/ 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
<pre>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</pre>
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
<pre>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¢</pre>
=== Harmonic timbres with missing partials ===
[https://www.dropbox.com/sh/997zpwsqrx3sg5n/AADvqLayIpN5xPz-IGk8KDnga?dl=0 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 3<sup>''n''</sup> ''m'' are replaced with (8/3)<sup>''n''</sup> ''m''. This is to make fifths work in some way like fourths. Listen [https://www.dropbox.com/sh/yyasgbykj2ps01c/AAAWKadGOIYqylMnhZkCa7cza?dl=0 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 ===
[https://www.dropbox.com/sh/m3vcxljnbg82gtq/AAB4L82RLbUvGAvZDlwti5-pa?dl=0 Here].
Partials are, in [[17edo|\17]] steps,
<pre>#  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,</pre>
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:
# ''s''<sub>0</sub> = 1;
# a set of its values is mapped into itself under multiplication by a given α ≥ 1;
# its differences ''s''<sub>''n'' + 1</sub> − ''s''<sub>''n''</sub> 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 ''L''<sub>1</sub>⋯''L''<sub>''n''</sub> such that its total value [''L''<sub>1</sub>] + … + [''L''<sub>''n''</sub>] = α ⋅ [''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 ''s''<sub>0</sub>.
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''<sup>''α''</sup> 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''] = φ<sup>2</sup> − φ = 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''. <s>We end up with a set of timbres which is, I believe, every possible one satisfying (1)…(3) for scaling by φ.</s>
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 ''A''s 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).