GN⁺: 작곡 도구로서의 Ruby: Sonic Pi
(bhmt.dev)-
Sonic Pi: Ruby를 작곡 도구로 사용하기
-
배경
- 필자는 원래 음악 전공이었음
- 웹 개발자로 일하면서 기술 작업에 빠져들게 되었음
- 다양한 악기를 다루기 어려워 전자 음악에 도전했으나 실패했음
- 최근 Sonic Pi를 통해 다시 음악과 코딩을 결합하게 되었음
-
Sonic Pi 소개
- Sam Aaron이 만든 Sonic Pi는 코드로 제어되는 소프트웨어 신디사이저임
- Ruby를 확장한 도메인 특화 언어(DSL)를 사용하여 음악과 오디오 개념을 매핑함
- 예를 들어,
:c4
와 같은 기호로 음표를 나타내고,chord(:d3, :maj7)
와 같은 코드 생성자를 사용함
-
프로젝트 목표
- Sonic Pi만을 사용하여 하나의 데모를 작곡하는 것이 목표였음
- MIDI나 외부 샘플을 사용하지 않고 순수하게 코드로만 작곡함
-
기본 코드 예제
-
use_bpm 70
으로 BPM을 설정하고,use_synth :pulse
로 신디사이저를 설정함 -
play :c2
,sleep 0.25
와 같은 코드로 음표를 재생하고 시간 간격을 설정함 -
play_pattern_timed [ :c3, :d3, :e3, :g3 ], 0.25
로 패턴을 재생함
-
-
코드 최적화
- 반복되는 코드를 줄이기 위해 함수를 정의함
-
def arpeggiate(root, is_minor = false)
함수로 아르페지오 패턴을 생성함 -
in_thread do
블록을 사용하여 병렬로 코드를 실행함
-
병렬 실행
-
in_thread do
블록을 사용하여 두 개의 "악기"를 병렬로 실행할 수 있음 - 예를 들어, 하나의 스레드에서 아르페지오를 실행하고, 다른 스레드에서 멜로디를 실행함
-
-
합창 구현
-
ring
을 사용하여 여러 음표를 하나의 리스트로 결합함 -
play_pattern_timed [ring(:c5, :e5)], 4, sustain: 3.8
와 같이 음표를 재생하고 지속 시간을 설정함 -
def choral_rings(notes, sus)
함수를 정의하여 합창 패턴을 간단하게 만듦
-
-
라이브 루프
-
live_loop
를 사용하여 무한히 반복되는 루프를 생성함 -
live_loop :harp do
와 같이 루프를 정의하고, 내부에 코드를 작성함
-
-
결론
- 프로그래밍은 단순한 과학이 아니라 예술임
- 코드를 작성하는 것은 창의적인 행위이며, 다른 사람과 소통하는 방법임
- Sonic Pi를 통해 음악과 코딩을 결합하여 창의적인 작업을 할 수 있음
GN⁺의 정리
- Sonic Pi는 코드로 음악을 작곡할 수 있는 도구로, Ruby를 확장한 DSL을 사용함
- 이 프로젝트는 Sonic Pi만을 사용하여 하나의 데모를 작곡하는 것을 목표로 함
- 프로그래밍은 과학뿐만 아니라 예술적인 측면도 있으며, Sonic Pi는 이를 잘 보여줌
- 음악과 코딩을 결합하여 창의적인 작업을 할 수 있는 좋은 예시임
- 비슷한 기능을 가진 도구로는 TidalCycles와 SuperCollider가 있음
Hacker News 의견
- 라이브 코딩에 관심이 있다면 Glicol을 시도해볼 만함
- TidalCycles도 추천할 만함. Haskell과 Ruby의 DSL 생성 능력을 칭찬함
- Glicol의 언어 디자인은 신디사이저 영감을 받은 문법, 작곡 속도, 사운드 디자인의 편리성에 중점을 둠
- 기존 프로그래밍 습관을 반영하되 기존 언어에 얽매이지 않는 DSL을 설계하는 것이 목표임
- Ruby는 문법이 거의 영어처럼 되어 있어 매우 유용함
- Sonic Pi의 창시자인 Sam Aaron의 라이브 공연을 본 적이 있음
- 코드 변경 시마다 음악이 진화하는 모습이 인상적이었음
- Ruby 개발자로서, 알고리즘으로 생성된 음악을 만드는 데 사용할 수 있을 것 같아 매우 흥미로움
- 예를 들어, noisy git repository 이벤트를 알고리즘 음악으로 만드는 데 사용할 수 있을 것 같음
- 음악가로서, MIDI 키보드나 어쿠스틱 악기를 녹음하고 루프하는 것이 더 나은 UX임
- Ruby DSL을 사용하여 무엇이든 입력할 수 있지만, 피아노 키보드와 비교했을 때 UX가 좋지 않음
- Logic을 대체하는 데 사용하지 않을 것 같음
- 프로그래밍 음악의 다른 접근 방식으로는 Python용 scamp를 추천함
- 저자가 YouTube에 여러 비디오를 올려놓았음
- 몇 년 전 Sonic Pi를 사용하여 THX Deep Note를 재현한 YouTube 비디오를 본 적이 있음
- 처음에는 무엇을 할지 설명하지 않고, 소리를 조금씩 조정하며 결국 Deep Note를 만들어냄
- 그 비디오를 다시 찾을 수 없어 아쉬움
- 최근 Sonic Pi에 대해 생각하며 몇 가지 비디오를 시청했음
- 몇 년 전 잠깐 사용해본 적이 있음
- HTML 주석이 제대로 작동하지 않음. 편집기가 두 개의 하이픈을 하나의 em 대시로 변환함
- Sonic Pi 라이브 코더 alsoknownasrox에게 응원의 말을 전함
- 정말 멋진 데모임
- 하지만 Safari에서 사이트 레이아웃이 깨짐