Skip to content

제6강 자동 연주

이번 강의의 목표

텍스트 데이터나 GUI를 사용한 자동 연주의 구조를 배웁니다.

구체적으로는 다음 내용을 다룹니다.

  • 텍스트 데이터를 사용한 자동 출력
  • 텍스트 출력에 의한 음원 파일의 자동 재생
  • GUI를 통한 시퀀싱(리듬 머신)
  • MIDI를 통한 DAW 연동의 개요

텍스트 데이터의 자동 출력

Pd에서는 텍스트 데이터를 사용해 원하는 타이밍에 메시지를 순서대로 출력할 수 있습니다. 이를 통해 미리 준비한 데이터에 따라 소리를 자동으로 낼 수 있게 됩니다.

사용하는 오브젝트

오브젝트기능
text define텍스트 데이터를 정의・보관한다
text sequence텍스트 데이터를 순서대로 출력한다

텍스트 데이터의 포맷

각 행은 「수신처(보낼 곳)」와 「보낼 텍스트」의 쌍으로 쓰고, 행 끝에 세미콜론(;)을 붙입니다. 나아가 행의 맨 앞에 숫자(밀리초)를 붙이면, 그 시간이 지난 뒤 다음 행으로 자동으로 진행됩니다(auto 모드).

note c;
500 note d;
500 note e;
500 note f;
500 note e;
500 note d;
500 note c;
1000 note e;

위의 예(「개구리의 노래」의 앞부분)에서 note 가 수신처, cde… 가 보낼 텍스트입니다. 첫 번째 행은 숫자가 없으므로 곧바로 c 가 전송되고, 두 번째 행부터는 앞 음으로부터 500(밀리초) 기다린 뒤에 다음 음이 전송됩니다. 전송된 값은 [r note](receive)로 받아서 사용합니다.

텍스트 데이터 작성법

  • 각 행은 수신처 값; 또는 대기 시간 수신처 값; 의 형태로 씁니다
  • 수신처: 보낼 곳의 이름. Pd 안의 [r 수신처] 에 도착합니다(예의 note 라면 [r note]
  • 대기 시간(선택): 행의 맨 앞에 두는 숫자. auto 모드일 때 앞 행으로부터 이 밀리초 만큼 기다린 뒤에 전송합니다(생략하면 즉시 전송. 첫 번째 행은 생략합니다)
  • : 수신처로 보낼 내용(음계명이나 파일명 등)
  • 행 끝에는 반드시 세미콜론(;)을 붙입니다
  • 수신처를 유효하게 하려면 text sequence-g 플래그를 붙입니다(예: [text sequence kaeru -g]
「개구리의 노래」 전체 데이터
note c;
500 note d;
500 note e;
500 note f;
500 note e;
500 note d;
500 note c;
1000 note e;
500 note f;
500 note g;
500 note a;
500 note g;
500 note f;
500 note e;
1000 note c;
1000 note c;
1000 note c;
1000 note c;
1000 note c;
250 note c;
250 note d;
250 note d;
250 note e;
250 note e;
250 note f;
250 note f;
250 note e;
500 note d;
500 note c;

패치 예시

텍스트 파일

text define -k kaeru 안에 텍스트 데이터를 써 넣고, text sequence kaeru -g 로 순서대로 내보냅니다. -g 플래그에 의해 각 행의 맨 앞 심볼(note)이 수신처가 되어, [r note] 로 음계를 받을 수 있습니다.


텍스트 출력에 의한 음원 파일의 자동 재생

text sequence 의 출력을 else/play.file~ 에 연결하면, 텍스트 데이터에 쓰인 순서대로 음원 파일을 자동 재생할 수 있습니다.

주요 메시지

메시지동작
auto자동 재생 모드로 만든다(텍스트의 대기 시간에 따라 자동으로 다음 데이터를 출력)
bang다음 데이터를 하나 출력한다(수동 모드)
line 0맨 앞으로 되돌아간다

절차

  1. text define 에 텍스트 데이터(수신처 값; 형식. 파일명이나 음계 데이터 등)를 써 넣습니다
  2. text sequence 를 만들고, text define 의 이름과 -g 플래그를 인수로 지정합니다(예: [text sequence kaeru -g]). 각 행의 수신처는 [r 수신처] 로 받습니다
  3. auto 메시지를 보내면 맨 앞의 숫자(밀리초)에 따라 각 행을 자동으로 순서대로 내보냅니다
  4. bang 메시지를 보내면 한 행씩 수동으로 내보냅니다(대기 시간 숫자는 무시됩니다)
  5. line 0 메시지로 첫 번째 행으로 되돌아갑니다

auto와 bang의 구분 사용

  • auto : 텍스트 데이터에 쓰인 시간 간격으로 자동으로 진행됩니다. BGM이나 자동 연주에 적합합니다.
  • bang : 사용자의 조작(버튼을 누르는 등)으로 한 음씩 진행시킵니다. 인터랙티브한 연주에 적합합니다.

패치 예시

텍스트 자동 재생


GUI를 통한 시퀀싱

else/drum.seq 오브젝트를 사용하면 그래픽 인터페이스로 리듬 패턴을 입력할 수 있습니다. 마우스로 클릭해서 직관적으로 리듬을 구성할 수 있습니다.

사용하는 오브젝트

오브젝트기능
else/drum.seq리듬 패턴의 GUI 에디터
else/tempo템포(BPM)를 설정한다
route출력된 데이터를 악기별로 배분한다

BPM 설정 방법

else/tempo 오브젝트로 BPM(Beats Per Minute: 1분당 박수)을 설정합니다.

  • 인수에 BPM 값을 지정합니다(예: else/tempo 120
  • 숫자 메시지로 BPM을 동적으로 변경할 수도 있습니다

BPM의 기준

BPM템포감
60〜80느림(발라드)
100〜120보통(팝)
120〜140조금 빠름(댄스 뮤직)
140〜180빠름(드럼 앤 베이스)

리듬 머신 구성 방법

  1. else/drum.seq 를 만들고 GUI로 리듬 패턴을 입력합니다
  2. else/tempo 로 BPM을 설정합니다
  3. route 로 각 트랙(킥, 스네어, 하이햇 등)의 출력을 배분합니다
  4. 각 트랙에 음원(else/play.file~ 이나 신시사이저)을 연결합니다

패치 예시

리듬 머신


MIDI를 통한 DAW로의 자동 연주

참고 정보

Pd는 MIDI(Musical Instrument Digital Interface)를 사용해서 DAW(Digital Audio Workstation) 소프트웨어와 연동할 수도 있습니다.

개요

MIDI란 전자 악기나 컴퓨터 사이에서 연주 데이터를 주고받기 위한 규격입니다. Pd에서 MIDI 메시지를 전송하거나, 외부 DAW(Ableton Live, GarageBand 등)로부터 MIDI 메시지를 수신할 수 있습니다.

Pd에서 MIDI를 사용하는 방법

  • MIDI 출력: noteout 오브젝트로 MIDI 노트를 전송할 수 있습니다
  • MIDI 입력: notein 오브젝트로 외부로부터의 MIDI 노트를 수신할 수 있습니다
  • 가상 MIDI 버스: macOS의 경우 「오디오 MIDI 설정」에서 가상 MIDI 버스를 만들어 Pd와 DAW를 연결할 수 있습니다

본 수업에서의 취급

MIDI 연동은 심화 내용입니다. 본 수업에서는 개요 소개에 그치지만, 작품 제작에서 활용하고 싶다면 상담해 주세요.


연습 문제

연습1: A 버튼으로 「개구리의 노래」를 한 음씩 재생

text definetext sequence 를 사용해 「개구리의 노래」의 멜로디를 준비하고, micro:bit의 A 버튼을 누를 때마다 한 음씩 재생하는 패치를 만들어 주세요.

힌트
  • text define 에 「개구리의 노래」의 음계 데이터를 수신처 값; 형식으로 기술합니다(예: note c; 500 note d; 500 note e; ...)
  • text sequence 에는 -g 플래그를 붙입니다(예: [text sequence kaeru -g]). 수신처의 음계는 [r note] 로 받습니다
  • text sequencebang 메시지를 사용해서 한 음씩 출력합니다(A 버튼으로 진행시키는 경우, 맨 앞의 대기 시간은 무시되고 한 음씩 진행됩니다)
  • micro:bit의 A 버튼이 눌렸을 때 bang 을 보내도록 합니다
  • 받은 음계 데이터를 sel 등으로 배분하고, osc~ 나 음원 파일에 연결해서 소리를 냅니다
  • 곡의 마지막까지 도달하면 line 0 으로 처음으로 되돌리는 것도 생각해 봅시다

연습2: 리듬 머신에 micro:bit의 기울기로 템포 변화

else/drum.seq 를 사용한 리듬 머신을 만들고, micro:bit의 기울기로 BPM(템포)을 변화시키는 패치를 만들어 주세요.

힌트
  • else/drum.seq 로 리듬 패턴을 만듭니다
  • else/tempo 로 BPM을 제어합니다
  • micro:bit의 기울기(가속도 센서) 값을 취득합니다
  • 기울기 값을 BPM의 범위(예: 60〜180)에 매핑합니다
  • scale 오브젝트 등을 사용해서 값의 범위를 변환합시다
  • 값이 너무 급격하게 변화하는 경우에는 else/lowpass 등으로 매끄럽게 하는 것도 검토합시다