본문 바로가기

알고리즘 작곡

알고리즘 작곡이란? 코드로 멜로디를 만드는 원리

악보와 멜로디 그래프로 살펴보는 알고리즘 작곡

핵심 요약

  • 알고리즘 작곡은 사람이 음을 하나씩 고르는 대신 음을 고르는 규칙을 설계해 음악을 만드는 방식입니다.
  • 대표 기법은 규칙 기반, 확률 모델(마르코프 체인), 진화 연산(유전 알고리즘) 세 가지로 정리됩니다.
  • 개발자가 알아야 할 음악 이론은 생각보다 적습니다. 반음 12개, 음계는 간격 배열, 음높이는 정수면 시작할 수 있습니다.
  • AI 작곡과는 목적이 다릅니다. 알고리즘 작곡은 규칙이 명시적이고 결과를 설명할 수 있습니다.

“코드가 멜로디를 만든다”는 말은 마법처럼 들리지만 실제로는 매우 구체적인 작업입니다. 음높이를 숫자로 바꾸고, 다음 숫자를 고르는 규칙을 정하고, 그 결과를 소리로 내보내는 것이 전부입니다. 이 글은 그 세 단계를 원리부터 코드 구조까지 풀어서 설명합니다.

알고리즘 작곡의 개념과 배경

알고리즘 작곡은 정해진 절차에 따라 음악의 요소를 생성하는 작곡 방법입니다. 컴퓨터가 등장하기 전에도 이런 발상은 존재했습니다. 18세기 유럽에서 유행한 ‘음악 주사위 놀이’는 미리 작성된 마디들을 주사위 결과에 따라 이어 붙여 곡을 만드는 방식이었는데, 이는 규칙과 무작위성으로 곡을 조립한다는 점에서 오늘날의 접근과 본질적으로 같습니다.

컴퓨터를 이용한 본격적인 시도는 1950년대부터 이어져 왔고, 이후 확률론·수학적 모델을 음악 구조에 적용하는 작업이 현대 음악 연구의 한 갈래로 자리 잡았습니다. 오늘날 개발자에게 이 주제가 흥미로운 이유는 도구가 접근 가능해졌기 때문입니다. 파이썬 몇 줄이면 음높이 배열을 만들어 MIDI 파일로 저장할 수 있습니다.

중요한 관점 하나를 짚고 넘어가겠습니다. 알고리즘 작곡의 목표는 “사람보다 좋은 곡”이 아니라 “사람이 직접 쓰기 어려운 종류의 구조”를 만드는 데 있는 경우가 많습니다. 수백 마디에 걸친 점진적 변화, 확률적으로 매번 달라지는 연주, 데이터에 반응하는 음악 같은 것들입니다. 목적을 이렇게 잡으면 접근 방식이 훨씬 명확해집니다.

대표적인 세 가지 기법

알고리즘 작곡 기법 비교
기법 작동 원리 장점 한계
규칙 기반 화성·음정 규칙을 조건문으로 명시 결과를 예측·설명하기 쉬움 규칙이 많아질수록 관리가 어려움
마르코프 체인 직전 음 기준으로 다음 음의 확률 결정 기존 곡의 분위기를 통계로 학습 장기적 구조·형식을 만들지 못함
유전 알고리즘 여러 후보를 교배·변이시키며 평가 함수로 선별 탐색 범위가 넓음 ‘좋은 음악’의 평가 함수 설계가 매우 어려움
L-시스템·세포자동자 재귀 규칙으로 구조를 성장시킴 자기유사적 전개에 적합 음악적 의도를 반영하기 까다로움

실무에서는 이들을 섞어 씁니다. 예를 들어 마르코프 체인으로 후보 멜로디를 생성한 뒤, 규칙 기반 필터로 음역을 벗어나거나 도약이 지나친 결과를 걸러 내는 구성이 흔합니다. 확률 모델은 그럴듯한 흐름을 만들고, 규칙은 최소 품질을 보장하는 역할을 나눠 맡습니다.

마르코프 체인은 개념이 단순해 첫 구현으로 적합합니다. 기존 멜로디에서 “도 다음에 무엇이 왔는가”를 전부 세어 확률표를 만들고, 그 표에 따라 다음 음을 뽑으면 됩니다. 상태를 직전 한 음이 아니라 두세 음으로 늘리면(고차 마르코프) 결과가 원곡에 더 가까워지지만, 그만큼 새로움은 줄어듭니다. 이 균형 조절이 작업의 핵심입니다.

개발자가 알아야 할 최소한의 음악 이론

필요한 지식은 아래 정도로 압축됩니다.

  • 음높이는 정수다 — MIDI 노트 번호에서 60이 가운데 도이고, 1이 반음, 12가 한 옥타브입니다. 음정 계산은 곧 덧셈입니다.
  • 음계는 간격 배열이다 — 장음계는 시작 음 기준 [0, 2, 4, 5, 7, 9, 11]입니다. 이 배열에서만 음을 고르면 결과가 크게 어긋나지 않습니다.
  • 화음은 음계 배열의 인덱스 건너뛰기다 — 배열에서 한 칸씩 건너뛴 세 음을 모으면 기본 3화음이 됩니다.
  • 시간은 박자로 센다 — BPM은 분당 4분음표 개수입니다. 각 음의 길이를 박 단위 실수로 다루면 계산이 단순해집니다.
  • 세기(velocity)도 값이다 — 강약을 일정하게 두면 기계적으로 들립니다. 약간의 무작위 변동만 넣어도 인상이 달라집니다.

이 다섯 가지만으로도 상당한 결과를 낼 수 있습니다. 화성학 전반을 먼저 공부하려 하면 시작이 한없이 미뤄지므로, 음계 배열 안에서만 고르는 제약을 걸어 두고 바로 구현에 들어가는 편을 권합니다.

노트북과 태블릿으로 알고리즘 음악 코드를 작업하는 개발자
알고리즘 작곡 — 코드로 소리를 다루는 작업 환경

실습 예제 – 멜로디 생성 코드 구조

언어와 무관하게 구조는 대체로 아래와 같습니다.

# 1) 음계 정의 — 사용할 음만 남긴다
scale = [0, 2, 4, 5, 7, 9, 11]
root  = 60                      # 가운데 도

# 2) 전이 규칙 — 다음 음을 고르는 방식
def next_degree(current, rng):
    step = rng.choice([-2, -1, 0, 1, 1, 2])   # 순차 진행에 가중치
    return max(0, min(len(scale) - 1, current + step))

# 3) 시퀀스 생성
degree, notes = 0, []
for _ in range(16):
    degree = next_degree(degree, rng)
    notes.append(root + scale[degree])

# 4) 시간·세기 부여 후 MIDI로 출력

이 네 단계가 뼈대입니다. 눈여겨볼 부분은 후보 리스트에 1이 두 번 들어간 것입니다. 가중치를 이렇게 조절하면 음이 위로 순차 진행할 확률이 높아집니다. 이런 작은 편향이 결과의 성격을 결정하며, 알고리즘 작곡 작업의 상당 부분은 이 편향을 조정하는 일입니다.

출력은 보통 MIDI 파일로 저장하거나, OSC로 실시간 전송해 Sonic Pi 같은 환경에서 즉시 연주합니다. 파일로 남기면 DAW에서 편집할 수 있고, 실시간 전송하면 라이브코딩 세션에 결합할 수 있습니다.

생성 결과가 지루하게 들린다면 규칙을 더 추가하기 전에 제약을 하나 걸어 보시기 바랍니다. 음역을 한 옥타브로 제한하거나, 같은 음을 두 번 연속 금지하는 정도의 단순한 제약이 무작위성을 늘리는 것보다 효과적일 때가 많습니다.

알고리즘 작곡과 AI 작곡의 차이

두 접근의 성격 비교
기준 알고리즘 작곡 AI(학습 기반) 작곡
지식의 출처 사람이 명시한 규칙 학습 데이터에서 추출된 패턴
설명 가능성 높음(코드를 읽으면 이유가 보임) 낮음(모델 내부 파라미터)
제어 파라미터 단위로 정밀 제어 프롬프트·조건부 생성 위주
필요 자원 낮음 모델·연산 자원 필요
권리 관계 비교적 단순 학습 데이터·서비스 약관 확인 필요

둘은 대립 관계가 아닙니다. 학습 모델이 만든 후보를 규칙으로 검증하거나, 규칙으로 만든 뼈대를 모델이 채우는 조합이 실제로 자주 쓰입니다. AI 쪽 접근은 AI 작곡 코딩 실전 가이드에서 별도로 다룹니다.

관련 라이브러리와 도구

  • music21 — MIT에서 개발한 파이썬 라이브러리로, 악보 데이터 분석과 생성 양쪽에 쓰입니다. 음계·화성 처리 기능이 충실합니다.
  • MIDI 유틸리티 — 파이썬에서는 MIDI 파일을 읽고 쓰는 라이브러리가 여럿 있어, 생성 결과를 표준 파일로 남기기 쉽습니다.
  • SuperCollider — 패턴 시스템 자체가 알고리즘적 생성을 염두에 두고 설계되어, 규칙 기반 시퀀싱에 강합니다.
  • 라이브코딩 환경 — Sonic Pi와 TidalCycles 모두 확률·조건 함수를 제공하므로 별도 도구 없이 생성 로직을 넣을 수 있습니다.

어떤 언어를 고를지 고민된다면 언어별 라이브러리 비교를 먼저 확인하시기 바랍니다. 이미 익숙한 언어의 생태계를 쓰는 편이 대체로 가장 빠릅니다.

이 글은 AI(인공지능)의 도움을 받아 작성되었습니다.