3P by neo 1달전 | favorite | 댓글 1개
  • 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에서 사이트 레이아웃이 깨짐