2013-10-29

Pd Tips: Program Changer 만들기

Pd를 쓰다 보면 프로그램 체인저를 쓸 일이 많다. 패치를 만들고 중간에 루팅을 바꾸는 목적이 있다.

 

악기를 만들어 연주를 하다가 A라는 음색을 쓰다가 B라는 음색으로 바꾸고 싶은 경우, 이런 경우에 프로그램 체인저가 필요하다.

 

2가지 방법이 있다.

첫 번째:  Miller Puckette Style (Pd Vanilla Only)

두 번째: de-multiplex (part of zexy / Extended Only)

 

첫 번째 : Pd Vanilla만 이용한 방법 (Extended 없이) 

상당히 기본적인 기능이라 당연히 기본 패치로 있을 것 같지만, 존재하지 않는다. 직접 만들어 써야 하는데, 푸켓밀러가 제안하는 방식대로 만들어 보겠다.

 

일단 완성된 패치를 보자.

Screen Shot 2013 10 29 at 1 54 03 AM

 

맨 앞에 있는 것은 그냥 숫자를 0부터 계속 1씩 증가 시키는 무의미한 숫자 생성기이다.

 

중요한 것은 [list prepend] 이 부분이다.

 

설명서를 보면 이렇게 나와있다.

[list prepend] - prepend the second list to the first

 

즉 뒤에 붙는 숫자를 앞으로 땡겨서 자리바꿈 한다는 뜻이다. 그러니까 원래 들어온 숫자가 0이고 뒤에 prepend된 것이 9라면, 9를 맨 앞으로 자리를 바꾸고 뒤에 리스트를 붙인다는 뜻이다. 그러면 (0 9) 가 아니라 (9 0)이 된다는 뜻이다. 이 것을 이용해 프로그램 체인저를 만드는 것이다.

 

그러니까 예를 들어서 설명하면, 농사 지을 때 물길을 바꾸는 것이다. 김 첨지네 논으로 들어갈 물을 내 논에다가 집어 넣는 것이다. 김첨지네 논에 물을 주다가 버튼 한번 누르면 내 논으로 물이 들어온다. 물론 김첨지네 논으로 가는 물은 끊긴다. 전문용어로 routing이라고 한다.

 

위에 예제는 숫자만 보냈는데, 리스트로 된 자료구조도 루팅을 바꿔줄 수 있다. 패치는 다음과 같다.

Screen Shot 2013 10 29 at 2 06 25 AM

 

첫 번째 패치와 다른 점은 처음엔 숫자 하나만 들어왔는데, 이번엔 숫자 3개가 한 묶음으로 packed 되었다. [pack f f f]은 3개의 부동소수(float)들을 한 묶음으로 묶으라는 의미이다. 케이블 3개가 아니라 하나로 보낼 수 있어서 편리하다.

 

당연히 packed된 데이터이기에, 마지막에 unpacking을 해줘야 한다. [unpack f f f]는 float 3개로 다시 분리하라는 의미다.

 

동작 영상을 첨부한다.

 

 

 

두 번째 방법 (De-multiplex, Extended only)


첫 번째와 유사한 방법이지만, 조금 더 간단하다. [list prepend]와 [route]가 합쳐진 형태로 [demux]는 동작한다.

 

Screen Shot 2013 10 29 at 11 27 38 PM

 

No comments:

Post a Comment