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 가 수신처, c・d・e… 가 보낼 텍스트입니다. 첫 번째 행은 숫자가 없으므로 곧바로 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 define 과 text sequence 를 사용해 「개구리의 노래」의 멜로디를 준비하고, micro:bit의 A 버튼을 누를 때마다 한 음씩 재생하는 패치를 만들어 주세요.

힌트
  • text define 에 「개구리의 노래」의 음계 데이터를 수신처 값; 형식으로 기술합니다(예: note c; 500 note d; 500 note e; ...)
  • text sequence 에는 -g 플래그를 붙입니다(예: [text sequence kaeru -g]). 수신처의 음계는 [r note] 로 받습니다
  • text sequence 의 bang 메시지를 사용해서 한 음씩 출력합니다(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 등으로 매끄럽게 하는 것도 검토합시다