Kite's thoughts on pergens: Difference between revisions
Wikispaces>TallKite **Imported revision 624970849 - Original comment: ** |
Wikispaces>TallKite **Imported revision 625003811 - Original comment: ** |
||
Line 1: | Line 1: | ||
<h2>IMPORTED REVISION FROM WIKISPACES</h2> | <h2>IMPORTED REVISION FROM WIKISPACES</h2> | ||
This is an imported revision from Wikispaces. The revision metadata is included below for reference:<br> | This is an imported revision from Wikispaces. The revision metadata is included below for reference:<br> | ||
: This revision was by author [[User:TallKite|TallKite]] and made on <tt>2018-01-17 | : This revision was by author [[User:TallKite|TallKite]] and made on <tt>2018-01-17 14:30:39 UTC</tt>.<br> | ||
: The original revision id was <tt> | : The original revision id was <tt>625003811</tt>.<br> | ||
: The revision comment was: <tt></tt><br> | : The revision comment was: <tt></tt><br> | ||
The revision contents are below, presented both in the original Wikispaces Wikitext format, and in HTML exactly as Wikispaces rendered it.<br> | The revision contents are below, presented both in the original Wikispaces Wikitext format, and in HTML exactly as Wikispaces rendered it.<br> | ||
Line 322: | Line 322: | ||
==Searching for pergens== | ==Searching for pergens== | ||
To list all valid pergens is not a trivial task, like listing all valid edos or all valid MOS scales. Not all combinations of octave fractions and multigen fractions make a valid pergen. The search for rank-2 pergens can be done by looping through all possible square mappings [(x, y), (0, z)], and using the formula (P8/x, ( | To list all valid pergens is not a trivial task, like listing all valid edos or all valid MOS scales. Not all combinations of octave fractions and multigen fractions make a valid pergen. The search for rank-2 pergens can be done by looping through all possible square mappings [(x, y), (0, z)], and using the formula (P8/x, (i·z - y, x) / xz). While x is always positive and z is always nonzero, y can take on any value. For any x and z, y can be constrained to produce a viable cents value for 3/1. Let T be the tempered twefth 3/1. The mapping says T = y·P + z·G = y·P8/x + z·G. Thus y = x·(T/P8 - z·G/P8). We adopt the convention that G is less than half an octave. We constrain T so that the 5th is between 600¢ and 800¢, which certainly includes anything that sounds like a 5th. Thus T is between 3/2 and 5/3 of an octave. We assume that if the octave is stretched, the ranges of T and G will be stretched along with it. The outer ranges of y can now be computed, using the floor function to round down to the nearest integer, and the ceiling function to round up: | ||
If z > 0, then y is at least ceiling (x·( | If z > 0, then y is at least ceiling (x·(3/2 - z/2)) and at most floor (x·5/3) | ||
If z < 0, then y is at least ceiling ( | If z < 0, then y is at least ceiling (x·3/2) and at most floor (x·(5/3 - z/2)) | ||
Next we loop through all combinations of x and z in such a way that larger values of x and z come last: | Next we loop through all combinations of x and z in such a way that larger values of x and z come last: | ||
Line 338: | Line 338: | ||
); | ); | ||
The makeMapping function uses the two parameters as x and z, and loops through all valid values of y. Every value of | The makeMapping function uses the two parameters as x and z, and loops through all valid values of y. Every value of i from -x to x is tested, and the one that minimizes the multigen's splitting fraction and cents is chosen. This combination of x, y, z and i makes a valid pergen. If the pergen is of the form (P8/m, P4), it's converted to (P8/m, P5). This pergen is added to the list, unless it's a duplicate. The pergens are almost but not quite in the proper order, they will need to be sorted. | ||
In the [[pergen#Further%20Discussion-Supplemental%20materials|Supplemental materials]] section, a program is linked to that performs these calculations and lists all pergens. It also lists suggested enharmonics. | In the [[pergen#Further%20Discussion-Supplemental%20materials|Supplemental materials]] section, a program is linked to that performs these calculations and lists all pergens. It also lists suggested enharmonics. Experimenting with allowing y and i to range further does not produce any additional pergens. | ||
==Extremely large multigens== | ==Extremely large multigens== | ||
Line 621: | Line 619: | ||
A square mapping [(x, y), (0, z)] creates the pergen (P8/x, (i·z - y, x) / xz), with x > 0, z ≠ 0, and |i| <= x | A square mapping [(x, y), (0, z)] creates the pergen (P8/x, (i·z - y, x) / xz), with x > 0, z ≠ 0, and |i| <= x | ||
To prove: if |z| = 1, n = 1 | |||
If z = 1, let i = y - x, and the pergen = (P8/x, P5) | If z = 1, let i = y - x, and the pergen = (P8/x, P5) | ||
If z = -1, let i = 2x - y, and the pergen = (P8/x, P4) = (P8/x, P5) | If z = -1, let i = 2x - y, and the pergen = (P8/x, P4) = (P8/x, P5) | ||
Therefore if |z| = 1, n = 1 | Therefore if |z| = 1, n = 1 | ||
To prove: n is always a multiple of b, and n = |b| if and only if n = 1 | To prove: n is always a multiple of b, and n = |b| if and only if n = 1 | ||
b = x/k and n = xz/k, where k = sign (z) · GCD (iz-y, x) | b = x/k and n = xz/k, where k = sign (z) · GCD (iz-y, x) | ||
The GCD is defined here as always positive: GCD (-3,6) = GCD (3,-6) = GCD (-3, -6) = 3 | The GCD is defined here as always positive: GCD (-3,6) = GCD (3,-6) = GCD (-3, -6) = 3 | ||
n = zb = |z|·|b| | n = zb, and since n > 0, n = |z|·|b| | ||
Therefore multigens like M9/3 or M3/5 never occur | if n = |b|, then |z| = n/|b| = 1, and from the earlier proof, n = 1 | ||
if n = 1, |z|·|b| = 1, therefore |b| = 1, and n = |b| | |||
Therefore multigens like M9/3 or M3/5 never occur | |||
Therefore a and b must be coprime, otherwise M/n could be simplified by GCD (a,b) | Therefore a and b must be coprime, otherwise M/n could be simplified by GCD (a,b) | ||
Line 677: | Line 653: | ||
If m = |b|, the pergen is explicitly false | If m = |b|, the pergen is explicitly false | ||
Therefore assume m > |b| and unreduce | Therefore assume m > |b| and unreduce | ||
(P8/m, (a,b)/n) unreduced is (P8/m, (n-am, -bm) / mn | (P8/m, (a,b)/n) unreduced is (P8/m, (n-am, -bm) / mn) | ||
Simplify by dividing | Simplify by dividing by b to get (P8/m, (n/b - a(m/b), -m) / m(n/b)) = (P8/m, (a',b')/n') | ||
b' = -m, therefore m = |b'|, and the unreduced pergen is explicitly false | b' = -m, therefore m = |b'|, and the unreduced pergen is explicitly false | ||
Therefore the original pergen is a false double | Therefore the original pergen is a false double | ||
Line 2,316: | Line 2,292: | ||
<!-- ws:start:WikiTextHeadingRule:51:&lt;h2&gt; --><h2 id="toc5"><a name="Further Discussion-Searching for pergens"></a><!-- ws:end:WikiTextHeadingRule:51 -->Searching for pergens</h2> | <!-- ws:start:WikiTextHeadingRule:51:&lt;h2&gt; --><h2 id="toc5"><a name="Further Discussion-Searching for pergens"></a><!-- ws:end:WikiTextHeadingRule:51 -->Searching for pergens</h2> | ||
<br /> | <br /> | ||
To list all valid pergens is not a trivial task, like listing all valid edos or all valid MOS scales. Not all combinations of octave fractions and multigen fractions make a valid pergen. The search for rank-2 pergens can be done by looping through all possible square mappings [(x, y), (0, z)], and using the formula (P8/x, ( | To list all valid pergens is not a trivial task, like listing all valid edos or all valid MOS scales. Not all combinations of octave fractions and multigen fractions make a valid pergen. The search for rank-2 pergens can be done by looping through all possible square mappings [(x, y), (0, z)], and using the formula (P8/x, (i·z - y, x) / xz). While x is always positive and z is always nonzero, y can take on any value. For any x and z, y can be constrained to produce a viable cents value for 3/1. Let T be the tempered twefth 3/1. The mapping says T = y·P + z·G = y·P8/x + z·G. Thus y = x·(T/P8 - z·G/P8). We adopt the convention that G is less than half an octave. We constrain T so that the 5th is between 600¢ and 800¢, which certainly includes anything that sounds like a 5th. Thus T is between 3/2 and 5/3 of an octave. We assume that if the octave is stretched, the ranges of T and G will be stretched along with it. The outer ranges of y can now be computed, using the floor function to round down to the nearest integer, and the ceiling function to round up:<br /> | ||
<br /> | <br /> | ||
If z &gt; 0, then y is at least ceiling (x·( | If z &gt; 0, then y is at least ceiling (x·(3/2 - z/2)) and at most floor (x·5/3)<br /> | ||
If z &lt; 0, then y is at least ceiling ( | If z &lt; 0, then y is at least ceiling (x·3/2) and at most floor (x·(5/3 - z/2))<br /> | ||
<br /> | <br /> | ||
Next we loop through all combinations of x and z in such a way that larger values of x and z come last:<br /> | Next we loop through all combinations of x and z in such a way that larger values of x and z come last:<br /> | ||
Line 2,325: | Line 2,301: | ||
<ul class="quotelist"><li>j = 1; loop (i - 1,<ul class="quotelist"><li>makeMapping (i, j); makeMapping (i, -j);</li><li>makeMapping (j, i); makeMapping (j, -i);</li><li>j += 1;</li></ul></li><li>);</li><li>makeMapping (i, i); makeMapping (i, -i);</li><li>i += 1;</li></ul>);<br /> | <ul class="quotelist"><li>j = 1; loop (i - 1,<ul class="quotelist"><li>makeMapping (i, j); makeMapping (i, -j);</li><li>makeMapping (j, i); makeMapping (j, -i);</li><li>j += 1;</li></ul></li><li>);</li><li>makeMapping (i, i); makeMapping (i, -i);</li><li>i += 1;</li></ul>);<br /> | ||
<br /> | <br /> | ||
The makeMapping function uses the two parameters as x and z, and loops through all valid values of y. Every value of | The makeMapping function uses the two parameters as x and z, and loops through all valid values of y. Every value of i from -x to x is tested, and the one that minimizes the multigen's splitting fraction and cents is chosen. This combination of x, y, z and i makes a valid pergen. If the pergen is of the form (P8/m, P4), it's converted to (P8/m, P5). This pergen is added to the list, unless it's a duplicate. The pergens are almost but not quite in the proper order, they will need to be sorted.<br /> | ||
<br /> | <br /> | ||
In the <a class="wiki_link" href="/pergen#Further%20Discussion-Supplemental%20materials">Supplemental materials</a> section, a program is linked to that performs these calculations and lists all pergens. It also lists suggested enharmonics. | In the <a class="wiki_link" href="/pergen#Further%20Discussion-Supplemental%20materials">Supplemental materials</a> section, a program is linked to that performs these calculations and lists all pergens. It also lists suggested enharmonics. Experimenting with allowing y and i to range further does not produce any additional pergens.<br /> | ||
<br /> | <br /> | ||
<!-- ws:start:WikiTextHeadingRule:53:&lt;h2&gt; --><h2 id="toc6"><a name="Further Discussion-Extremely large multigens"></a><!-- ws:end:WikiTextHeadingRule:53 -->Extremely large multigens</h2> | <!-- ws:start:WikiTextHeadingRule:53:&lt;h2&gt; --><h2 id="toc6"><a name="Further Discussion-Extremely large multigens"></a><!-- ws:end:WikiTextHeadingRule:53 -->Extremely large multigens</h2> | ||
Line 3,265: | Line 3,239: | ||
<br /> | <br /> | ||
This PDF is a rank-2 notation guide that shows the full lattice for the first 15 pergens, up through the third-splits block.<br /> | This PDF is a rank-2 notation guide that shows the full lattice for the first 15 pergens, up through the third-splits block.<br /> | ||
<!-- ws:start:WikiTextUrlRule: | <!-- ws:start:WikiTextUrlRule:3979:http://www.tallkite.com/misc_files/pergens.pdf --><a class="wiki_link_ext" href="http://www.tallkite.com/misc_files/pergens.pdf" rel="nofollow">http://www.tallkite.com/misc_files/pergens.pdf</a><!-- ws:end:WikiTextUrlRule:3979 --><br /> | ||
<br /> | <br /> | ||
Alt-pergenLister lists out thousands of pergens, and suggests periods, generators and enharmonics for each one. It can also list only those pergens supported by a specific edo. Written in Jesusonic, runs inside Reaper.<br /> | Alt-pergenLister lists out thousands of pergens, and suggests periods, generators and enharmonics for each one. It can also list only those pergens supported by a specific edo. Written in Jesusonic, runs inside Reaper.<br /> | ||
<!-- ws:start:WikiTextUrlRule: | <!-- ws:start:WikiTextUrlRule:3980:http://www.tallkite.com/misc_files/alt-pergensLister.zip --><a class="wiki_link_ext" href="http://www.tallkite.com/misc_files/alt-pergensLister.zip" rel="nofollow">http://www.tallkite.com/misc_files/alt-pergensLister.zip</a><!-- ws:end:WikiTextUrlRule:3980 --><br /> | ||
<br /> | <br /> | ||
Screenshot of the first 38 pergens:<br /> | Screenshot of the first 38 pergens:<br /> | ||
Line 3,278: | Line 3,252: | ||
A square mapping [(x, y), (0, z)] creates the pergen (P8/x, (i·z - y, x) / xz), with x &gt; 0, z ≠ 0, and |i| &lt;= x<br /> | A square mapping [(x, y), (0, z)] creates the pergen (P8/x, (i·z - y, x) / xz), with x &gt; 0, z ≠ 0, and |i| &lt;= x<br /> | ||
<br /> | <br /> | ||
To prove: if |z| = 1, n = 1<br /> | |||
If z = 1, let i = y - x, and the pergen = (P8/x, P5)<br /> | If z = 1, let i = y - x, and the pergen = (P8/x, P5)<br /> | ||
If z = -1, let i = 2x - y, and the pergen = (P8/x, P4) = (P8/x, P5)<br /> | If z = -1, let i = 2x - y, and the pergen = (P8/x, P4) = (P8/x, P5)<br /> | ||
Therefore if |z| = 1, n = 1<br /> | Therefore if |z| = 1, n = 1<br /> | ||
<br /> | <br /> | ||
To prove: n is always a multiple of b, and n = |b| if and only if n = 1<br /> | To prove: n is always a multiple of b, and n = |b| if and only if n = 1<br /> | ||
b = x/k and n = xz/k, where k = sign (z) · GCD (iz-y, x)<br /> | b = x/k and n = xz/k, where k = sign (z) · GCD (iz-y, x)<br /> | ||
The GCD is defined here as always positive: GCD (-3,6) = GCD (3,-6) = GCD (-3, -6) = 3<br /> | The GCD is defined here as always positive: GCD (-3,6) = GCD (3,-6) = GCD (-3, -6) = 3<br /> | ||
n = zb = |z|·|b|<br /> | n = zb, and since n &gt; 0, n = |z|·|b|<br /> | ||
if n = |b|, then |z| = n/|b| = 1, and from the earlier proof, n = 1<br /> | |||
if n = 1, |z|·|b| = 1, therefore |b| = 1, and n = |b|<br /> | |||
Therefore multigens like M9/3 or M3/5 never occur<br /> | |||
Therefore a and b must be coprime, otherwise M/n could be simplified by GCD (a,b)<br /> | Therefore a and b must be coprime, otherwise M/n could be simplified by GCD (a,b)<br /> | ||
<br /> | <br /> | ||
Line 3,334: | Line 3,286: | ||
If m = |b|, the pergen is explicitly false<br /> | If m = |b|, the pergen is explicitly false<br /> | ||
Therefore assume m &gt; |b| and unreduce<br /> | Therefore assume m &gt; |b| and unreduce<br /> | ||
(P8/m, (a,b)/n) unreduced is (P8/m, (n-am, -bm) / mn | (P8/m, (a,b)/n) unreduced is (P8/m, (n-am, -bm) / mn)<br /> | ||
Simplify by dividing | Simplify by dividing by b to get (P8/m, (n/b - a(m/b), -m) / m(n/b)) = (P8/m, (a',b')/n')<br /> | ||
b' = -m, therefore m = |b'|, and the unreduced pergen is explicitly false<br /> | b' = -m, therefore m = |b'|, and the unreduced pergen is explicitly false<br /> | ||
Therefore the original pergen is a false double<br /> | Therefore the original pergen is a false double<br /> |