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 규칙 기반 비교)
댓글
댓글 쓰기