このページでは中全音律の音階を設計した後に,この音律の特徴を確認します.
【キーワード】ウルフ,純正長三度,転調,中全音,全音の幅
ピタゴラス音律では長三度がやや広く,濁って聞こえるという問題がありました.これに対する解決策として,純正律は長三度の周波数比率を5:4, 完全五度の周波数比率を3:2となるように設計し,特定の調の中では純正な響きが得られるように設計しました.
中全音律では,純正完全五度の3:2ではなく純正長三度の5:4を中心に音律を設計します.
ざっくり言えば,純正長三度の周波数比率5:4を使ってピタゴラス音律のようなものを作りたいのですが,ピタゴラス音律の手法を真似しようとすると問題が起きます.
Cから上に上げると,C→E→G♯→B♯→D♯♯→... 下に上げる場合もC→A♭→F♭→D♭♭→...となってしまい12音をオクターブ内に上手く配置できず,自然な音階を構成することができません.
そこで以下のような計算手順を踏んで求めます.
C4から始めてピタゴラス音律でE4の周波数を計算すると,C4→G4→D5→A5→E6となり,E6=(3/2)^4 2オクターブ下のE4を求めるには4で割って E4=81/64≒1.27となります.
これだと純正長3度の5/4=1.25より広すぎるので (x^4)/4 = 5/4になる純正長三度が得られるような完全五度の周波数比率xを探せば,x^4 = 5 → x = 5^(1/4) となり各長三度が純正長三度となるようなxを求めることができます.
この 5^(1/4) をピタゴラス音律のように積み上げていったものが中全音律です.
以下のコードでCメジャーとその近親調で綺麗に響く中全音律を確認できます.
import math
# A4 = 440Hz から逆算した C4
C4 = 263.1814
X = 5 ** (1/4) # 中全音律(ミーントーン)の要。長三度が純正になるように調整された完全五度の比率
# --- ひたすら五度(X倍)を積み上げていく ---
# A♭ - E♭ - B♭ - F - [ C ] - G - D - A - E - B - F♯ - C♯ - G♯
# 音を上げる方向
G4 = C4 * X
D4 = (G4 * X) / 2
A4 = D4 * X
E4 = (A4 * X) / 2
B4 = E4 * X
Fs4 = (B4 * X) / 2
Cs4 = (Fs4 * X) / 2
Gs4 = Cs4 * X
# 音を下げる方向
F4 = (C4 / X) * 2
Bb4 = (F4 / X) * 2
Eb4 = (Bb4 / X)
Ab4 = (Eb4 / X) * 2
C5 = C4 * 2
# --- 結果の表示 ---
notes = {
"C4 ": C4,
"C#4 ": Cs4,
"D4 ": D4,
"E♭4": Eb4,
"E4 ": E4,
"F4 ": F4,
"F#4 ": Fs4,
"G4 ": G4,
"G#4 ": Gs4,
"A♭4": Ab4,
"A4 ": A4,
"B♭4": Bb4,
"B4 ": B4,
"C5 ": C5
}
ordered_keys = list(notes.keys())
print("音名 | 周波数 (Hz) | セント")
print("-" * 25)
for key in ordered_keys:
print(f"{key} | {notes[key]:<11.3f} | {1200*math.log2(notes[key]/C4):.1f}")
print()
print("【中全音律では平均律と違い異名同音の周波数が異なる】")
print(f"A♭4:{round(Ab4,2)} ≠ G♯4:{round(Gs4,2)}")
diff_cents = 1200 * math.log2(Ab4 / Gs4)
print(f"異名同音のズレ: {round(diff_cents,3)} Cents\n")
# ==============================
GE_ratio = Eb4 / (Gs4/2)
perfect_fifth = 3/2
print("【ウルフの五度 (G# - E♭)】")
print(f"G♯3からE♭4への実際の比率: {GE_ratio:.4f} → 純正完全五度よりだいぶ広い")
diff_cents = 1200 * math.log2(GE_ratio / perfect_fifth)
print(f"純正完全五度(3/2)とのズレ: {+round(diff_cents,3)} Cents\n")
print("【通常の五度 (C - Gなど)】")
CG_ratio = G4 / C4
print(f"C4からG4への実際の比率: {CG_ratio:.4f} → 純正完全五度より若干狭い")
diff_cents = 1200 * math.log2(CG_ratio / perfect_fifth) # C4-G4は狭いのでマイナスになるよう修正
print(f"純正完全五度(3/2)とのズレ: {round(diff_cents,3)} Cents → ピタゴラス音律のウルフの三度よりだいぶマシ!\n")
音名 | 周波数 (Hz) | セント
-------------------------
C4 | 263.181 | 0.0
C#4 | 275.000 | 76.0
D4 | 294.246 | 193.2
E♭4 | 314.838 | 310.3
E4 | 328.977 | 386.3
F4 | 352.000 | 503.4
F#4 | 367.807 | 579.5
G4 | 393.548 | 696.6
G#4 | 411.221 | 772.6
A♭4 | 421.090 | 813.7
A4 | 440.000 | 889.7
B♭4 | 470.793 | 1006.8
B4 | 491.935 | 1082.9
C5 | 526.363 | 1200.0
【中全音律では平均律と違い異名同音の周波数が異なる】
A♭4:421.09 ≠ G♯4:411.22
異名同音のズレ: 41.059 Cents
【ウルフの五度 (G# - E♭)】
G♯3からE♭4への実際の比率: 1.5312 → 純正完全五度よりだいぶ広い
純正完全五度(3/2)とのズレ: 35.682 Cents
【通常の五度 (C - Gなど)】
C4からG4への実際の比率: 1.4953 → 純正完全五度より若干狭い
純正完全五度(3/2)とのズレ: -5.377 Cents → ピタゴラス音律のウルフの三度よりだいぶマシ!
以下の表から異名同音のズレさえ踏まない調であれば,純正な響きから少しのズレで綺麗に響かせることができます.
完全に純正な響きは減ってしまったとは言え,FメジャーやAメジャーへの転調で三和音の響きが崩壊してしまった,純正律と比べると固定ピッチの楽器でもある程度の転調ができるようになっています.
【関連(外部サイト)】調律について - jizai.org
中全音律のウルフの五度はこちらのサイトで聞くことができます.
# =========================================================
# 音名と周波数
# =========================================================
# 12鍵盤のラベル。便宜上シャープ表記とする。
note_names = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]
# ※ D# の鍵盤には Eb4 が、A# の鍵盤には Bb4 が繋がっている!
freqs = [
C4, Cs4, D4, Eb4,
E4, F4, Fs4, G4,
Gs4, A4, Bb4, B4
]
# =========================================================
# 純正比率
# =========================================================
pure_M3_cents = 1200 * math.log2(5/4)
pure_m3_cents = 1200 * math.log2(6/5)
pure_p5_cents = 1200 * math.log2(3/2)
# =========================================================
# 理論的表記(中全音律特化版)
# =========================================================
# 中全音律の鍵盤の実体は E♭ と B♭ なので、D# として無理やり鳴らす時は Eb* と代用警告を出す
THEORETICAL_NAMES = {
"C": {
"D#": "Eb*",
"A#": "Bb*"
},
"G": {
"D#": "Eb*",
"A#": "Bb*"
},
"F": {
"D#": "Eb*"
},
"A": {
"D#": "Eb*",
"A#": "Bb*"
},
"B": {
"D#": "Eb*", # Bコードの3度。本来D#だが実体はE♭(ウルフの3度)!激しい濁りの原因。
"A#": "Bb*"
}
}
def theoretical_name(scale_key, raw_name):
mapping = THEORETICAL_NAMES.get(scale_key, {})
return mapping.get(raw_name, raw_name)
# =========================================================
# コード解析関数
# =========================================================
def analyze_chords(scale_key, scale_name, indices, major_roots, dim_roots):
print(f"【 {scale_name} のダイアトニックコード 】")
print(f"{'和音':<8} | {'3度':<6} | {'3度差(Cents)':<16} | {'5度':<6} | {'5度差(Cents)'}")
print("-" * 75)
for i in indices:
root_raw = note_names[i]
root_name = theoretical_name(scale_key, root_raw)
root_freq = freqs[i]
is_major = root_raw in major_roots
# --------------------------
# 3度
# --------------------------
third_steps = 4 if is_major else 3
pure_3rd = pure_M3_cents if is_major else pure_m3_cents
idx_3 = (i + third_steps) % 12
raw_3 = note_names[idx_3]
name_3 = theoretical_name(scale_key, raw_3)
freq_3 = freqs[idx_3]
if idx_3 < i:
freq_3 *= 2
diff_3 = (1200 * math.log2(freq_3 / root_freq)) - pure_3rd
# --------------------------
# 5度
# --------------------------
fifth_steps = 6 if root_raw in dim_roots else 7
idx_5 = (i + fifth_steps) % 12
raw_5 = note_names[idx_5]
name_5 = theoretical_name(scale_key, raw_5)
freq_5 = freqs[idx_5]
if idx_5 < i:
freq_5 *= 2
diff_5 = (1200 * math.log2(freq_5 / root_freq)) - pure_p5_cents
# --------------------------
# 表示整形
# --------------------------
diff_3_str = f"{diff_3:+.3f}" if abs(diff_3) > 0.001 else " 0.000"
diff_5_str = f"{diff_5:+.3f}" if abs(diff_5) > 0.001 else " 0.000"
if root_raw in dim_roots:
chord_name = root_name + "dim"
diff_5_str = "N/A"
else:
chord_name = root_name if is_major else root_name + "m"
print(
f"{chord_name:<8} | {name_3:<6} | {diff_3_str:>16} | {name_5:<6} | {diff_5_str:>14}"
)
print()
# =========================================================
# 各調設定
# =========================================================
c_major_indices = [0, 2, 4, 5, 7, 9, 11]
c_major_roots = ["C", "F", "G"]
c_dim_roots = ["B"]
g_major_indices = [7, 9, 11, 0, 2, 4, 6]
g_major_roots = ["G", "C", "D"]
g_dim_roots = ["F#"]
f_major_indices = [5, 7, 9, 10, 0, 2, 4]
f_major_roots = ["F", "A#", "C"]
f_dim_roots = ["E"]
a_major_indices = [9, 11, 1, 2, 4, 6, 8]
a_major_roots = ["A", "D", "E"]
a_dim_roots = ["G#"]
# Cメジャー用に設計した中全音律で破綻する調
b_major_indices = [11, 1, 3, 4, 6, 8, 10]
b_major_roots = ["B", "E", "F#"]
b_dim_roots = ["A#"]
# =========================================================
# 実行
# =========================================================
analyze_chords("C", "1. Cメジャー (比較元)", c_major_indices, c_major_roots, c_dim_roots)
analyze_chords("G", "2. Gメジャー (属調)", g_major_indices, g_major_roots, g_dim_roots)
analyze_chords("F", "3. Fメジャー (下属調)", f_major_indices, f_major_roots, f_dim_roots)
analyze_chords("A", "4. Aメジャー (第3度近親調)", a_major_indices, a_major_roots, a_dim_roots)
# 破綻を体験 異名同音の代用が頻繁に起こる
analyze_chords("B", "5. Bメジャー (遠隔調・ウルフが発生し破綻する)", b_major_indices, b_major_roots, b_dim_roots)
【 1. Cメジャー (比較元) のダイアトニックコード 】
和音 | 3度 | 3度差(Cents) | 5度 | 5度差(Cents)
---------------------------------------------------------------------------
C | E | 0.000 | G | -5.377
Dm | F | -5.377 | A | -5.377
Em | G | -5.377 | B | -5.377
F | A | 0.000 | C | -5.377
G | B | 0.000 | D | -5.377
Am | C | -5.377 | E | -5.377
Bdim | D | -5.377 | F | N/A
【 2. Gメジャー (属調) のダイアトニックコード 】
和音 | 3度 | 3度差(Cents) | 5度 | 5度差(Cents)
---------------------------------------------------------------------------
G | B | 0.000 | D | -5.377
Am | C | -5.377 | E | -5.377
Bm | D | -5.377 | F# | -5.377
C | E | 0.000 | G | -5.377
D | F# | 0.000 | A | -5.377
Em | G | -5.377 | B | -5.377
F#dim | A | -5.377 | C | N/A
【 3. Fメジャー (下属調) のダイアトニックコード 】
和音 | 3度 | 3度差(Cents) | 5度 | 5度差(Cents)
---------------------------------------------------------------------------
F | A | 0.000 | C | -5.377
Gm | A# | -5.377 | D | -5.377
Am | C | -5.377 | E | -5.377
A# | D | 0.000 | F | -5.377
C | E | 0.000 | G | -5.377
Dm | F | -5.377 | A | -5.377
Edim | G | -5.377 | A# | N/A
【 4. Aメジャー (第3度近親調) のダイアトニックコード 】
和音 | 3度 | 3度差(Cents) | 5度 | 5度差(Cents)
---------------------------------------------------------------------------
A | C# | 0.000 | E | -5.377
Bm | D | -5.377 | F# | -5.377
C#m | E | -5.377 | G# | -5.377
D | F# | 0.000 | A | -5.377
E | G# | 0.000 | B | -5.377
F#m | A | -5.377 | C# | -5.377
G#dim | B | -5.377 | D | N/A
【 5. Bメジャー (遠隔調・ウルフが発生し破綻する) のダイアトニックコード 】
和音 | 3度 | 3度差(Cents) | 5度 | 5度差(Cents)
---------------------------------------------------------------------------
B | Eb* | +41.059 | F# | -5.377
C#m | E | -5.377 | G# | -5.377
Eb*m | F# | -46.435 | Bb* | -5.377
E | G# | 0.000 | B | -5.377
F# | Bb* | +41.059 | C# | -5.377
G#m | B | -5.377 | Eb* | +35.682
Bb*dim | C# | -46.435 | E | N/A
以下の図は今回計算した中全音律と前回計算した純正律の音をCを基準としたセント換算して数直線にしたものです.
純正律(Just Intonation)では全音(半音2つ分)の幅が203セントと182セントの2種類あります. ※1
これをそれぞれ大全音と小全音と呼びます.
対して,中全音律(Meantone)ではC♯-E♭のウルフが発生する場所を除いてすべてが193セントで統一されています.※2
大全音と小全音の中間の全音の幅を中全音と呼び,この幅で統一された音律として中全音律と名付けられています.
※1 全音上の求め方に五度を2回積み上げて求める方法((3/2)*(3/2)÷2 = 9/8) と 五度下げて→三度上げて→五度下げる方法((4/3)*(5/4)*(2/3) = 10/9)があることで全音の幅が異なってしまう.
※2 1200*log2(9/8) ≒ 203, 1200*log2(10/9) ≒ 182, 1200*log2(((10/9)+(9/8))/2) ≒ 193 と中全音はちょうど小全音と大全音の間の幅になっている.
実際に演奏された曲を聞いてみたい場合はこちらのサイトがオススメです.
【関連(外部サイト)】聴き比べ:古典音律(ピタゴラス音律、純正律、中全音律、ウェル・テンペラメント)と平均律
【参考(外部サイト)】中全音律 - Wikipedia