MOS substitution: Difference between revisions
Tags: Mobile edit Mobile web edit |
|||
| (45 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
'''MOS substitution''' is a procedure for obtaining a ternary (3 step sizes) scale from two [[MOS]] patterns. It consists of substituting the step pattern of one MOS pattern (called the filling MOS), scale step for scale step, for all occurrences of a chosen step size of another MOS pattern (called the template MOS). Unlike MV3 scales, a MOS substitution scale may have any combination of step sizes. | '''MOS substitution''' is a procedure for obtaining a ternary (3 step sizes) scale from two [[MOS]] patterns. It consists of substituting the step pattern of one MOS pattern (called the ''filling MOS''), scale step for scale step, for all occurrences of a chosen step size of another MOS pattern (called the ''template MOS''). Unlike MV3 scales, a MOS substitution scale may have any combination of step sizes. | ||
[[Aberrismic theory]] uses MOS substitution. In fact, groundfault reports having come up with a similar concept but not following up on it. | |||
== Convention == | |||
MOS substitution scales are denoted using the notation "subst ax(bycz)" or just "aX(bYcZ)". Any particular scale of a given MOS substitution type is said to be "a subst ax(bycz)" or "a scale of type ax(bycz)". A specific MOS substitution scale may be denoted {{nowrap|template_MOS_with_slot_letter_X(filling_MOS)}}; to make this notation unique for a particular given MOS-substitution scale, the brightest mode for the template MOS is conventionally used, treating the slot letter X as the smaller step. | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ style="font-size: 105%;" | The three | |+ style="font-size: 105%;" | The three subst 2'''L'''(1'''m'''2'''s''') scales | ||
|- | |- | ||
! rowspan="2" | [[Simplified UDP]] for filling MOS | ! rowspan="2" | [[Simplified UDP]] for filling MOS | ||
| Line 17: | Line 19: | ||
| style="text-align: right;" | <code>mss</code> | | style="text-align: right;" | <code>mss</code> | ||
| colspan="2" style="text-align: right;" | <code>LmLss</code> | | colspan="2" style="text-align: right;" | <code>LmLss</code> | ||
| | | LXLXX(mss) | ||
|- | |- | ||
| 1{{pipe}}1 | | 1{{pipe}}1 | ||
| style="text-align: right;" | <code>sms</code> | | style="text-align: right;" | <code>sms</code> | ||
| colspan="2" style="text-align: right;" | <code>LsLms</code> | | colspan="2" style="text-align: right;" | <code>LsLms</code> | ||
| | | LXLXX(sms) | ||
|- | |- | ||
| 0{{pipe}}2 | | 0{{pipe}}2 | ||
| style="text-align: right;" | <code>ssm</code> | | style="text-align: right;" | <code>ssm</code> | ||
| colspan="2" style="text-align: right;" | <code>LsLsm</code> | | colspan="2" style="text-align: right;" | <code>LsLsm</code> | ||
| | | LXLXX(ssm) | ||
|} | |} | ||
== Math notation == | |||
== | |||
{{User:Inthar/Template:Notation}} | {{User:Inthar/Template:Notation}} | ||
* Boldface Latin variables are step sizes, and <math>\mathbf{L} > \mathbf{m} > \mathbf{s} > \mathbf{0}.</math> <math>\mathbf{0}</math> denotes the zero step (0 cents). | * Boldface Latin variables are step sizes, and <math>\mathbf{L} > \mathbf{m} > \mathbf{s} > \mathbf{0}.</math> <math>\mathbf{0}</math> denotes the zero step (0 cents). | ||
| Line 53: | Line 43: | ||
== Formal definition == | == Formal definition == | ||
A ternary scale word ''w''('''x'''<sub>1</sub>, '''x'''<sub>2</sub>, '''x'''<sub>3</sub>) is a ''MOS substitution'' scale word if there exists a permutation <math>\pi \in S_3</math> such that the following holds: | |||
* identifying '''x'''<sub>π(1)</sub> and '''x'''<sub>π(2)</sub> results in a MOS (called the ''template MOS'') and | |||
* deleting all instances of '''x'''<sub>π(3)</sub> (called the ''slot letter'') results in a MOS (called the ''filling MOS''). | |||
== Original derivation == | == Original derivation == | ||
| Line 62: | Line 54: | ||
In the original aberrismic-informed context, say that <math>d = (a, c) > 1.</math> Consider the MOS word <math>(a + c)\mathbf{X}b\mathbf{m}</math>, which we call the ''template MOS''. Since the "most even" arrangement (in the sense of [[distributional evenness]]) of <math>a</math>-many <math>\mathbf{L}</math> steps and <math>c</math>-many <math>\mathbf{s}</math> steps is the MOS <math>a\mathbf{L}b\mathbf{s}</math> (which will in general be a non-[[primitive]] MOS), this method prescribes following the latter MOS, called the ''filling MOS'', to fill in the <math>\mathbf{X}</math> steps. Fixing a choice of which <math>\mathbf{X}</math> in the MOS <math>(a + c)\mathbf{X}b\mathbf{m}</math> you start from, we can choose one of <math>(a+c)/d</math> modes of <math>a \mathbf{L} c \mathbf{s}.</math> If <math>a = c</math>, we obtain a balanced (thus MV3) ternary scale; when in addition <math>b</math> is odd, the scale is also SV3 and chiral, and we recover the two chiralities from the two modes of <math>a\mathbf{L}a\mathbf{s}</math>. Of course, one may do this using template MOS <math>a\mathbf{L}(b + c)\mathbf{X}</math> and the <math>(b, c)</math>-multiperiod filling MOS <math>b\mathbf{m} c\mathbf{s}</math> instead. This article denotes the resulting scale <math>\mathsf{MOS\_subst}(a, b, c; \mathbf{y}, \mathbf{z}; k):</math> | In the original aberrismic-informed context, say that <math>d = (a, c) > 1.</math> Consider the MOS word <math>(a + c)\mathbf{X}b\mathbf{m}</math>, which we call the ''template MOS''. Since the "most even" arrangement (in the sense of [[distributional evenness]]) of <math>a</math>-many <math>\mathbf{L}</math> steps and <math>c</math>-many <math>\mathbf{s}</math> steps is the MOS <math>a\mathbf{L}b\mathbf{s}</math> (which will in general be a non-[[primitive]] MOS), this method prescribes following the latter MOS, called the ''filling MOS'', to fill in the <math>\mathbf{X}</math> steps. Fixing a choice of which <math>\mathbf{X}</math> in the MOS <math>(a + c)\mathbf{X}b\mathbf{m}</math> you start from, we can choose one of <math>(a+c)/d</math> modes of <math>a \mathbf{L} c \mathbf{s}.</math> If <math>a = c</math>, we obtain a balanced (thus MV3) ternary scale; when in addition <math>b</math> is odd, the scale is also SV3 and chiral, and we recover the two chiralities from the two modes of <math>a\mathbf{L}a\mathbf{s}</math>. Of course, one may do this using template MOS <math>a\mathbf{L}(b + c)\mathbf{X}</math> and the <math>(b, c)</math>-multiperiod filling MOS <math>b\mathbf{m} c\mathbf{s}</math> instead. This article denotes the resulting scale <math>\mathsf{MOS\_subst}(a, b, c; \mathbf{y}, \mathbf{z}; k):</math> | ||
<math>\displaystyle{ | <math>\displaystyle{\mathsf{subst}\left( a\mathbf{w}(b + c)\mathbf{X}(0) , \mathbf{X}, b\mathbf{y}c\mathbf{z}(k) \right) }</math> | ||
Here <math>\mathbf{z}</math> is the new step size inserted, <math>\mathbf{y}</math> is the step size in the starting MOS identified with <math>\mathbf{z}</math> by the template MOS, and <math>k</math> is the brightness of the mode of the filling MOS used (<math>k = 0</math> corresponds to the darkest mode; the conventional understanding of "brightness" makes sense as <math>\mathbf{L}</math> (resp. <math>\mathbf{m}</math>) > <math>\mathbf{s}</math>). | Here <math>\mathbf{z}</math> is the new step size inserted, <math>\mathbf{y}</math> is the step size in the starting MOS identified with <math>\mathbf{z}</math> by the template MOS, and <math>k</math> is the brightness of the mode of the filling MOS used (<math>k = 0</math> corresponds to the darkest mode; the conventional understanding of "brightness" makes sense as <math>\mathbf{L}</math> (resp. <math>\mathbf{m}</math>) > <math>\mathbf{s}</math>). | ||
== Examples == | == Examples == | ||
| Line 194: | Line 175: | ||
In particular, all [[monotone-MOS scale]]s (i.e. such that the results of {{nowrap|'''L''' {{=}} '''m''' | '''m''' {{=}} '''s'''}}, and {{nowrap|'''s''' {{=}} '''0'''}} temperings are MOSes) arise from MOS substitution in this way. | In particular, all [[monotone-MOS scale]]s (i.e. such that the results of {{nowrap|'''L''' {{=}} '''m''' | '''m''' {{=}} '''s'''}}, and {{nowrap|'''s''' {{=}} '''0'''}} temperings are MOSes) arise from MOS substitution in this way. | ||
=== If a ternary scale satisfies all three possible MOS-substitution types, then it is pairwise-MOS and deletion-MOS === | |||
This fact is immediate. (See [[pairwise-MOS]] and [[deletion-MOS]].) | |||
Corollary (by [[Ternary scale theorems]]): Such a scale is [[Fraenkel word|Fraenkel]], [[odd-regular]], or [[even-regular]]. | |||
=== If the template MOS is primitive, MOS substitution yields binary well-formed generator sequences === | === If the template MOS is primitive, MOS substitution yields binary well-formed generator sequences === | ||
| Line 199: | Line 184: | ||
Consider the mode of the template MOS <math>T = T(\mathbf{m},\mathbf{X}) = (a+c)\mathbf{X}b\mathbf{m}(0).</math> This is the mode of <math>T</math> that has the most <math>\mathbf{X}</math> steps near the end. If <math>T</math> is [[primitive]], let <math>r</math> be the count of <math>\mathbf{X}</math> steps in a chosen (reduced) generator of <math>T.</math> Since <math>r</math> must be coprime to <math>a+c,</math> <math>r</math>-steps in the filling MOS <math>F = a\mathbf{L}c\mathbf{s}(k)</math> come in exactly 2 sizes, <math>i\mathbf{L}+j\mathbf{s}</math> and <math>(i-1)\mathbf{L}+(j+1)\mathbf{s}.</math> Since the detempering of the imperfect generator of <math>T</math> occurs only once in <math>S</math>, <math>S</math> admits a particularly elegant well-formed binary (using two distinct generators) [[generator sequence]] of length <math>q = \frac{a+c}{\gcd(a,c)},</math> the period of the filling MOS. The generator sequence corresponds to the circle of <math>r</math>-steps in the filling MOS. Letting <math>\mathsf{GS}(g_1, ..., g_{q})</math> be this generator sequence, <math>g_j</math> is either <math>p\mathbf{m} + i\mathbf{L} + j\mathbf{s}</math> or <math>p\mathbf{m} + (i-1)\mathbf{L} + (j+1)\mathbf{s},</math> according as the <math>j</math>-th <math>r</math>-step in the sequence of stacked <math>r</math>-steps on the chosen mode of <math>F</math> is <math>i\mathbf{L} + j\mathbf{s}</math> or <math>(i-1)\mathbf{L} + (j+1)\mathbf{s}.</math> (We could have chosen to use the mode of <math>T</math> on the other extreme of its generator arc instead, which corresponds to taking the circle of <math>(a+c - r)</math>-steps in <math>F</math> and is thus also valid.) The generator of the template MOS serves as the "guide generator" for this generator sequence. | Consider the mode of the template MOS <math>T = T(\mathbf{m},\mathbf{X}) = (a+c)\mathbf{X}b\mathbf{m}(0).</math> This is the mode of <math>T</math> that has the most <math>\mathbf{X}</math> steps near the end. If <math>T</math> is [[primitive]], let <math>r</math> be the count of <math>\mathbf{X}</math> steps in a chosen (reduced) generator of <math>T.</math> Since <math>r</math> must be coprime to <math>a+c,</math> <math>r</math>-steps in the filling MOS <math>F = a\mathbf{L}c\mathbf{s}(k)</math> come in exactly 2 sizes, <math>i\mathbf{L}+j\mathbf{s}</math> and <math>(i-1)\mathbf{L}+(j+1)\mathbf{s}.</math> Since the detempering of the imperfect generator of <math>T</math> occurs only once in <math>S</math>, <math>S</math> admits a particularly elegant well-formed binary (using two distinct generators) [[generator sequence]] of length <math>q = \frac{a+c}{\gcd(a,c)},</math> the period of the filling MOS. The generator sequence corresponds to the circle of <math>r</math>-steps in the filling MOS. Letting <math>\mathsf{GS}(g_1, ..., g_{q})</math> be this generator sequence, <math>g_j</math> is either <math>p\mathbf{m} + i\mathbf{L} + j\mathbf{s}</math> or <math>p\mathbf{m} + (i-1)\mathbf{L} + (j+1)\mathbf{s},</math> according as the <math>j</math>-th <math>r</math>-step in the sequence of stacked <math>r</math>-steps on the chosen mode of <math>F</math> is <math>i\mathbf{L} + j\mathbf{s}</math> or <math>(i-1)\mathbf{L} + (j+1)\mathbf{s}.</math> (We could have chosen to use the mode of <math>T</math> on the other extreme of its generator arc instead, which corresponds to taking the circle of <math>(a+c - r)</math>-steps in <math>F</math> and is thus also valid.) The generator of the template MOS serves as the "guide generator" for this generator sequence. | ||
=== If the template is a primitive MOS, and for some perfect generators <math>p_T, p_F, \ \left|p_T\right|_\mathbf{X} = \left|p_F\right|,</math> then MOS substitution yields | === If the template is a primitive MOS, and for some perfect generators <math>p_T, p_F, \ r := \left|p_T\right|_\mathbf{X} = \left|p_F\right|,</math> then MOS substitution yields a parallelogram substring in the lattice === | ||
With the additional assumption that the number of X' | With the additional assumption that the number of '''X''' letters in a perfect generator ''p''<sub>''T''</sub> of the template MOS be a generator class of the filling MOS, the generator sequence yields ''q'' parallel chains ''C''<sub>1</sub>, | ||
..., ''C''<sub>''q''</sub> of the aggregate generator. The offset between ''C''<sub>''i''</sub> and ''C''<sub>''i''+1</sub> is equal to subst(''p''<sub>''T''</sub>, '''X''', ''p''<sub>''F''</sub>), where ''p''<sub>''T''</sub> and ''p''<sub>''F''</sub> are perfect generators (of appropriate lengths) of the template and filling MOSes, respectively. The aggregate generator is subst((''p''<sub>''T''</sub>)<sup>'' | ..., ''C''<sub>''q''</sub> of the aggregate generator, the sum of the generators in the GS. The offset between ''C''<sub>''i''</sub> and ''C''<sub>''i''+1</sub> is equal to subst(''p''<sub>''T''</sub>, '''X''', ''p''<sub>''F''</sub>), where ''p''<sub>''T''</sub> and ''p''<sub>''F''</sub> are perfect generators (of appropriate lengths) of the template and filling MOSes, respectively. The aggregate generator is subst((''p''<sub>''T''</sub>)<sup>''q''</sup>, '''X''', ''G''<sup>''r''</sup>), where ''G'' is the period of the filling MOS. | ||
Hence in the GS, | Hence in the GS, | ||
| Line 208: | Line 193: | ||
* the imperfect generator of the filling MOS corresponds to looping back to ''C''<sub>1</sub> but on the next note of ''C''<sub>1</sub>, so it and the ''q'' − 1 notes thereafter are advanced by 1 note from any predecessor notes in the chains. | * the imperfect generator of the filling MOS corresponds to looping back to ''C''<sub>1</sub> but on the next note of ''C''<sub>1</sub>, so it and the ''q'' − 1 notes thereafter are advanced by 1 note from any predecessor notes in the chains. | ||
Hence these particular MOS substitution scales satisfy a property that we call '' | Hence these particular MOS substitution scales satisfy a property that we call ''[[parallelogram substring scale|parallelogram substring]]''. An '''e'''-equivalent scale is a ''parallelogram substring'' if there exist integers ''m'' > 0, ''n'' > 0, 0 ≤ ''a'' < ''n'', 0 ≤ ''b'' < ''n'', a vector '''a''', and two linearly independent vectors '''v''' and '''w''' such that the set of notes in the scale as a subset of the lattice of '''e'''-equivalent pitches is | ||
<math>\{\mathbf{a} + i\mathbf{v}\}_{i=a}^{n-1} \cup \{\mathbf{a} | <math> | ||
\{\mathbf{a} + i\mathbf{v}\}_{i=a}^{n-1} | |||
\cup \{\mathbf{a} + i\mathbf{v} + j\mathbf{w}\}_{(i,j) \in [n]_0 \times [m-2]_1} | |||
\cup \{\mathbf{a} + i\mathbf{v} + (m-1)\mathbf{w}\}_{i=0}^{b}. % prefix of last row | |||
</math> | |||
Here the scale is thought as traversing a series of rows one step of the row at a time, and | |||
* <math>\{\mathbf{a} + i\mathbf{v}\}_{i=a}^{n-1}</math> is a (nonempty) suffix of the first row | |||
* <math>\{\mathbf{a} + i\mathbf{v} + j\mathbf{w}\}_{(i,j) \in [n]_0 \times [m-2]_1}</math> is a (possibly empty) parallelogram where rows are traversed fully | |||
* <math>\{\mathbf{a} + i\mathbf{v} + (m-1)\mathbf{w}\}_{i=0}^{b}</math> is a (nonempty) prefix of the last row | |||
* '''v''' and '''w''' are the generator and offset | |||
The converse is false, as the scale in 5 letters [9/8 28/27 9/8 64/63 9/8 28/27 243/224 28/27 64/63 567/512 64/63] is | In the above case, {{nowrap| ''n'' {{=}} ''q'' | '''v''' {{=}} subst(''p''<sub>''T''</sub>, '''X''', ''p''<sub>''F''</sub>) | and '''w''' {{=}} subst((''p''<sub>''T''</sub>)<sup>''q''</sup>, '''X''', ''G''<sup>''r''</sup>) (the aggregate generator)}}. | ||
The converse is false, as the scale in 5 letters [9/8 28/27 9/8 64/63 9/8 28/27 243/224 28/27 64/63 567/512 64/63] is a parallelogram substring. | |||
=== MOS substitution scales have block balance at most 2 === | === MOS substitution scales have block balance at most 2 === | ||
| Line 222: | Line 216: | ||
Case 1: One of ''k'' and {{nowrap|''k'' + 1}} equals ({{nowrap|''b'' + ''c''}}) and '''Y''' occurs exactly ''b'' times or ''b'' plus or minus 1 in this case. | Case 1: One of ''k'' and {{nowrap|''k'' + 1}} equals ({{nowrap|''b'' + ''c''}}) and '''Y''' occurs exactly ''b'' times or ''b'' plus or minus 1 in this case. | ||
Case 2: Neither of ''k'' and {{nowrap|''k'' + 1}} equals ({{nowrap|''b'' + ''c''}}). Here, if '''Y''' occurs ''j'' or {{nowrap|''j'' + 1}} times in a window of size ''k'', then ''Y'' occurs {{nowrap|''j'' + 1}} or {{nowrap|''j'' + 2}} times in a window of size {{nowrap|''k'' + 2}}. | Case 2: Neither of ''k'' and {{nowrap|''k'' + 1}} equals ({{nowrap|''b'' + ''c''}}). Here, if '''Y''' occurs ''j'' or {{nowrap|''j'' + 1}} times in a window of size ''k'', then '''Y''' occurs {{nowrap|''j'' + 1}} or {{nowrap|''j'' + 2}} times in a window of size {{nowrap|''k'' + 2}}. | ||
=== Ternary parallelogram scales are MOS substitution scales === | |||
:''Main article: [[Ternary parallelogram scales are MOS substitution]]'' | |||
== MOS substitution scales and RTT == | == MOS substitution scales and RTT == | ||
| Line 240: | Line 237: | ||
return result | return result | ||
# In UDP, brightness = number of generators up * gcd of the step counts | # In UDP, brightness = number of generators up * gcd of the step counts | ||
# Function returns subst nX X (nY Y nZ Z (brightness_of_filling_mos) | (nY + nZ - gcd(nY, nZ) - brightness_of_filling_mos)) | # Function returns subst nX X (nY Y nZ Z (brightness_of_filling_mos) | (nY + nZ - gcd(nY, nZ) - brightness_of_filling_mos)) | ||
def mos_subst(nX, nY, nZ, sizeX, sizeY, sizeZ, brightness_of_filling_mos): | def mos_subst(nX, nY, nZ, sizeX, sizeY, sizeZ, brightness_of_filling_mos): | ||
| Line 248: | Line 245: | ||
scale = subst_step_sizes(word, {"X": sizeX, "Y": sizeY, "Z": sizeZ}) | scale = subst_step_sizes(word, {"X": sizeX, "Y": sizeY, "Z": sizeZ}) | ||
return scale | return scale | ||
</syntaxhighlight> | </syntaxhighlight> | ||