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

Alf*_*Osa 8 javascript math

我写了这篇文章 音乐和数学,找到了自然和五声音阶.

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

<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>
Run Code Online (Sandbox Code Playgroud)

结果区间以D(Re)开始于0,因此您有DEFGABCD这是Dorian模式

out*_*tis 8

你的问题(如书面的)是模棱两可的.如果你的意思是"你的算法可以用来生成自然尺度吗?" (那些包含所有天然音符,即笔记既不是尖锐也不平),那么,但只有一个(除非你允许不同的舍入方法,在这种情况下,你得到一种天然规模每舍入方法),并且仅通过樱桃拾取一个补品.如果你的意思是"你的算法本身是否会导致自然规模?",那么答案就是否定,因为它本身并不会产生一个尺度 ; 它会生成一个模式.

注意:在这个答案中,所有命名模式(例如爱奥尼亚语)都是指现代定义.

就半音而言,你的算法会产生0,2,3,5,7,9,10,12的间隔(来自音调),这对应于2-1-2-的半音序列(即音阶) 2-2-1-2,或多里安模式.请注意,该算法不会确定补品(刻度中的第一个音符),因此它不会给出特定的音阶,这是一系列音高,例如D中的C大调或多里安模式.

根据补品的命名间隔,多利安模式包含主要的第2,次要的第3,完美的第4,完美的第5,第6,第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,这是Lydian模式.舍入(?i*12/7?)得到你的间隔0,1,3,5,6,8,10,12和步骤1-2-2-1-2-2-2,这是Locrian模式.这些都不是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=7或是七声模式).heptatonic模式的数量等于长度为7的12 的组合数,即11 C 6 = 462,因此该方法不会生成所有模式.如果我们定义,我们只能使用这个舍入函数生成全音阶模式(7个命名模式,或Heptatonia Prima,最大程度地分隔半音步骤),限制为,其中i∈[0,7]⊂⊂.例如,Ionian是i∈[0,7](注意:舍入到最近).通过最后一种方法,我们可以生成可以生成所有7种自然尺度的模式.roundr(x) = floor(x+r)ri/7roundTo5/7(i*12/7)roundTo0.5(x)

Diatonic(n) = <roundTon/7(x*12/7) for x in ? [0, 7)>

其中<...>表示元组(即有限序列).

生成量表

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

生成自然尺度

要查看算法可以生成哪些自然尺度,请代表算法ADLO(n, round, tonic)的通用版本产生的比例,其中n是每个八度音程的音高数,round是舍入函数,tonic是音阶的补品.如果未指定任何值,则结果是所有可能值的集合(因此ADLO(7, nearest)是Dorian模式下的所有比例).命名模式和补品将用于该模式中具有该补品的比例(例如Ionian('C')是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)

在维基百科关于现代音乐模式的文章中,作为补品选择哪个音符作为"白色音符" .

计算正确性

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