모든 프로젝트

앱, 음악 이론, 최적화

Progression Lab

  • 직접 라벨링한 세트에서 조성 판별 47/52

긴장도를 고려하는 코드 진행 분석기이자 리하모니제이션 도구, 기타 보이싱 최적화기입니다. 제 밴드의 곡 작업을 염두에 두고 만들었습니다. 모든 기능이 브라우저에서 돌아가며, 서버도 모델 API도 쓰지 않습니다.

GitHub 코드: hyh4867/progression-lab ↗

직접 해 보기

데모는 앱의 원래 언어인 영어로 실행됩니다.

Chords separated by spaces; | marks bars (chords in a bar share its four beats); % repeats. Slash chords like C/E work. Or pick a named progression further down.

Detected key

C major

Confidence 86% (relative score, not a probability) · best correlation r = 0.94 · runner-up A minor (0.85)

Ambiguous: A minor (relative key) fits almost as well. Choose a key above if you hear it differently.

Harmonic analysis

  • T tonic
  • PD predominant
  • D dominant
  • PASS passing
Chome key throughout
CGDAEBF#DbAbEbBbFEmBmF#mDbmAbmEbmBbmFmCmGmDmB°F#°Db°Ab°Eb°Bb°F°C°G°D°A°E°Chord 1: C (I), in the key window1Chord 2: G (V), in the key window2Chord 3: Am (vi), in the key window3Chord 4: F (IV), in the key window4

Circle of fifths

1 of 3 root moves are rising fifths.

    Hover, tap or step through the chords to follow the path.

    Shaded wedge: the C key window (IV–I–V); the ringed slot is the tonic.

    Outer ring: major chords · middle: minor (under the relative major) · inner: diminished

    falling fifthrising fifthrelative major/minor switchsecondthirdsemitonetritone (through the centre)
    1. 1 → 2: C to G, rising fifth
    2. 2 → 3: G to Am, second
    3. 3 → 4: Am to F, third

    Tap a chord for its explanation (* = function inferred from the root degree). Tap a device below the chords to highlight its span. The lock keeps a chord fixed when reharmonising.

    • deceptive at chord 3: Deceptive cadence V–vi: V avoids the tonic.

    Tension curve

    Solid: tension of your progression (simplified Lerdahl Tonal Pitch Space distance from the tonic, plus movement and added-tone dissonance). Dashed: the target. Draw on the chart or drag a point; focused points respond to the arrow keys.

    Tension curve: current progression (solid) and target (dashed). Drag or use the arrow keys on a point to change the target.06121824I1V2vi3IV4

    Suggestions

    Set a target curve, then press Reharmonise. The search tries named substitution rules and returns the five best alternatives, each no farther from the target than your original.

    Guitar voicings

    Transpose

    One voicing per chord, chosen by dynamic programming (Viterbi) to minimise hand movement, voice-leading distance and fingering difficulty. Standard tuning; frets 0–15; 4-fret stretch.

    ×
    C
    G
    ×
    Am
    ×
    F
    Text tab
      C  G  Am  F  
    e|0--3--0---x--|
    B|1--0--1---1--|
    G|0--0--2---2--|
    D|2--0--2---3--|
    A|3--2--0---0--|
    E|x--3--x---1--|

    Named progressions

    35 progressions · song examples verified against web sources

    I–V–vi–IV

    basic

    Pop/Rock · Axis progression, pop-punk progression

    I – V – vi – IV

    C G Am F

    All four chords are diatonic and share tones pairwise, so the loop moves smoothly; V→vi is a built-in deceptive move that keeps it circling.

    • Heard in: Let It Be — The Beatles (verse)
    • Heard in: With or Without You — U2 (throughout, other key)

    I–vi–IV–V

    basic

    Pop/Rock · '50s progression, doo-wop changes

    I – vi – IV – V

    C Am F G

    Tonic, its relative minor, a predominant and the dominant: one full functional cycle (T–T–PD–D) that ends on V and pulls straight back to I.

    • Heard in: Stand by Me — Ben E. King (main progression, other key)
    • Heard in: Every Breath You Take — The Police (main progression, other key)

    Canon progression

    basic

    Classical · Pachelbel progression

    I – V – vi – iii – IV – I – IV – V

    D A Bm F#m G D G A

    A descending bass (D–C#–B–A–G–F#–G–A) under chords a fourth apart; each chord shares a tone with the next, so it can repeat for ever.

    • Heard in: Canon in D — Johann Pachelbel (throughout (ground bass))
    • Heard in: Memories — Maroon 5 (throughout, other key)

    ii–V–I

    intermediate

    Jazz · two-five-one

    ii7 – V7 – Imaj7

    Dm7 G7 Cmaj7

    Predominant → dominant → tonic with roots falling by fifths; the 7ths resolve down by step into the next chord's 3rd.

    • Heard in: Autumn Leaves — Joseph Kosma (jazz standard) (throughout, other key)

    12-bar blues

    basic

    Blues · blues changes

    I7 – IV7 – I7 – I7 – IV7 – IV7 – I7 – I7 – V7 – IV7 – I7 – V7

    A7 | D7 | A7 | A7 | D7 | D7 | A7 | A7 | E7 | D7 | A7 | E7

    Three dominant-seventh chords in a fixed 12-bar frame; the b7s are blues colour rather than tensions that must resolve, and bar 12's V7 turns the form around.

    • Heard in: Johnny B. Goode — Chuck Berry (verse, other key)
    • Heard in: Hound Dog — Big Mama Thornton / Elvis Presley (throughout, other key)

    Andalusian cadence

    basic

    Pop/Rock · i–bVII–bVI–V

    i – VII – VI – V

    Am | G | F | E

    Four chords step down the minor scale to a major V, whose raised leading tone makes the loop sound like a half cadence (Phrygian colour).

    • Heard in: Hit the Road Jack — Ray Charles (throughout, other key)
    • Heard in: Runaway — Del Shannon (verse, other key)

    Mixolydian I–bVII–IV

    intermediate

    Modal · Mixolydian vamp

    I – bVII – IV – I

    D C G D

    bVII replaces V, so the loop never uses the leading tone; IV and bVII are both a whole step from their neighbours, giving a relaxed rock sound.

    • Heard in: Sweet Child o' Mine — Guns N' Roses (verse)
    • Heard in: Hey Jude — The Beatles (coda, other key)

    bVI–bVII–I

    intermediate

    Film/Game · Mario cadence, Aeolian cadence

    I – bVI – bVII – I

    C Ab Bb C

    Two major chords borrowed from the parallel minor rise by whole steps into the tonic: a triumphant cadence with no V chord.

    • Heard in: Super Mario Bros. (level-clear fanfare) — Koji Kondo (fanfare)
    • Heard in: Lady Madonna — The Beatles (intro, other key)

    질문

    작고 설명 가능한 음악 이론 모형이 밴드가 더 나은 코드 진행을 찾도록 돕고, 그 진행이 왜 통하는지 보여 줄 수 있을까요?

    만든 것

    의존성 없는 TypeScript 엔진이 코드 기호(7화음, 텐션, 변화음, sus 코드, 슬래시 베이스)를 읽고 조성을 찾습니다. 음 길이로 가중한 피치 클래스 히스토그램을 Krumhansl–Kessler 조성 프로파일과 상관 비교하는 방식입니다.

    모든 코드에 로마 숫자와 기능 하나(토닉, 프리도미넌트, 도미넌트, 경과)를 붙입니다. 어떤 화성 장치로도 설명되지 않는 코드는 근음의 음도로 기능을 추정하고 '추정'으로 표시합니다. 분석기는 세컨더리 도미넌트, 증6화음, 나폴리 화음, 공통음·경과 감화음, 반음계적 3도 관계 화음, 얼터드 도미넌트, 모달 인터체인지(빌려 온 선법의 이름까지)를 구분합니다. 증3화음과 감7화음은 해결되는 방향으로 읽습니다. 코드마다 한두 문장의 설명이 붙습니다.

    여러 코드에 걸친 페달 포인트, 라인 클리셰, 라멘트 베이스, 믹솔리디안·도리안 뱀프, 콜트레인 사이클도 표시합니다. 동적 계획법으로 다듬은 슬라이딩 윈도 조성 추적기가 전조와 짧은 토니시제이션을 구분하고 피벗 코드를 찾습니다.

    5도권 보기는 진행을 세 개의 고리(장조, 단조, 감화음) 위의 경로로 그리고, 조성의 온음계 범위를 음영으로 표시하며, 근음이 움직일 때마다 색과 선 모양을 달리합니다. 하행 5도 연쇄, 트라이톤 대리, 콜트레인 삼각형이 한눈에 보입니다.

    Lerdahl의 Tonal Pitch Space를 단순화한 모형으로 진행을 긴장도 곡선으로 바꿉니다. 목표 곡선을 그리면 빔 서치가 대안을 최대 다섯 개까지 돌려주고, 바뀐 코드마다 쉬운 말로 이유를 붙입니다. 이름 붙인 대리 규칙 일곱 개와 선택형 고급 규칙 네 개(증6화음 접근, 나폴리 접근, 백도어 ii–V, 반음계적 3도 대리)를 씁니다.

    액시스 진행부터 콜트레인 체인지까지 이름 붙은 진행 35개를 담은 라이브러리를 원하는 조로 분석기에 불러올 수 있습니다. 진행마다 잘 알려진 곡을 한두 개, 제목과 아티스트만 적었고, 웹 출처에서 그 진행을 쓴다고 확인된 곡만 올렸습니다.

    보이싱 생성기가 표준 튜닝에서 연주할 수 있는 운지를 모두 찾고, 비터비 동적 계획법이 손 이동, 성부 진행, 운지 난이도를 따져 코드마다 하나를 고릅니다. Karplus–Strong 발현 현 합성기가 결과를 스트럼으로 들려주고, 카포 도우미와 텍스트 타브로 합주 때 바로 쓸 수 있습니다.

    평가 방법

    조성 판별은 알고리즘을 돌리기 전에 제가 직접 조성을 라벨링한 진행 52개로 채점합니다. 그중 9개는 일부러 넣은 어려운 사례(모달 뱀프, 관계조 반복, 블루스 도미넌트, 파워 코드)이며 핵심 수치에 그대로 포함됩니다. 프로파일 가중치는 미리 고정했고, 이 세트로 조정하지 않았습니다.

    고급 화성은 직접 라벨링한 두 번째 세트, 진행 44개로 채점합니다. 기대하는 화성 장치, 기능, 구간, 조성 영역을 분석기를 만들기 전에 적어 커밋해 두었습니다. 모든 기대가 맞아야 그 진행을 일치로 셉니다.

    속성 테스트는 라벨링한 모든 진행을 12개 조로 옮겨, 조 위치, 로마 숫자, 기능, 화성 장치, 종지, 긴장도 값이 똑같은지 확인합니다. 보이싱 최적화기는 전수 탐색과 대조하고, 리하모니제이션은 목표 곡선과 고정 조합 260가지에서 실행합니다.

    라이브러리의 곡 예시는 웹 출처(먼저 위키백과 문서, 그다음 레슨과 분석 글)와 하나씩 대조했고, 남긴 예시마다 출처를 저장했습니다.

    주요 결과

    판별한 조성이 제 라벨과 52개 중 47개(90.4%)에서 일치했고, 52개 모두에서 정답이 상위 두 후보 안에 있었습니다(MIREX 가중 점수 0.919). 틀린 다섯 개 중 세 개는 도구가 스스로 모호하다고 표시했습니다.

    고급 세트에서는 44개 진행 모두가 모든 기대와 일치했습니다(개별 검사 103개 중 103개). 블라인드 점수는 아닙니다. 구현 중에 일반적인 수정 하나(조성 추적을 원조에서 시작)를 했고, 그 수정으로 한 항목도 함께 고쳐졌습니다.

    후보 곡 예시 56개 중 55개가 웹 출처로 확인되었고, 해당 장치를 보여 주는 출처가 없던 1개는 뺐습니다. 라이브러리에는 진행마다 가장 잘 알려진 곡 한두 개만 보여 줍니다(모두 38곡).

    동적 계획법 보이싱 경로는 작은 사례 52개 중 52개에서 전수 탐색의 최적해와 같았습니다.

    리하모니제이션 260회 실행에서 고정한 코드는 한 번도 바뀌지 않았고, 제안된 코드는 모두 같은 음으로 다시 해석되었으며, 원래 진행보다 목표 곡선에서 더 멀어진 제안은 없었습니다. 사이트 저장소에서 자동 테스트 206개가 통과하며, 공개 저장소는 이 페이지의 문구를 확인하는 다섯 개를 뺀 201개를 실행합니다.

    제 역할과 에이전트 활용

    음악 이론 모형, 라벨링 세트와 기대 답안, 대리 규칙, 그리고 무엇을 공정한 시험으로 볼지를 제가 정했습니다.

    Claude가 엔진, 테스트, 라이브러리 조사, 인터페이스 구현을 범위가 정해진 단계로 도왔습니다. 결과물을 검토했고 이 페이지의 주장은 제가 책임집니다. 위의 모든 수치는 테스트가 만들어 낸 것입니다.

    한계

    서양 조성 화성과 재즈 화성만 다룹니다. 멜로디, 가사, 오디오를 읽지 않으므로, 부르는 선율에 코드가 맞는지는 판단할 수 없습니다.

    라벨은 규칙 기반입니다. 한 코드에 여러 해석이 가능할 때(증6화음과 트라이톤 대리, 차용 화음으로서의 bVI와 반음계적 3도 관계 화음) 도구는 고정 규칙으로 하나를 고르고 나머지를 함께 적습니다. '추정'으로 표시한 기능은 근음 음도로 짐작한 것입니다.

    긴장도 모형은 단순화한 Tonal Pitch Space입니다. 연장 구조 트리가 없고, 부가음 불협화에는 경험적 가중치를 쓰며, 반음계 화음은 원조의 변형으로 다룹니다. 곡선은 참고용이며, 청자가 느끼는 긴장도를 잰 값이 아닙니다.

    제안은 고정된 대리 규칙을 점수로 정렬한 결과입니다. 취향을 반영하지 않고, 장르를 알지 못하며, 점수가 낮다고 더 좋게 들린다는 보장은 없습니다.

    두 라벨링 세트 모두 제가 고르고 라벨링했으므로, 그 점수가 실제 레퍼토리에서의 성능을 말해 주지는 않습니다. 조성 신뢰도는 상대 점수일 뿐 보정된 확률이 아니고, 운지 난이도는 직접 정한 경험칙입니다.

    곡 예시는 웹 출처로 확인했지만 빠짐없지는 않습니다. 실린 곡이 그 진행을 한 부분에서만, 혹은 다른 조로 쓸 수도 있습니다.

    근거와 재현성

    엔진, 테스트, 문서는 공개 저장소에 있습니다(src/, docs/progression_lab.md, docs/tension_model.md). 라벨링 세트는 src/corpus.ts와 src/advancedCorpus.ts에, 라이브러리와 출처는 src/library.ts에 있습니다. 코드 진행만 담았고, 곡은 제목과 아티스트로만 언급하며 멜로디나 가사는 싣지 않았습니다.

    Krumhansl, Cognitive Foundations of Musical Pitch (1990) ↗

    Lerdahl, Tonal Pitch Space (2001) ↗

    Karplus & Strong, Digital synthesis of plucked-string and drum timbres (1983) ↗

    모든 프로젝트로 돌아가기