개발자를 위한 음악 라이브러리 총정리
핵심 요약
- 음악 프로그래밍 라이브러리는 실시간 연주용과 배치 생성용으로 성격이 갈립니다. 이 구분이 선택의 첫 기준입니다.
- 이미 쓰는 언어의 생태계를 고르는 편이 대체로 가장 빠릅니다.
- SuperCollider는 여러 도구가 공통으로 의존하는 합성 엔진이라, 어느 길로 가든 한 번은 마주치게 됩니다.
- 브라우저에서 작업한다면 Web Audio 계열이, 데이터 분석·자동 생성이라면 파이썬 계열이 적합합니다.
“음악 라이브러리”를 검색하면 언어별로 결과가 흩어져 나오고, 각각이 무엇을 담당하는지 파악하기까지 시간이 걸립니다. 어떤 것은 소리를 직접 합성하고, 어떤 것은 MIDI 파일만 다루며, 또 어떤 것은 다른 엔진에 명령만 보냅니다. 이 글은 그 역할 구분부터 정리한 뒤 용도별 선택 기준을 제시합니다.
왜 라이브러리 선택이 중요한가
음악 프로그래밍에서는 하나의 라이브러리가 모든 것을 처리하지 않습니다. 작업은 대체로 세 계층으로 나뉩니다. ①무엇을 연주할지 결정하는 계층(패턴·시퀀스 생성), ②그 지시를 전달하는 계층(MIDI·OSC), ③실제 소리를 만드는 계층(합성 엔진)입니다.
선택이 어려운 이유는 라이브러리마다 담당하는 계층이 다르기 때문입니다. 파이썬의 악보 처리 라이브러리는 ①만 담당하므로 그것만으로는 소리가 나지 않습니다. 반대로 SuperCollider는 ③을 담당하며 ①도 자체 언어로 처리할 수 있습니다. 이 구조를 모른 채 도구를 고르면 “설치는 했는데 소리가 안 난다”는 상황에 빠집니다.
따라서 첫 질문은 “어떤 라이브러리가 좋은가”가 아니라 “내가 필요한 계층이 어디인가”여야 합니다. 소리까지 필요하면 합성 계층을 포함한 조합을, 데이터만 필요하면 생성 계층만 있으면 됩니다.
언어별 대표 라이브러리
| 언어 | 대표 도구 | 담당 계층 | 주 용도 |
|---|---|---|---|
| Python | music21, MIDI 처리 라이브러리군, FoxDot | 생성·전달 | 악보 분석, 자동 생성, 데이터 기반 작곡 |
| JavaScript | Tone.js, Web Audio API, Strudel | 생성·합성 | 웹 인터랙티브, 브라우저 라이브코딩 |
| Haskell | TidalCycles | 생성(패턴) | 정교한 리듬 패턴, 라이브 연주 |
| Ruby | Sonic Pi | 생성·합성(통합) | 교육, 입문, 라이브코딩 |
| SuperCollider | sclang / scsynth | 합성·생성 | 신디사이저 설계, 저수준 오디오 제어 |
| Clojure | Overtone | 생성(SuperCollider 제어) | 함수형 스타일의 음악 프로그래밍 |
| C/C++ 계열 | ChucK, Csound | 합성·생성 | 정밀한 타이밍 제어, 연구·실험 |
표에서 눈에 띄는 점은 SuperCollider의 위치입니다. Sonic Pi는 내부적으로 이것을 쓰고, TidalCycles는 SuperDirt를 통해 이것에 의존하며, Overtone과 FoxDot도 이것을 제어합니다. 즉 여러 갈래의 길이 하나의 엔진으로 수렴합니다. 깊이 들어갈 계획이라면 SuperCollider 자체를 한 번은 들여다볼 가치가 있습니다.
웹 쪽은 사정이 다릅니다. 브라우저에 Web Audio API가 표준으로 들어 있어 별도 엔진이 필요 없습니다. Tone.js는 그 위에 신디사이저·시퀀서·이펙트 추상화를 올린 프레임워크이고, Strudel은 패턴 언어를 올린 것입니다. 설치 없이 시작할 수 있다는 점이 이 생태계의 가장 큰 장점입니다.
용도별 선택 기준
가장 실질적인 갈림길은 실시간이냐 배치냐입니다.
| 하고 싶은 일 | 권장 조합 | 이유 |
|---|---|---|
| 지금 소리부터 내기 | Strudel 또는 Sonic Pi | 설치 부담이 가장 작음 |
| 무대 연주 | TidalCycles + SuperDirt | 패턴 변형 표현력이 가장 큼 |
| 곡을 파일로 만들기 | Python(music21 + MIDI 라이브러리) | 생성 결과를 표준 파일로 저장·편집 |
| 웹 서비스에 사운드 넣기 | Tone.js / Web Audio | 브라우저에서 바로 동작, 배포 간단 |
| 직접 음색 설계 | SuperCollider | 합성 단위를 직접 정의 가능 |
| 악보·화성 분석 | music21 | 음악학 연구용으로 설계된 자료구조 |

실전 프로젝트에 적용하는 방법
도구를 정했다면 붙이는 순서가 있습니다. 아래 흐름이 대체로 사고를 줄여 줍니다.
- 가장 작은 소리를 먼저 낸다 — 라이브러리 설치 직후 예제 하나를 그대로 실행해 소리를 확인합니다. 이 확인 전에 코드를 쓰기 시작하면 문제 원인을 좁히기 어려워집니다.
- 데이터 형식을 고정한다 — 음높이·길이·세기를 담는 자료구조를 프로젝트 초반에 정합니다. 나중에 바꾸면 전 구간을 수정해야 합니다.
- 생성과 재생을 분리한다 — 음을 만드는 함수와 소리를 내는 함수를 섞지 않습니다. 분리해 두면 같은 생성 로직을 파일 출력과 실시간 연주 양쪽에 쓸 수 있습니다.
- 중간 결과를 저장한다 — 생성된 시퀀스를 MIDI나 JSON으로 남깁니다. 마음에 든 결과를 다시 만들지 못하는 상황을 막아 줍니다.
- 연동은 표준 규격으로 — 도구 간 연결이 필요하면 MIDI나 OSC를 씁니다. 대부분의 환경이 이 둘을 지원합니다.
여러 라이브러리를 동시에 붙이려다 막히는 경우가 많습니다. 먼저 하나로 끝까지 완성한 뒤 부족한 부분만 다른 도구로 채우는 순서가 훨씬 안전합니다.
장단점 비교
| 도구 | 강점 | 유의할 점 |
|---|---|---|
| Sonic Pi | 일체형 구성, 문서 내장, 교육 활용 | 패턴 표현이 Tidal보다 단순 |
| TidalCycles | 패턴 조합 표현력, 라이브 변형에 최적 | 설치 구성 요소가 많음 |
| Strudel | 설치 불필요, 공유 용이 | 외부 장비 연동이 제한적 |
| Tone.js | 웹 서비스 통합이 자연스러움 | 라이브코딩 전용 기능은 별도 구성 필요 |
| music21 | 악보·화성 분석 기능이 충실 | 소리 출력은 별도 도구 필요 |
| SuperCollider | 가장 낮은 수준까지 제어 | 학습 곡선이 가파름 |
도구별 학습 곡선
각 도구가 요구하는 사전 지식(언어 특성·외부 엔진 이해도)을 기준으로 한 정성 비교입니다.
앞으로 주목할 흐름
최근 몇 년의 방향을 보면 두 가지 흐름이 눈에 띕니다. 하나는 브라우저로의 이동입니다. Web Audio가 성숙하면서 과거에는 네이티브 환경에서만 가능했던 작업이 웹에서 처리되고 있고, 그 결과 협업과 공유의 비용이 크게 낮아졌습니다.
다른 하나는 생성 모델과의 결합입니다. 라이브러리가 직접 모델을 품기보다, 생성된 결과를 받아 편집·연주하는 파이프라인 형태로 연결되는 구성이 늘고 있습니다. 이 방향은 AI 작곡 코딩 가이드에서 자세히 다룹니다.
도구는 계속 바뀌지만 계층 구조는 잘 바뀌지 않습니다. 생성·전달·합성이라는 세 계층의 구분을 이해해 두면 새 라이브러리를 만나도 어디에 놓일지 금방 파악할 수 있습니다. 학습 순서 전체는 학습 로드맵을 참고하시기 바랍니다.
이 글은 AI(인공지능)의 도움을 받아 작성되었습니다.