音乐与数学。寻找自然尺度发生器。最好的方法?

时间:2010-04-06 07:13:28

标签: javascript math

我写了这篇文章 Music and Mathematics, finding the Natural and the Pentatonic scales.

我想找到最好的程序化方法。解决方案可能是:

<script>
  function getScaleIntervals(c) {
    var tot = 0;
    var scale = [];

    while(tot <= 12){
      scale.push(Math.round(tot));
      tot += c;
    }
    return scale;
  }
  var natural_scale = getScaleIntervals(12/7);
  document.write(natural_scale + " \n"); // ==> 0, 2, 3, 5, 7, 9, 10, 12

  var pentatonic_scale = getScaleIntervals(12/5);
  document.write(pentatonic_scale + " \n"); // ==> 0, 2, 5, 7, 10, 12
</script>

结果间隔以D(Re)为0开始,因此您有D E F G A B C D. 这是多利安模式

3 个答案:

答案 0 :(得分:8)

你的问题(正如所写的)含糊不清。如果你的意思是“你的算法可以用来生成自然尺度吗?” (那些包含所有自然音符,即既不是锐利也不平坦的音符),然后是,但只有一个(除非你允许不同的舍入方法,在这种情况下你得到每个舍入方法一个自然标度)并且只有{{3滋补品。如果你的意思是“你的算法本身是否会导致自然规模?”,那么答案就是否定,因为它本身并不会产生比例;它会生成模式

注意:在本回答中,所有命名模式(例如爱奥尼亚语)都引用cherry picking定义。

就半音而言,你的算法会产生0,2,3,5,7,9,10,12的间隔(来自modern),这对应于一个半音序列(即缩放步骤) 2-1-2-2-2-1-2,或tonic。请注意,该算法不会确定Dorian mode(比例中的第一个音符),因此它不会为您提供特定的tonic,这是一系列音高,例如C-major D.或多里安模式D.

就补品的scale而言,多利安模式包含主要的第2,次要的第3,完美的第4,完美的第5,第6,第7,第7和第8完美。 C大调是M2,M3,P4,P5,M6,M7,P8(所有主要或完美的间隔)。

生成其他模式

您选择舍入函数是任意的。如果你总是向上舍入(⌈i*12/7⌉),你会得到0,2,4,6,7,9,11,12和半音序列2-2-2-1-2-2-1的间隔,其中是named intervals。向下舍入(⌊i*12/7⌋)可获得间隔0,1,3,5,6,8,10,12和步骤1-2-2-1-2-2-2,即Lydian mode 。这些都不是C中自然尺度的间隔或半音序列(即C或C大调的爱奥尼亚模式),即0,2,4,5,7,9,11,12和2-2-1分别为-2-2-2-1。

如果扩展算法以针对每个术语使用不同的舍入函数而不是针对所有术语使用相同的舍入函数,则可以生成其他命名模式(例如(_, ceil, ceil, floor, ceil, ceil, ceil, _),其中_表示“不要” “关心”,会产生爱奥尼亚人),但你也会产生许多其他不能产生自然规模的模式。您可以通过这种方式生成总共2个 n-1 模式,其中n是音调数量(我覆盖n=7Locrian mode模式)。 heptatonic模式的数量等于长度为7的12的heptatonic,即 11 C 6 = 462,因此该方法不会全部生成模式。如果我们定义roundr(x) = floor(x+r),我们可以通过限制{{1}使用此舍入函数,仅生成compositions模式(7个命名模式,或diatonic,最大限度地分隔半音步骤)到r,其中i∈[0,7]⊂⊂。例如,对于i∈[0,7],Ionian是i/7(注意:舍入到最接近的是roundTo5/7(i*12/7))。通过最后一种方法,我们可以生成可以生成所有7个自然尺度的模式。

roundTo0.5(x)

其中Diatonic(n) = <roundTon/7(x*12/7) for x in ∈ [0, 7)>表示元组(即有限序列)。

生成比例

您的算法仅生成模式,但这些模式可用于生成比例。根据您选择开始选择的音符(补品),您将获得给定模式的不同音阶。多利安导致小规模,因为它包括Heptatonia Prima(多里安的前两个半音阶段是2-1,总和为3,小三度)和完美的第五(序列以2-1-2开始) -2,在补品之上给予7个半音)。 Lydian给你一个主要的比例,因为它包括minor third(它的半音序列以2-2开始,总和为4,主要的三分之一)和完美的第五(2-1-2-2)。 Locrian不包括完美的第五,所以它既不是主要的也不是次要的。

生成自然天平

要查看算法可以生成哪些自然比例,让<...>代表算法的通用版本产生的比例,其中ADLO(n, round, tonic)是每个八度音阶的音高数{{1}是舍入函数,n是量表的补品。如果未指定任何值,则结果是所有可能值的集合(因此round是Dorian模式下的所有比例)。命名模式和补品将用于该模式中具有该补品的比例(例如tonic是C大调);没有补品的命名模式(例如ADLO(7, nearest))将代表该模式中所有比例的集合。 Ionian('C')表示一个集合,Ionian()表示序列。

    ADLO(7, nearest) = Dorian() = Diatonic(3)
      {
        <C, D,  D#, F,  G,  A,  A#, C>,
        <D, E,  F,  G,  A,  B,  C,  D>,
        <E, F#, G,  A,  B,  C#, D,  E>,
        <F, G,  G#, A#, C,  D,  D#, F>,
        <G, A,  A#, C,  D,  E,  F,  G>,
        <A, B,  C,  D,  E,  F#, G,  A>,
        <B, C#, D,  E,  F#, G#, A,  B>
      }
    ADLO(7, ceil) = Lydian() = Diatonic(6)
      {
        <C, D,  E,  F#, G,  A,  B,  C>,
        <D, E,  F#, G#, A,  B,  C#, D>,
        <E, F#, G#, A#, B,  C#, D#, E>,
        <F, G,  A,  B,  C,  D,  E,  F>,
        <G, A,  B,  C#, D,  E,  F#, G>,
        <A, B,  C#, D#, E,  F#, G#, A>,
        <B, C#, D#, F,  F#, G#, A#, B>
      }
    ADLO(7, floor) = Locrian() = Diatonic(0)
      {
        <C, C#, D#, F,  F#, G#, A#, C>,
        <D, D#, F,  G,  G#, A#, C,  D>,
        <E, F,  G,  A,  A#, C,  D,  E>,
        <F, F#, G#, A#, B,  C#, D#, F>,
        <G, G#, A#, C,  C#, D#, F,  G>,
        <A, A#, C,  D,  D#, F,  G,  A>,
        <B, C,  D,  E,  F,  G,  A,  B>
      }

因此我们看到了

      if you         and pick
* round to nearest     D
* round down           B
* round up             F
* ...
                     as the tonic, you get a natural scale.

此外,

    ADLO(7, roundTo5/7(x)) = Ionian()     = Diatonic(5)
    ADLO(7, roundTo3/7(x)) = Dorian()     = Diatonic(3)
    ADLO(7, roundTo1/7(x)) = Phrygian()   = Diatonic(1)
    ADLO(7, roundTo6/7(x)) = Lydian()     = Diatonic(6)
    ADLO(7, roundTo4/7(x)) = Mixolydian() = Diatonic(4)
    ADLO(7, roundTo2/7(x)) = Aeolian()    = Diatonic(2)
    ADLO(7, roundTo0/7(x)) = Locrian()    = Diatonic(0)

major third上的维基百科文章中,选择作为补品的哪个注释也作为“白色注释”。

计算正确性

代码生成模式的原因是modes in modern music中的音符尽可能均匀地分布在半音中。 {},对于i∈[0,m),是n个事物中m个事物的均匀分布。对这些值进行舍入,得到的分布在从0到n的整数中尽可能均匀。因此,您的算法会产生全音阶模式。这并不是一个重要的结果;这是四舍五入的一个相当简单的结果。

答案 1 :(得分:3)

我不知道博客页面中的理论是否正确,但如果出于某些疯狂的原因我将18个音符放入12个半音中,那么tot的上限将为13;五声音阶也不包括最后一个音阶。

以编程方式翻译博客页面上的内容应该使用

while (tot <= 12) {

其余的都很好,除了我不知道为什么需要if(scale.length == 8) {


为了音乐理论的有效性,请问别的地方。

答案 2 :(得分:0)

从阅读你的文章来看,在我看来,你们分别认为轻微的平面和主要是尖锐的。

因此,从“2舍入到细胞,次要音符”你得出结论,音阶中的第二个音符必须是钢琴上以D开头的第二个白键的平面版本。即,E♭。 你基本上从Dorian mode开始(即从D开始的所有白键),然后根据你的舍入结果增加或减少键。

但是,你应该注意到多里安尺度已经是一个尺度;因此,从多利安开始你得到的最自然的尺度将是完全相同的多利安尺度。并且你可以在没有任何平底或尖锐物(或者你的名字的小调和主要音符)的情况下实现这一点。

在Dorian尺度上开始这整个理论已经是一个强有力的假设,它需要一些努力才能以合理的方式进行。而这项艰苦的工作最终将导致真正的量表理论。而不是你之后做的数字。

在你写作的时候,你“曾经相信某些音符之间的半色调是一种调整” - 它真的在我看来仍然如此,否则你不会忽视它们开始时一个不同等的温度。如果您想进一步了解,这个比例应该是您的起点:

c – c♯ – d – d♯ – e – f – f♯ – g – g♯ – a – a♯ – h

(为了避免进一步的混淆,你应该删除他们的名字并通过1,2,3,...... 12来引用它们。)

frequency fractions

1 – 2^(1/12) – 2^(2/12) – 2^(3/12) – … – 2^(11/12) – 2^(12/12) = 2
1 – 1.059    – 1.122    – 1.189    – … – 1.888     – 2

你可以在相同的温度范围内进行数字游戏,然后看看会发生什么。关于大和弦发现的一些理论是通过观察乐器中的overtone series来完成的。如果你接受一些妥协,你会在这个系列中找到一些自然会产生某种主要和弦和基本音阶的音符。其中一个妥协是,你会发现你实际上并不完全平等......