Python으로 MIDI 파일 생성하기 – Pyknon 실험 기록

Python으로 Midi를 다루고 싶다 - Pyknon으로 MIDI 파일 생성

Python으로 MIDI 파일 생성하기 – Pyknon 실험 기록

Python으로 MIDI 파일을 직접 생성할 수 있을까?
예전부터 궁금했던 주제였고, 여러 Python 음악 라이브러리를 비교해 본 결과 현재 기준으로 실제로 정상 동작하는 프로젝트를 하나 찾았다. 바로 Pyknon이다.

이 글은 단순 라이브러리 소개가 아니라, 직접 실행 → MIDI 생성 → 재생까지 검증한 실험 기록이다.

Pyknon이란? (Python MIDI 생성 라이브러리)

Pyknon은 Python에서 음표(Note) 시퀀스를 정의하고 이를 MIDI 파일로 출력할 수 있게 해주는 라이브러리다.

  • 악보를 직접 다루는 느낌에 가깝고
  • 문자열 기반으로 음표를 정의할 수 있으며
  • 최소한의 코드로 MIDI 파일을 생성할 수 있다

공식 문서:
https://kroger.github.io/pyknon/

왜 Pyknon을 선택했는가?

Python으로 MIDI를 다루는 라이브러리로는 PySynth도 존재한다. 하지만 직접 테스트해 본 결과 다음과 같은 차이가 있었다.

PySynth의 한계

  • 일부 환경에서 정상 동작하지 않음
  • 최근 유지 관리가 거의 이루어지지 않는 느낌

Pyknon의 장점

  • 코드 구조가 단순하고 직관적
  • MIDI 파일이 실제로 정상 생성됨
  • 추가 실험(작곡, 자동 생성)으로 확장하기 쉬움

👉 결론적으로 “지금 시점에서 실제로 쓸 수 있는 Python MIDI 라이브러리”라고 판단했다.

Pyknon으로 MIDI 파일 생성하기 (기본 예제)

아래는 Pyknon을 사용해 가장 단순한 MIDI 파일을 생성하는 예제 코드다.

from pyknon.genmidi import Midi
from pyknon.music import NoteSeq

# 음표 시퀀스 정의
notes1 = NoteSeq("D4 F#4 A4 Bb4")

# MIDI 객체 생성 (트랙 수 1, 템포 90)
midi = Midi(1, tempo=90)

# 음표를 트랙 0에 추가
midi.seq_notes(notes1, track=0)

# 파일로 저장
midi.write("demo.mid")

코드를 실행하면 demo.mid 파일이 생성된다.

Python으로 생성한 MIDI 파일은 실제로 재생될까?

✔️ 결론부터 말하면 정상적으로 재생된다.

  • Windows: 기본 미디어 플레이어
  • macOS: GarageBand, QuickTime
  • DAW: FL Studio, Ableton Live 등

즉, Python 코드만으로 MIDI 작곡의 출발점을 만들 수 있다.

Python 코드로 MIDI 파일 직접 재생하기

생성한 MIDI 파일을 Python 코드로 바로 재생하고 싶다면 pygame을 사용할 수 있다.

import pygame
import time

pygame.mixer.init()
pygame.mixer.music.load("demo.mid")
pygame.mixer.music.play()

while pygame.mixer.music.get_busy():
    time.sleep(0.1)

참고 사항

  • 운영체제 및 사운드 드라이버에 따라 MIDI 음색은 다르게 들릴 수 있다
  • WAV / MP3 음원으로 사용하려면 MIDI 변환 과정이 필요하다

Pyknon을 사용해 보며 느낀 점

  • Pyknon은 완성형 작곡 툴이라기보다는 실험용 음악 엔진에 가깝다
  • 하지만 다음과 같은 용도로는 충분한 가능성이 있다
  • 랜덤 멜로디 자동 생성
  • 규칙 기반 작곡 로직 실험
  • 게임 BGM 프로토타입 제작
  • AI 음악 생성 파이프라인의 중간 단계

다음으로 확장해볼 주제

이번 글은 시작에 불과하다. 이후에는 아래 주제들을 하나씩 정리해볼 예정이다.

  • Python으로 랜덤 멜로디 자동 생성하기
  • 장조 / 단조 규칙을 적용한 MIDI 작곡
  • MIDI → WAV / MP3 변환 (실제 음원 생성)
  • 게임·서비스에 바로 적용 가능한 구조 설계

👉 이 글은 Python 음악 실험 시리즈의 첫 번째 기록이다.

마무리

Python으로 음악을 다룬다는 것은 생각보다 훨씬 재미있다.
특히 “코드 → 소리”로 즉시 결과가 나오는 경험은 만족도가 높다.

다음 글에서는 사람이 개입하지 않아도 멜로디를 만들어내는 구조를 본격적으로 실험해볼 예정이다.

다음 글 예고

Python으로 랜덤 멜로디 자동 생성하기
(완전 랜덤 vs 규칙 기반 비교)

댓글