上方倍音列と下方倍音列

とある音楽理論の一派では、自然倍音列にヒントを得て作曲に活かしたりするそうです。そんな倍音列の周波数と音名との対応を見られるJuliaプログラムを書いてみました。そもそも「倍音ってなに?」については以下の記事を参照してください。

marui.hatenablog.com

上方倍音列と下方倍音

倍音なんですが、ピッチを持つ楽器音の多くは基音成分の周波数の整数倍のところに強い成分を持ち、それらを第2倍音、第3倍音、第4倍音……と呼ぶということです。ピアノの中央のド(C4)の音の上にあるラ(A4)を440 Hzとしましょう。それを基音に持つ音であれば、第2倍音は880 Hz(2×440)、第3倍音は1320 Hz(3×440)、第4倍音は1760 Hz(4×440)……というようになっています。

楽器の音域 - 丸井綜研」で紹介した図を下に再掲します。これを見ると、440 Hz(A4)、880 Hz(A5)、1320 Hz(E6)、1760 Hz(A6)、2200 Hz(C♯7)、2640 Hz(E7)、3080 Hz(G7)……となっていくことが分かります。ここで、A、E、C♯、Gなどが出てきましたが、Aの長三和音(Aメジャー)の構成音はA-C♯-Eですし、Aの属七和音(Aセブンス)の構成音はA-C♯-E-Gなのです。和音の響きと倍音列のあいだの関係が予感されます。じつは周波数と音名とで多少の誤差が出てるんですが、この時点では十二音平均律へ四捨五入して考えてます。

このように上のほうに倍音列を見ていって「○○番目の音」というのをまとめて「上方倍音列」とします(管に息を吹き込んだり弦をはじいたりしたときにも生じるので自然倍音列とも呼ばれます)。で、同じことを下方向にもやるのが下方倍音列です。周波数を基音の2倍、3倍……と見るのの逆に、1/2倍、1/3倍、1/4倍……と見ていって該当する音高を集めたものです。注意してもらいたいのは、これは楽器から生じる物理的な成分音を想定したものではなく、数を使った思考実験だということです。

Juliaでの実装

これらの倍音列の音の高さをセント単位で計算するために、まずは周波数を音名表記に変換するプログラムを用意します。このプログラムは下記の記事に紹介したもので、freq_to_notenameという関数です。また、各音高のMIDIセント値から周波数を計算するmidicent_to_freqも使います。

marui.hatenablog.com

簡単なプログラムですが、簡単に説明します。たとえば、ピアノ中央のC4のMIDIノート番号は60なので、それを100倍した6000がMIDIセント値になります。この値をmidicent_to_freqへ、その出力(C4の周波数261.63 Hz)をfoとします。これを基本周波数として、その第n倍音ならびに第1/n倍音の周波数と音名をfreq_to_notenameによって得て、リストアップしています。たとえばG5+2という結果が得られたとすると、音名はG、オクターブ番号は5、十二音平均律からのズレは+2セント、というように読みます。

using Printf

base_note = 60;   # MIDI note number of center C
fo = midicent_to_freq(base_note * 100);
num_harmonics = 20;

for n in num_harmonics:-1:1
  @printf("%4d: %s (%.2f Hz)\n", n, freq_to_notename(fo*n, flat=false), fo*n)
end
for n in 2:num_harmonics
  @printf("1/%2d: %s (%.2f Hz)\n", n, freq_to_notename(fo/n, flat=true), fo/n)
end

結果は以下のようになります。十二音平均律との差もセント値で記載しています。第2~6倍音(C4, C5, G5, C6, E6, G6)くらいまでは平均律倍音周波数のズレが小さいのですが、第7倍音や第11倍音あたりになると自然倍音列の周波数と十二音平均律の周波数とでセント値の差が大きくなるのが分かります。

  20: E8-14 (5232.51 Hz)
  19: D♯8-2 (4970.89 Hz)
  18: D8+4 (4709.26 Hz)
  17: C♯8+5 (4447.63 Hz)
  16: C8+0 (4186.01 Hz)
  15: B7-12 (3924.38 Hz)
  14: A♯7-31 (3662.76 Hz)
  13: G♯7+41 (3401.13 Hz)
  12: G7+2 (3139.51 Hz)
  11: F♯7-49 (2877.88 Hz)
  10: E7-14 (2616.26 Hz)
   9: D7+4 (2354.63 Hz)
   8: C7+0 (2093.00 Hz)
   7: A♯6-31 (1831.38 Hz)
   6: G6+2 (1569.75 Hz)
   5: E6-14 (1308.13 Hz)
   4: C6+0 (1046.50 Hz)
   3: G5+2 (784.88 Hz)
   2: C5+0 (523.25 Hz)
   1: C4+0 (261.63 Hz)
1/ 2: C3+0 (130.81 Hz)
1/ 3: F2-2 (87.21 Hz)
1/ 4: C2+0 (65.41 Hz)
1/ 5: A♭1+14 (52.33 Hz)
1/ 6: F1-2 (43.60 Hz)
1/ 7: D1+31 (37.38 Hz)
1/ 8: C1+0 (32.70 Hz)
1/ 9: B♭0-4 (29.07 Hz)
1/10: A♭0+14 (26.16 Hz)
1/11: G♭0+49 (23.78 Hz)
1/12: F0-2 (21.80 Hz)
1/13: E0-41 (20.13 Hz)
1/14: D0+31 (18.69 Hz)
1/15: D♭0+12 (17.44 Hz)
1/16: C0+0 (16.35 Hz)
1/17: B-1-5 (15.39 Hz)
1/18: B♭-1-4 (14.53 Hz)
1/19: A-1+2 (13.77 Hz)
1/20: A♭-1+14 (13.08 Hz)

以下のように倍音周波数を五線譜に記載するケースがありますが、とくに微分音についての記載がないときには十二音平均律に四捨五入されていることになります。このように平均律とはズレがあることを意識しておかないと、倍音列をヒントにしたような音楽理論を理解するときに混乱してしまうのではないかと思います。

楽器音の倍音成分が自然倍音列として出ているにもかかわらず、基音周波数の列には十二音平均律を使うというのは、不協和があって面白いところですね。純正律にすれば万事解決するかというと、そうもいかないですし。