# 작곡 도구로서의 Ruby: Sonic Pi

> Clean Markdown view of GeekNews topic #16266. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16266](https://news.hada.io/topic?id=16266)
- GeekNews Markdown: [https://news.hada.io/topic/16266.md](https://news.hada.io/topic/16266.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-08-11T09:58:22+09:00
- Updated: 2024-08-11T09:58:22+09:00
- Original source: [bhmt.dev](https://bhmt.dev/blog/sonic_pi/)
- Points: 3
- Comments: 1

## Topic Body

- # 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가 있음

## Comments



### Comment 27917

- Author: neo
- Created: 2024-08-11T09:58:23+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41198491) 
- 라이브 코딩에 관심이 있다면 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에서 사이트 레이아웃이 깨짐
