Sonic Pi 사용법: 코드로 음악 만드는 입문 가이드
핵심 요약
- Sonic Pi는 Ruby 문법 기반의 라이브코딩 환경으로, 에디터·신디사이저·샘플·튜토리얼이 하나의 프로그램에 들어 있습니다.
- 별도 오디오 엔진을 설치할 필요가 없어 설치 직후 바로 소리를 낼 수 있습니다.
- 교육용으로 설계되어 학교 수업과 코딩 교육에서 폭넓게 활용됩니다.
play,sleep,live_loop세 가지만 알면 첫 곡을 만들 수 있습니다.
“코드로 음악을 만들어 보고 싶은데 설치부터 막힌다”는 이야기를 자주 듣습니다. Sonic Pi는 바로 그 지점을 해결하려고 만들어진 도구입니다. 프로그램 하나를 설치하면 코드 에디터, 소리를 내는 엔진, 수백 개의 샘플, 그리고 단계별 튜토리얼이 전부 함께 들어옵니다. 이 글은 설치부터 첫 루프 완성, 그리고 교육 현장 활용까지를 순서대로 다룹니다.
Sonic Pi 소개와 설계 배경
Sonic Pi는 케임브리지 대학의 샘 아론(Sam Aaron)이 개발한 라이브코딩 환경입니다. 시작부터 학교 교실에서 프로그래밍을 가르치기 위한 도구로 설계되었다는 점이 다른 도구와의 결정적 차이를 만듭니다. 라즈베리 파이 같은 저사양 기기에서도 동작하도록 고려되었고, 지금은 윈도우·맥·리눅스를 모두 지원합니다.
교육용 설계는 구체적인 형태로 드러납니다. 첫째, 프로그램을 열면 하단에 튜토리얼 패널이 함께 열려 문서를 따로 찾을 필요가 없습니다. 둘째, 오류가 나면 무엇이 잘못됐는지 알려 주는 메시지가 화면 아래에 표시됩니다. 셋째, 코드를 실행하는 방법이 버튼 하나(또는 단축키)로 통일되어 있습니다. 개발 환경 구성이라는 관문을 통째로 없앤 것이 이 도구의 가장 큰 기여입니다.
내부적으로는 SuperCollider를 사운드 엔진으로 사용하지만, 사용자는 그 존재를 의식할 필요가 없습니다. Sonic Pi가 기동과 통신을 모두 처리하기 때문입니다. TidalCycles가 엔진을 직접 설치하고 연결해야 하는 것과 대비되는 지점입니다.
설치 방법과 플랫폼별 차이
설치는 공식 사이트에서 운영체제에 맞는 설치 파일을 받아 실행하는 방식입니다. 다만 플랫폼별로 유의할 점이 조금씩 다릅니다.
| 플랫폼 | 설치 방식 | 유의할 점 |
|---|---|---|
| 윈도우 | 공식 설치 프로그램 | 방화벽 경고가 뜨면 허용해야 내부 통신이 정상 동작 |
| macOS | 애플리케이션 패키지 | 최초 실행 시 보안 설정에서 실행 허용 필요 |
| 리눅스 | 배포판 패키지 또는 공식 빌드 | 오디오 서버(JACK/PulseAudio) 설정 확인 필요 |
| 라즈베리 파이 | OS 저장소 패키지 | 사양에 따라 동시 재생 수를 줄여야 안정적 |
설치 후 첫 실행에서는 엔진이 기동될 때까지 몇 초 정도 걸립니다. 하단 로그에 준비 완료 메시지가 뜬 뒤에 코드를 실행해야 합니다. 소리가 나지 않는다면 대부분 시스템 출력 장치가 다른 곳으로 잡혀 있는 경우이므로, OS의 오디오 출력 설정을 먼저 확인하시기 바랍니다.
기본 문법과 첫 사운드
가장 짧은 프로그램은 한 줄입니다.
play 60
숫자 60은 MIDI 노트 번호로 가운데 도(C4)에 해당합니다. 숫자를 62, 64로 바꾸면 음이 올라갑니다. 음이름으로 play :c4처럼 써도 동일하게 동작합니다. 여러 음을 순서대로 내려면 사이에 sleep으로 시간을 둡니다.
play :c4
sleep 0.5
play :e4
sleep 0.5
play :g4
sleep 0.5는 실제 0.5초가 아니라 비트 기준의 0.5박을 의미하며, 기본 템포에 따라 실제 시간이 달라집니다. 템포는 use_bpm 120으로 지정합니다. 샘플을 재생할 때는 sample :bd_haus처럼 이름을 부릅니다. 신디사이저 음색은 use_synth :prophet과 같이 바꿉니다.
이 세 가지 축(음정·시간·음색)만 조합해도 상당한 범위를 표현할 수 있습니다. 값을 배열로 넘겨 순회하는 [:c4, :e4, :g4].each 같은 Ruby 문법도 그대로 사용할 수 있어, 프로그래밍 경험이 있다면 익숙한 구조로 곡을 구성할 수 있습니다.

루프와 리듬 만들기
라이브코딩의 핵심 도구는 live_loop입니다. 이름을 붙인 루프를 정의하면 그 루프가 계속 돌고, 실행 중에 내용을 고쳐 다시 실행하면 다음 순회부터 새 코드가 적용됩니다. 소리는 끊기지 않습니다.
live_loop :drums do
sample :bd_haus
sleep 1
end
live_loop :hats do
sample :drum_cymbal_closed, amp: 0.6
sleep 0.25
end
여러 루프를 함께 돌릴 때는 박자 정렬이 필요합니다. 루프 안에서 sync :drums를 호출하면 해당 루프가 기준 루프의 주기에 맞춰 시작하므로 어긋남을 방지할 수 있습니다.
- 기준 루프 정의 — 킥 드럼 루프를 하나 만들어 전체 템포의 기준으로 삼습니다.
- 세분 리듬 추가 —
sleep값을 0.25 등으로 줄여 잘게 쪼갠 퍼커션을 올립니다.amp:로 음량을 낮춥니다. - 멜로디 얹기 — 음 배열과
tick을 사용해 순서대로 음을 꺼내 연주합니다. - 변주 넣기 —
one_in(4)처럼 확률 조건을 걸어 가끔씩만 다른 소리가 나게 합니다. - 정리·저장 — 완성된 코드를 저장하고, 필요하면 녹음 기능으로 오디오를 남깁니다.
| 명령 | 역할 | 예시 |
|---|---|---|
| play | 음 하나를 연주 | play :c4 |
| sleep | 다음 동작까지 대기(박 단위) | sleep 0.5 |
| sample | 내장 샘플 재생 | sample :bd_haus |
| use_synth | 신디사이저 음색 변경 | use_synth :prophet |
| use_bpm | 템포 지정 | use_bpm 120 |
| live_loop | 이름 붙은 반복 루프 정의 | live_loop :drums do ... end |
| sync | 다른 루프와 박자 정렬 | sync :drums |
여러 live_loop이 점점 어긋난다면 대부분 루프 한 바퀴의 총 sleep 합이 서로 배수 관계가 아니기 때문입니다. 각 루프의 총 길이를 1, 2, 4처럼 맞추면 문제가 사라집니다.
학교와 코딩 교육 현장에서의 활용
Sonic Pi가 교육에서 자주 채택되는 이유는 결과가 즉시 귀로 확인되기 때문입니다. 변수, 반복문, 조건문, 배열 같은 개념을 설명할 때 화면의 숫자 대신 소리 변화로 보여 줄 수 있습니다. 예를 들어 반복문의 횟수를 바꾸면 리듬의 밀도가 달라지고, 조건문을 넣으면 특정 박에서만 다른 소리가 납니다. 추상적인 개념이 감각적으로 연결됩니다.
수업 설계 측면에서도 이점이 있습니다. 학생마다 결과물이 달라지므로 정답 하나를 맞히는 과제가 아니라 각자의 결과를 만드는 과제가 됩니다. 컴퓨터 사양 요구가 낮아 노후 장비가 많은 환경에서도 운영할 수 있고, 인터넷 연결 없이 동작한다는 점도 실무적으로 중요합니다.
다만 유의할 점도 있습니다. 헤드폰 없이 여러 대를 동시에 실행하면 교실이 통제되지 않으므로 개인 헤드폰 준비가 사실상 필수입니다. 또한 음량 기본값이 큰 편이라 첫 수업에서 amp: 사용법을 먼저 안내하는 편이 좋습니다.
교육 도구로서의 특성
공식 문서가 밝히는 설계 목표(교육용·저사양 지원)와 도구 구조를 기준으로 한 정성 비교입니다.
다음 단계로 넘어가기
Sonic Pi에서 live_loop과 샘플 조작이 익숙해졌다면 두 갈래로 확장할 수 있습니다. 하나는 같은 환경에서 신디사이저 파라미터와 이펙트를 깊이 파고드는 방향이고, 다른 하나는 패턴 표현이 더 강력한 도구로 옮겨 가는 방향입니다. 후자라면 Strudel이나 TidalCycles가 자연스러운 다음 선택지입니다.
규칙으로 멜로디를 생성하는 쪽에 관심이 생겼다면 알고리즘 작곡 편을 함께 보시기 바랍니다. Sonic Pi 안에서도 확률과 배열을 이용해 상당한 수준의 자동 생성이 가능합니다.
이 글은 AI(인공지능)의 도움을 받아 작성되었습니다.