POTE tuning: Difference between revisions

X31eq (talk | contribs)
Weaknesses
ArrowHead294 (talk | contribs)
m update shortcut
 
(6 intermediate revisions by 3 users not shown)
Line 4: Line 4:


== Motivation ==
== Motivation ==
 
POTE is the same as TE in the limit of very small intervals. This means it is most similar to TE for intervals smaller than an octave, and most divergent for intervals of several octaves. As a tuning for the full audible range, the logic is that smaller intervals are more common in chords and so more important to optimize for. There are other ways to do this. POTE is the simplest way of prioritizing smaller intervals.
POTE is the same as TE in the limit of very small intervals. This means it is most similar to TE for intervals smaller than an octave, and most divergent for intervals of several octaves. As a tuning for the full audible range, the logic is that smaller intervals are more common in chords and so more important to optimize for. There are other ways to do this. POTE is the simplest.


POTE can stand in for TE where a pure-octave tuning is convenient for implementation constraints, like when a synthesizer has pure octave tuning tables. POTE is close to TE for melodic steps, so melodies can be translated between POTE and TE with minimal damage.
POTE can stand in for TE where a pure-octave tuning is convenient for implementation constraints, like when a synthesizer has pure octave tuning tables. POTE is close to TE for melodic steps, so melodies can be translated between POTE and TE with minimal damage.
Line 13: Line 12:
POTE has practical advantages for tuning instruments constrained to pure octaves as part of a band targeting TE. You can set the absolute pitch reference for each instrument so that it agrees with the TE background for a target register. Guitars (or other fretted string instruments) can implement this within themselves by having the frets assuming pure octaves and the open strings following the TE stretch.
POTE has practical advantages for tuning instruments constrained to pure octaves as part of a band targeting TE. You can set the absolute pitch reference for each instrument so that it agrees with the TE background for a target register. Guitars (or other fretted string instruments) can implement this within themselves by having the frets assuming pure octaves and the open strings following the TE stretch.


Psychoacoustics shows that many bands are tuned according to stretched octaves even when the instruments are producing harmonic timbres ([https://terhardt.userweb.mwn.de/ter/top/scalestretch.html Terhardt: Stretch of the musical tone scale]). This might be with each instrument having a stretched scale, or high-pitched instruments having a slightly sharp pitch reference. The magnitude of this stretch often swamps the optimal stretch for TE (which can be in either direction). So, if you are not going to observe the TE stretch, you might as well simplify it out. There are other reasons for putting instruments deliberately out of tune, for example solo instruments can be tuned slightly sharp to make them stand out. This leads to an upward drift of pitch reference in European orchestras: pianos are tuned slightly sharp to make them sound bright, and then the orchestra sharpens up to follow them.
Psychoacoustics shows that many bands are tuned according to stretched octaves even when the instruments are producing harmonic timbres ([https://terhardt.userweb.mwn.de/ter/top/scalestretch.html Terhardt: Stretch of the musical tone scale]). This might be with each instrument having a stretched scale, or high-pitched instruments having a slightly sharp pitch reference. The magnitude of this stretch often swamps the optimal stretch for TE (which can be in either direction). So, if you are not going to observe the TE stretch, you might as well simplify it out. There are other reasons for putting instruments deliberately out of tune, for example solo instruments can be tuned slightly sharp to make them stand out. This leads to an [https://en.wikipedia.org/wiki/Concert%20pitch upward drift of pitch reference] in European orchestras: [https://pianotuninginyork.blogspot.com/2018/11/a-history-of-pitch-standards-in-piano.html pianos are tuned slightly sharp to make them sound bright], and then the orchestra sharpens up to follow them.


== Weaknesses ==
== Weaknesses ==
* POTE tuning inherits problems of TE in being chosen for mathematical simplicity rather than a sound psychoacoustic basis.
* POTE tuning inherits problems of TE in being chosen for mathematical simplicity rather than a sound psychoacoustic basis.
* Like [[Kees height]], POTE agrees with TE for arbitrarily small intervals, which means it puts less emphasis on actually audible intervals, particularly those larger than an octave.  This tendency is mediated by [[Constrained_tuning#CTWE_tuning|Constrained Tenney–Weil–Euclidean tuning]]
* Like [[Kees height]], POTE agrees with TE for arbitrarily small intervals, which means it puts less emphasis on actually audible intervals, particularly those larger than an octave.  This tendency is mediated by [[Constrained_tuning#CTWE_tuning|Constrained Tenney–Weil–Euclidean tuning]]
Line 33: Line 31:
# Find the TE [[generator tuning map|generator map]] {{nowrap| ''G'' {{=}} ''J''<sub>''W''</sub>{{subsup|''V''|''W''|{{+}}}} }}, where {{nowrap| ''J''<sub>''W''</sub> {{=}} {{val| 1 1 1 1 }} }}.  
# Find the TE [[generator tuning map|generator map]] {{nowrap| ''G'' {{=}} ''J''<sub>''W''</sub>{{subsup|''V''|''W''|{{+}}}} }}, where {{nowrap| ''J''<sub>''W''</sub> {{=}} {{val| 1 1 1 1 }} }}.  
# Find the TE [[tuning map]] {{nowrap| ''T'' {{=}} ''GV''<sub>''W''</sub> }}.  
# Find the TE [[tuning map]] {{nowrap| ''T'' {{=}} ''GV''<sub>''W''</sub> }}.  
# Find the POTE generator map {{nowrap|''G''{{'}} {{=}} ''G''/''t''<sub>1</sub>}}; in other words ''G'' divided by the first entry of ''T''.  
# Find the POTE generator map {{nowrap|''G''{{``}} {{=}} ''G''/''t''<sub>1</sub>}}; in other words ''G'' divided by the first entry of ''T''.  


If you carry out these operations, you should find
If you carry out these operations, you should find
Line 39: Line 37:
* ''V''<sub>''W''</sub> ~ {{mapping| 1.000 0 0.861 -0.356 | 0.000 3.155 0.431 4.274 }}
* ''V''<sub>''W''</sub> ~ {{mapping| 1.000 0 0.861 -0.356 | 0.000 3.155 0.431 4.274 }}
* ''G'' ~ {{val| 1.000902 0.317246 }}
* ''G'' ~ {{val| 1.000902 0.317246 }}
* ''G''{{'}} ~ {{val| 1.000000 0.316960 }}
* ''G''{{``}} ~ {{val| 1.000000 0.316960 }}


The tuning of the POTE [[generator]] corresponding to the mapping ''V'' is therefore 0.31696 octaves, or 380.352 cents. Naturally, this only gives the single POTE generator in the rank-2 case, but the POTE tuning can still be found in this way for mappings defining higher-rank temperaments. The method can be generalized to subgroup temperaments, treating the formal prime represented by the first column as the [[equave]].  
The tuning of the POTE [[generator]] corresponding to the mapping ''V'' is therefore 0.31696&nbsp;octaves, or 380.352{{c}}. Naturally, this only gives the single POTE generator in the rank-2 case, but the POTE tuning can still be found in this way for mappings defining higher-rank temperaments. The method can be generalized to subgroup temperaments, treating the formal prime represented by the first column as the [[equave]].  


=== Computer program for TE and POTE ===
=== Computer program ===
Below is a [https://www.python.org/ Python] script that takes a mapping and gives TE and POTE generators, using [https://scipy.org/ Scipy].  
Based on the [https://www.python.org/ Python] script in [[Tenney–Euclidean tuning #Computer program]], here is a variant that takes a mapping and gives POTE generators, using [https://scipy.org/ Scipy].  


<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
Line 50: Line 48:
from scipy import linalg
from scipy import linalg


def find_te (mapping, subgroup):
def te (mapping, subgroup_basis):
     just_tuning_map = np.log2 (subgroup)
     just_tuning_map = 1200*np.log2 (subgroup_basis)
     te_weight = np.diag (1/np.log2 (subgroup))
     te_weight = np.diag (1/np.log2 (subgroup_basis))
     mapping = mapping @ te_weight
     mapping_w = mapping @ te_weight
     just_tuning_map = just_tuning_map @ te_weight
     just_tuning_map_w = just_tuning_map @ te_weight


     te_generators = linalg.lstsq (np.transpose (mapping), just_tuning_map)[0]
     te_generators = linalg.lstsq (np.transpose (mapping_w), just_tuning_map_w)[0]
     te_tuning_map = te_generators @ mapping
     te_tuning_map = te_generators @ mapping
     print (1200*te_generators)
     return te_generators, te_tuning_map
     pote_generators = te_generators/te_tuning_map[0]
 
     print (1200*pote_generators)
def pote (mapping, subgroup_basis):
    te_generators, te_tuning_map = te (mapping, subgroup_basis)
     pote_generators = te_generators/(te_tuning_map[0]/1200)
     pote_tuning_map = te_tuning_map/(te_tuning_map[0]/1200)
    return pote_generators, pote_tuning_map
</syntaxhighlight>


<syntaxhighlight lang="python">
# taking 7-limit magic as an example ...
# taking 7-limit magic as an example ...
seven_limit = [2, 3, 5, 7]
mapping = np.array ([[1, 0, 2, -1], [0, 5, 1, 12]])
mapping_magic = [[1, 0, 2, -1], [0, 5, 1, 12]]
subgroup_basis = np.array ([2, 3, 5, 7])


# to find TE and POTE you enter
# to find the POTE tuning you enter
find_te (mapping_magic, seven_limit)
pote (mapping, subgroup_basis)
</syntaxhighlight>
</syntaxhighlight>


Output:  
Output:  
<pre>
<pre>
[1201.08240941 380.695113  ]
[1200.       , 380.35203249]
[1200.         380.35203249]
[1200.       , 1901.76016243, 2780.35203249, 3364.22438984]
</pre>
</pre>