1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

丸サ進行と「Just The Two of Us」

1
Posted at

はじめに

■ 丸サ進行と「Just The Two of Us」の関係

  • 「丸の内サディスティック」の4361進行(IVmaj7→III7→VIm7→I7)は、
     もともとGrover Washington Jr. の《Just The Two of Us》(1980年)に端を発する。
  • 同曲はR&B/ジャズ・フュージョン系のコード構造をポップスに定着させた先例。
  • 以降、この進行は「トゥオブアス進行」としてセッション用語化した。
     近年の日本では「丸サ進行」と呼ばれて再流行している。

■ コード理論の骨格(ディグリーネーム)

IVmaj7 → III7 → VIm7 → I7(または Vm7 → I7)

Cメジャーに移調すると:

Fmaj7 → E7 → Am7 → C7(Gm7 / C7)

別名:

4361進行 = 4度 → 3度 → 6度 → 1度

■ 理論構造(機能分析)

コード 機能 説明
IVmaj7 サブドミナント 柔らかい導入。時に一時的トニックとして振る舞う。
III7 セカンダリードミナント(V7/vi) 一時的トニック VIm7 へ進むための導音。
VIm7 トニック代理 終止感を持たず、曖昧な安定。
I7 ドミナントモーションの準備 次のIVmaj7に戻るためのドミナント。

→ 「V7→I」の完全終止(カデンツ)をあえて避けることで、
 調性感を曖昧にし、浮遊感・無限ループ感を生む。


■ 音楽的効果

  • 「終止感がない」= 調性の曖昧さ・永遠性・漂う感覚。
  • ノンダイアトニックコード(III7, I7)によりブルースではなくジャズ的色彩を帯びる。
  • I7の短7度はFキーのドミナントとして機能し、ブルーノート的には響かない。

■ 理論的背景:二重のセカンダリードミナント

  1. E7 → Am7

    • Am7を一時的トニックとする副次ドミナント(V7/vi)。
    • Am7はC6と構成音が同じで、長短どちらにも傾かない曖昧さ。
  2. C7 → Fmaj7

    • Fmaj7を一時的トニックと見立てた副次ドミナント(V7/IV)。
    • Fmaj7に解決するが完全終止には至らず、再び循環へ。

■ モーダル・インターチェンジとの関係

  • トニック以外のスケール(例:平行調・隣接モード)からコードを借用
  • Cメジャー → Fメジャー(またはDマイナー)へ一瞬転調。
  • この柔軟な借用が「ジャジーで漂う響き」を作る。

■ 「Just The Two of Us」の構造と影響

  • 《Just The Two of Us》=ジャズ・R&B・ポップの融合。
  • コード進行は滑らかなベースライン移動:
    F → E → A → C → F ...
  • 本曲の成功により、この進行は世界的標準語法となった。
  • 日本では椎名林檎《丸の内サディスティック》が再文脈化し、
    現代ポップス、ボカロ、シティポップの基礎進行として再認識された。

🎵 MIDI動作と式のしくみ

(1) 音名 → 数値変換

note_to_midi(note) = 12*(octave+1) + note_map[note_name]
  • MIDIでは「C4(中央ド)」が 60
  • 1オクターブ = 12半音。
  • 例えば F3 → 12×(3+1)+5 = 53。

→ この計算で「音高」を整数値で表します。


(2) 時間制御(timeパラメータ)

track.append(Message('note_on', ..., time=0))
track.append(Message('note_off', ..., time=DURATION))
  • note_on:音を出すイベント
  • note_off:音を止めるイベント
  • DURATION:2つの間のディレイ(tick単位)

→ この差が「音の長さ」。
 例:DURATION = 720480tick × 1.5拍 ≒ 約0.75秒(テンポ120のとき)。


(3) 曲の構造

進行:

IVmaj7 → III7 → VIm7 → I7

Cメジャーの場合:

F3 → E3 → A3 → C3

→ 各ベース音が順番に再生されます。
(ここでは和音でなく、各コードの根音を鳴らしている。)


(4) 音声生成と再生

fs = FluidSynth(sf2_path)
fs.midi_to_audio("marunouchi_flexible.mid", "marunouchi_flexible.wav")
Audio("marunouchi_flexible.wav")
  • FluidSynth: MIDIイベントを**サウンドフォント(.sf2)**を使って波形化。
  • /usr/share/sounds/sf2/FluidR3_GM.sf2 はColab標準のGeneral MIDI音源。
  • 出力: marunouchi_flexible.wav

💡MIDI信号の式的モデル(時間関数)

ベース音列 ( b(t) ) は次のように表せます:

b(t) = Σ A_i * sin(2π f_i t) * [u(t - T_i) - u(t - T_i - ΔT)]
  • ( A_i ):音の強さ(velocity)
  • ( f_i ):音高(例:F3 = 174.61 Hz)
  • ( T_i ):開始時刻
  • ( ΔT ):音の長さ(DURATIONに対応)
  • ( u(t) ):ステップ関数(音のON/OFF)

→ MIDIイベントを波形関数に変換した理論式です。


!apt-get install -y fluidsynth -qq
!pip install midi2audio mido matplotlib -q

from midi2audio import FluidSynth
from IPython.display import Audio
from mido import MidiFile, MidiTrack, Message
import matplotlib.pyplot as plt

# -----------------------------
# 設定パラメータ
# -----------------------------
KEY = "C"          # 例: "C", "A", "Bb"
DURATION = 720     # コード1つの長さ(240=短い, 480=標準, 960=長い)
OCTAVE = 3         # ベース音のオクターブ
VELOCITY = 100
sf2_path = "/usr/share/sounds/sf2/FluidR3_GM.sf2"

# -----------------------------
# 音名 → MIDI番号変換
# -----------------------------
note_map = {'C':0,'C#':1,'D':2,'Eb':3,'E':4,'F':5,'F#':6,'G':7,'Ab':8,'A':9,'Bb':10,'B':11}
def note_to_midi(note): return 12*(int(note[-1])+1)+note_map[note[:-1]]

# -----------------------------
# スケールと進行定義(4361)
# -----------------------------
major_scale = {
    "C":["C","D","E","F","G","A","B"],
    "A":["A","B","C#","D","E","F#","G#"],
    "Bb":["Bb","C","D","Eb","F","G","A"],
    "F":["F","G","A","Bb","C","D","E"],
}
deg_to_note = [3, 2, 5, 0]  # 4→3→6→1

scale = major_scale[KEY]
roots = [scale[i] for i in deg_to_note]
print(f"Key = {KEY}, 進行 = {''.join(roots)}")

# -----------------------------
# MIDI作成
# -----------------------------
mid = MidiFile()
track = MidiTrack()
mid.tracks.append(track)

for root in roots:
    n = note_to_midi(root + str(OCTAVE))
    track.append(Message('note_on', note=n, velocity=VELOCITY, time=0))
    track.append(Message('note_off', note=n, velocity=VELOCITY, time=DURATION))

mid.save("marunouchi_flexible.mid")

# -----------------------------
# MIDI → WAV変換と再生
# -----------------------------
fs = FluidSynth(sf2_path)
fs.midi_to_audio("marunouchi_flexible.mid", "marunouchi_flexible.wav")

# -----------------------------
# Matplotlib可視化
# -----------------------------
plt.figure(figsize=(6, 2))
plt.bar(range(len(roots)), [1]*len(roots), color="skyblue", width=0.6)
plt.xticks(range(len(roots)), roots, fontsize=12)
plt.title(f"{KEY} major 4361 progression", fontsize=14)
plt.ylabel("Chord Step (equal length)")
plt.grid(axis='y', linestyle=':')
plt.show()

# -----------------------------
# 再生
# -----------------------------
Audio("marunouchi_flexible.wav")

✅ 機能

  • matplotlib によりコード進行(F → E → A → C)の棒グラフを表示。
  • Audio() によりその進行をColab上で再生。
  • DURATION を変更すると再生テンポもグラフも自動で更新。
    image.png
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?