Showing posts with label pure data. Show all posts
Showing posts with label pure data. Show all posts

2015-04-02

Sudden unexpected LOGOUT using Pure data on Ubuntu 14.04

Pd 사용중 갑자기 로그아웃이 되며 우분투 로그인창이 뜨는 현상이 발생했다. 작업 중이던 모든 데이터가 유실되는 치명적인 버그다. 이것 때문에 작업도 못 하고 일주일 동안 고생했다. 

 

이 기현상은 우분투 14.04에서만 나타났으며, 범인은 Intel Graphic Driver였다. NVIDIA만 아니면 될 줄 알았는데, 인텔도 믿으면 안 되나보다...

 

인텔이 제공하는 최신 드라이버를 사용하려면 (귀찮게도) 14.10으로 업그레이드 해야만 한다. 인텔이 (괘씸하게도) 14.04 지원을 중단했다.

 

자 포맷을 하고, 인텔 드라이버를 다운받고, 설치하면 문제가 사라졌다.

 

현상1:

http://forum.pdpatchrepo.info/topic/7614/solved-pd-crashes-x-server

 

현상2:

http://askubuntu.com/questions/349010/computer-randomly-loggin-out-on-ubuntu-13-04

 

인텔 최신 드라이버 다운로드:

https://01.org/linuxgraphics/downloads/2015/intelr-graphics-installer-linux-1.0.8

 

 

2014-12-24

[PD] searching source file of vanilla

Pd를 쓰다보면 소스를 고치고 싶을 때가 있다. 이 때 바닐라 소스를 보려는 방법이다.

방법은 grep을 사용한다. 리눅스와 맥에서 가능하다. 윈도우 지못미 ㅠㅠ

먼저 소스 디렉토리로 간다.

~$ cd ~/Downloads/pd-0.46-4/src

~/Downloads/pd-0.46-4/src$ grep '"metro"' *.c

설명:

grep:

grep은 파일 속의 텍스트 문구를 찾는 명령어다.

따옴표(' " metro " ')

작은 따옴표(')와 큰따옴표(")의 조합에 주의! metro와 정확히 일치하는 문자열을 찾는다. 따옴표 없이 검색하면 너무 많이 나온다.

*.c

소스코드는 c로 되어있다. c코드 안에서 찾는다는 의미다.

찾은화면

추가내용:

옵션을 -r 을 주면 하위폴더 검색(recursive)가능.

옵션을 -l을 주면 파일명만 표시.

.c가 아닌 .으로만 적으면 모든 확장자파일 검색

예제:

zmoelnig@XXX:~$ cd ~/src/pd/

zmoelnig@XXX:~/src/pd$  $ grep -r -l '"metro"' .

./doc/5.reference/timer-help.pd

./doc/1.manual/x5.htm

./src/x_time.c

zmoelnig@XXX:~/src/pd$

참고:

On 12/23/2014 08:12 PM, Jonghyun Kim wrote:

> thanks for the answer!
>
> I tried to find with grep, but it doesn't work...
>
> *akntk@umi:~/Downloads/pd-0.46-4$ grep '"metro"' *.c*
> *grep: *.c: No such file or directory*

all C-source files (that's all of Pd without the GUI), lives in the
"src" folder.

zmoelnig@XXX:~$ cd ~/src/pd/src/
zmoelnig@XXX:~/src/pd/src$ grep '"metro"' *.c
x_time.c:    metro_class = class_new(gensym("metro"),
(t_newmethod)metro_new,
zmoelnig@XXX:~/src/pd/src$

you could also use grep's "-r" flag to recursively search files in
subdirectories, and the "-l" flag to only show the filename (and not the
line containing the keyword).

zmoelnig@XXX:~$ cd ~/src/pd/
zmoelnig@XXX:~/src/pd$  $ grep -r -l '"metro"' .
./doc/5.reference/timer-help.pd
./doc/1.manual/x5.htm
./src/x_time.c
zmoelnig@XXX:~/src/pd$

obviously there are more files containing "metro" in quotes.
note that i now use '.' as the "file" to search (which means the current
directory; as i do a recursive search, this will search all files in all
subdirectories of the current dir).

you might also want to have a look at the manpage of "grep" to learn
more about it.

$ man grep

gfdsmr
IOhannes

2014-03-01

Pd패치를 Max에서 불러오기

Pd는 오픈소스다. 그래서 누구나 쓸 수 있다. 반면에 Max는 자사의 포맷을 외부에 공개하지 않음으로써 자신의 권리를 지킨다. 그래서 Pd에서는 5버젼 이상의<.maxpat> 맥스패치는 읽을 수가 없다. 뭐 피날레에서 시벨리우스 파일 불러오는 것 만큼이나 안 되는 것이 당연하기에 그들의 밥그릇은 인정해 주기로 하자.

 

Pd로 작성한 패치는 Max에서 불러올 수가 있다. Vanilla/Extended, 윈도우/맥/리눅스 가리지 않고 그냥 된다.<It just works>

 

먼저 Pd 패치를 만든다.

Screen Shot 2014 03 01 at 4 51 50 AM

Savs as를 누르고 확장자를 <pat>이라고 적는다.

Screen Shot 2014 03 01 at 4 52 08 AM

 

맥스(Max6)로 열어본다. 잘 열린다. 동작도 잘 된다.

Screen Shot 2014 03 01 at 4 52 36 AM

<바뀐 점> 자세히 보면 [osc~ 440]가 [cycle~ 440]으로 바뀌었다. 이런 미세한 차이가 있는데, Pd에서 확장자를 바꿔 저장하면 알아서 변환이 된다. 편리하다.

맥스6에서 불러온 Pd패치는 저장이 maxpat으로만 가능하다. 이것은 맥스에서만 사용 가능한 폐쇄적인 확장자다. JSON을 써서 성능이 좋다고 주장하는데 대체 뭐가 더 좋을지는 모르겠다. 하위 호환성이 없는 피날레와 하는 짓이 다를 바가 없는 듯 하다.

 

Pd로 만든 것들은 대부분 Max에서 열린다고 보면 된다. (단 Pd에만 존재하는 라이브러리들은 제외) 반대로는 안 된다.

2013-12-23

compiling leapmotion.pd_linux on Ubuntu 12.04 (32 bit)

LeapMotion용 Pure Data Object는 Chikashi Miyama가 제작하였다. 맥과 리눅스를 지원한다. 맥용은 컴파일 된 파일이 있지만, 리눅스용으로 컴파일을 안 해놔서 직접 해야만 한다. 매우 번거롭긴 한데, 리눅서들은 뭐 그러려니 하고 만다. 자 험난한 길을 가보자.


 393268 leap motion controller


간략화된 순서는 다음과 같다.
1. Flext 설치. 이 것은 Pd 오브젝트를 만드는 것을 도와주는 프로그램이다.
2. LeapMotion SDK 설치. 이 것은 립모션 API가 들어있다. 제조사에서 공개해 준 것이라 믿을만 하다.
3. Pd_leapmotion 컴파일 하기. 위의 두 프로그램을 사용해 .pd_linux 파일을 만드는 것이다.


그렇게 쉽지는 않고 약간 복잡하다. 본격적으로 시작해 보자.


1. Pd_leapmotion 다운받기:
https://github.com/chikashimiyama/Pd_leapmotion

Pd_leapmotion을 다운받고 압축을 푼다. ~/Download 에다 받는다. https://github.com/chikashimiyama/Pd_leapmotion
해당 폴더는 여기에 있을 것이다. ~/Download/Pd_leapmotion-master


2. Flext 설치와 컴파일: 가서 설명을 보고 다운을 받는다:
http://grrrr.org/research/software/flext/

설치를 하자. 아마 svn이 없다고 나올 수도 있다 그러면 svn을 설치하자. sudo apt-get install subversion로 가능.
$ svn co https://svn.grrrr.org/ext/trunk/flext flext

컴파일러 확인. flext를 컴파일 하기 위해서 g++ 버젼을 확인하자. 3.3 이상이면 OK. 그 이하면 곤란하다.
$ g++ --version

다운받은 해당 디렉토리로 가서 컴파일 한다. 만일 에러가 나면 sudo로 해본다.
$ cd ~/Download/flext
$ bash build.sh pd gcc
$ bash build.sh pd gcc install

처음에 받은 Pd_leapmotion 폴더로 가서 익스터널을 컴파일 한다. 중요! flext와 Pd_leapmotion이 둘 다 ~/Download폴더에 있어야 한다.
$ cd ~/Download/Pd_leapmotion-master
$ bash ../flext/build.sh pd gcc
(생략) $ bash ../flext/build.sh pd gcc install
$ bash ../flext/build.sh pd gcc clean

다시 flext 폴더로 가서 설정을 한다.
$ cd ~/Download/flext
$ ./bootstrap.sh

bootstrap.sh가 안되면 Bootstrapping failed 메세지
$ sudo apt-get install libtool

도움말을 한번 본다. 상황에 따라 다르기 때문에 꼭 이것을 참고해야 한다.
$ ./configure --help

Pd source를 다운받고 압축을 푼다. ~/Download 폴더에 푼다. http://msp.ucsd.edu/software.html

소스 폴더를 잘 알아 놓는다. 내 경우엔 이렇다. /home/사용자/Downloads/pd-0.45-3/src

다시 flext 폴더로 가서 마무리 한다. 매뉴얼엔 sysdir이라고 나와 있는데, 도움말에는 sdkdir로 하라고 나와있다. 이거 틀리면 안된다. 겨우 알아냈다.
$ ./configure --enable-system=pd --with-sdkdir=/home/jong/Downloads/pd-0.45-3/src

flext 설치를 마무리 한다.
$ make $ sudo make install


3. LeapMotion SDK for Linux 설치. 가서 다운받고 압축을 푼다. ~/Download에 푼다:
https://developer.leapmotion.com/downloads

중요한 파일은 libLeap.so 이 파일이다. 경로는 ~/Downloads/LeapDeveloperKit/LeapSDK/lib/x86/ 혹은 /x64 에 있다. 자신의 OS에 맞는 것을 쓴다. Pd 유저라면 대부분 32비트 버젼일 것이다.


4. 설치를 도와줄 package.txt 파일 만들기. 중요한 파일인데 안 들어있다. 직접 만들어야 한다.
$ cd ~/Download/Pd_leapmotion-master
$ touch package.txt
$ nano package.txt

문서 편집기가 열리면 다음과 같이 적고 저장한다. INCPATH+와 LDFLAGS를 적어주어야 한다. 만약 안 되면 LDFLAGS를 빼고 해보자.
NAME=leapmotion
SRCDIR=.
SRCS=main.cpp Dispatcher.cpp
INCPATH+= -I/해당/경로/LeapDeveloperKit/LeapSDK/include
LDFLAGS='-L/해당/경로/LeapDeveloperKit/LeapSDK/lib/x86 -lLeap'



5. flext를 이용해서 Pd_leapmotion 컴파일 하기. 로그를 잘 보고 만약 에러가 나면 sudo로 다시 시도.
$ cd ~/Download/Pd_leapmotion
$ bash ../flext/build.sh pd gcc
$ (sudo) bash ../flext/build.sh pd gcc install    (여기서 에러가 났던 걸로 기억한다. 그러면 sudo를 쓰자.)

에러가 날 때 대처법: sudo로 실행해 본다. 나는 gcc install 할 때 에러가 났다. 그래서 sudo bash ../flext/build.sh pd gcc install 로 해결.
컴파일이 완료 되었다. 우리가 원하던 그 파일은 ~/Download/Pd_leapmotion-master/pd-linux/release-single 에 있다.
파일이름은 Pd_leapmotion.pd_linux 이다.


6. Pd에서 그냥 로드하면 에러가 난다. sudo와 LD_PRELOAD=를 안 붙이면, Pd로 오브젝트를 불러 올 때 다음과 같은 에러가 난다.
undefined symbol: _ZTIN4Leap9InterfaceE
leapmotion
... couldn't create


7. 실행할 때 Pd에 옵션을 붙여줘야 이 오브젝트를 제대로 로드할 수 있다. 아니면 에러가 난다. 실행 시 유의사항: sudo 로 해야한다. LD_PRELOAD=를 붙여준다. 이 것은 아까 언급한 SDK의 libLeap.so를 필요로 한다.

libLeap.so를 복사한다. 이름을 libLeap-x86.so로 바꾸었다. 64비트인지 32비트인지 정확히 알아야 한다.
$ cp ~/Download/LeapDeveloperKit/LeapSDK/lib/x86 ~/Download/Pd_leapmotion-master/pd-linux/release-single/libLeap-x86.so pd

다음과 같이 Pd를 실행하고, Pd_leapmotion-help.pd를 열어본다.
$ LD_PRELOAD=/home/jong/Downloads/leapmotion-linux-compile/Pd_leapmotion-master/pd-linux/release-single/libLeap-x86.so pd


끝이다. 지금까지 잘 따라 왔다면 다음과 같은 화면을 볼 것이다.



만들어진 Pd_leapmotion.pd_linux File link를 첨부한다. 잘 안되면 그냥 이것을 써도 무방함.
https://drive.google.com/folderview?id=0B42bn7ncw918RUVWWFFtZVZpVEE&usp=sharing

추가: master source의 main.cpp에 추가하면 Gyroscope처럼 쓸 수가 있다. (대박)
추가소스
//jong-pry
float pitch = hand.direction().pitch();
float yaw = hand.direction().yaw();
float roll = hand.palmNormal().roll();
//
t_atom handInfo[5];
//jong-pry
if (hands_gyro_flag) {
// gyro
SETFLOAT(&handInfo[0], i);
SETSYMBOL(&handInfo[1], gensym("gyro"));
SETFLOAT(&handInfo[2], pitch);
SETFLOAT(&handInfo[3], yaw);
SETFLOAT(&handInfo[4], roll);
ToOutAnything(1, gensym("hand"), 5, handInfo);
}
//
고쳐진 소스 첨부 (내가 고친거)
https://docs.google.com/file/d/0B42bn7ncw918X3VvLTB1dVR1YlU/edit

참고 Computing the Hand Orientation:
https://developer.leapmotion.com/documentation/Languages/C++/Guides/Leap_Tracking.html


참고 일반:
http://puredatajapan.info/?page_id=1514
http://musa.poperbu.net/index.php/tecnologia-seccions-30/-puredata-seccions-45/129-installing-leapmotion-puredata-external-on-linux
https://github.com/chikashimiyama/Pd_leapmotion/issues/1

2013-11-03

Pd Tips: line~ in Milliseconds, not Samples!

Playing sound file in Pd, you may need [line~] object.

 

Sadly, it's always annoying me, that it needs different measurement units. (samp, msec) 

 

The two things that [line~] needs, are the playing range in Samples, and the duration in Milliseconds.

 

The Form is like that:

start-point in Samples, end-point in Samples, duration in Milliseconds

 

For example, start-point is 0 sample, end-point is 44100 sample, duration is 1 sec.

[0, 44100 1000(

 

It's difficult thing for me, when I play soundfile, always I have to calculate twice in Samples and Milliseconds.

 

So, I make it simple. 

 

All parameter in Milliseconds.(msec)

 

Screen Shot 2013 11 03 at 8 33 08 AM

 

[*~ X] is the key. X is the SR(samplerate) of sound file. 44.1kHz, 48kHz or 22.05kHz, what you want.

 

EOF

2013-10-30

Pd Object, vmetro2

Description
Pd Object, [vmetro2] is variable Tempo Metronome.

Introduction Video

Pd Patch
Screen Shot 2013 10 30 at 11 34 03 AM

Help
Screen Shot 2013 10 30 at 11 42 40 AM

Download
https://drive.google.com/folderview?id=0B42bn7ncw918emk3TnRJVENwWUk&usp=docslist_api#

Thanks to Orm Finnendahl

Pd Object, adsr~

Description

Pd Object, [adsr~] is easy ADSR envelope generator.

 

Pd Patch

Screen Shot 2013 10 30 at 10 58 07 AM

 

Help file

Screen Shot 2013 10 30 at 11 00 02 AM

 

Print ADSR properties

Screen Shot 2013 10 30 at 11 00 22 AM

 

Download

https://drive.google.com/folderview?id=0B42bn7ncw918c1MwZHhZc0wwMTQ&usp=docslist_api#

Pd Object, eline~

Description

Pd Object, eline~ is for easy playing sound file like [line~] object.

 

Pd Patch

Screen Shot 2013 10 30 at 9 47 24 AM

 

Help

Screen Shot 2013 10 30 at 9 47 17 AM

 

Download

https://drive.google.com/folderview?id=0B42bn7ncw918a0h1QUdiV2VmYTA&usp=docslist_api#

Pd Object, auto-soundfiler

Description

Pd object, [auto-soundfiler] is for easy loading sound file to array.

 

Pd patch

Screen Shot 2013 10 30 at 10 13 29 AM

 

Help file

Screen Shot 2013 10 30 at 10 18 14 AM

 

Print sound file properties 

Screen Shot 2013 10 30 at 10 32 14 AM

 

Download

https://drive.google.com/folderview?id=0B42bn7ncw918RkxUQ0taVnJ4Zjg&usp=docslist_api#

2013-10-29

Pd Tips: set default local variable

$1 $2 와 같은 지역변수(local arguments)들은 기본 값이 0이다. 그러니까 아무 설정도 안 하면 기본적으로 0이 들어간다.

 

그런데 가끔 0이 들어오면 에러가 나는 경우가 있다. 그래서 이 경우를 대비해야 한다.

 

메트로놈 같은 경우, 템포가 0이 되면 시스템 자체가 정지해 버린다. 그런 경우에 기본 값을 정해주지 않으면 에러가 날 수 있다.

 

default local variable을 얻는 방법이다. [bang]은 bang 버튼인데, bng 라고 치면 되고, 클릭할 수 있다.

 

[bang]

|

[f $1]

|

[print]

 

기본 값이 0이다. bang을 누르면 0이 콘솔에 출력 될 것이다.

 

그러면 0이 아닌 다른 숫자를 넣어보려면 어떻게 할까?

Screen Shot 2013 10 29 at 4 10 53 AM

위 코드에서는 기본값이 정해지지 않은 상태, 즉 0일 때 999로 설정하도록 했다.

 

그러므로 아무런 지역변수 설정을 안 하면, 다음과 같이 0이 아닌, 999로 설정된다.

Screen Shot 2013 10 29 at 4 11 17 AM

 

지역변수 설정을 하면 당연히 그 값으로 정해진다.

Screen Shot 2013 10 29 at 4 11 50 AM

 

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

 

2013-10-27

Pd에서 함수 만들기, Wolfram Alpha로!

이렇게 볼프람 알파에서 공식을 입력한다. 절대값 연산자 | 는 구글에서 통하지 않았다 ㅠㅠ 유료 서비스라 돈을 내야 한다고 들었는데 그냥 되더라...

Screen Shot 2013 10 27 at 2 16 20 AM

 

자 그래프를 확인했으니 Pd로 만들어보자

Screen Shot 2013 10 27 at 2 21 30 AM

 

그리고 이렇게 정의역의 범위 지정도 가능하다고 한다. 깔끔하게 그래프를 뽑아 낼 수 있다.

Screen Shot 2013 10 27 at 9 54 00 AM 

 

 

감사:

좋은 팁을 알려주신 안신열님께 감사드린다.

Pd에서 함수 만들기, 구글 함수검색으로!

Pd를 쓰다보면 함수를 만드는 일이 늘상 다반사다. Pd 프로그래밍은 함수의 집합이라고 봐야 한다 ㅠㅠ

 

구글에서 원하는 공식을 검색한다. 형식은 f(x)=blahblah...

 

내가 찾고자 하는 공식은 f(x) = -(2x-1)^2 +1 이었다. 나도 확신을 못해서 계속 시도했다… 검색하니 자동으로 그려준다.

 

Screen Shot 2013 10 27 at 2 43 57 AM

 

자 이 검색된 공식으로 Pd에서 작업을 한다.

Screen Shot 2013 10 27 at 2 44 51 AM

 

잘 작동한다!

 

검색에서 절대값(abs)는 다음과 같이 사용한다. abs(…)

Screen Shot 2013 10 27 at 9 50 51 AM 

 

 

감사:

대박 팁을 알려주신 최승준님께 감사드린다.

Pd로 FFT 간략하게 맛보기

FFT란 무엇인가? 나도 모른다. 하지만 간략하게 뭔지 알아 볼 수는 있다.

 

대략 Fast Fourier Transform이라는 것의 약자이다. 빠른 푸리어 변환 이라는 의미다. 푸리에는 사람 이름이고, 옛날 물리학자다. 뉴튼같은 사람이라고 보면 된다.

 

그런데 왜 빠른(fast)를 사용하나? 나도 잘 모르지만, 음악에서는 거의 FFT를 쓰고, 간혹 Descrete인 DFT를 쓰는 분야도 있다고 한다. 거기까진 모르겠다.

 

그러면 Pd에서 해볼 수 있으니 한번 해보자. 뭔가 대단한 걸 하는 건 절대 아니고, 그냥 맛만 보는 것이다.

 

초보자를 위해 대략적인 개념은 이렇다. 

Screen Shot 2013 10 26 at 11 48 37 PM

 

그러니까 원본 사운드를 넣어서 분석기로 분해한 다음에 다시 재 조합하면 원본과 같은 사운드가 나온다. 물론 FFT를 하는 목적은 분해한 다음에 뭔가를 해야 하지만, 우리는 초보자이기에 그냥 다시 합친다. 예를 들면 그냥 개구리 배를 갈랐다가, 다시 배를 꼬맨 다음에, 개구리가 살아나게 하는 것 같은 거다. 개구리가 죽으면 실패고, 살아나면 성공이다. 그럼 개구리를 살려보자.

 

중요한 것은 FFT를 거치면 실수부와 허수부로 나뉜다는 것이다. 실수와 허수에 대해서는 수학의 정석을 찾아보라. 나는 모른다.

 

실수부는 real part라고 하며, 허수부는 imaginary part라고 한다. 고도의 뛰어난 이펙터들은 이 분해된 실수부와 허수부를 재 조합하여 아름다운 소리를 만들어 낸다. 그것은 나중에 고수가 되면 해보자.

 

일단 Pd에서 위에서 설명한 개구리 배 갈랐다 다시 꼬매서 살아나게 하는 것을 해보자. 패치는 다음과 같다.

Screen Shot 2013 10 26 at 11 41 23 PM

 

각 파트마다 오실레이터(Oscilator)를 달아 놔서 파형을 확인해 볼 수 있게 해 놓았다. 마지막에 /~64로 나누는 이유는 재 조합된 소리가 너무 커서 다시 줄이는(de-normalize) 것이다. 이와 같이 FFT의 원리에 대해 대충 맛만 보았다. 다음에는 좀 더 공부해서 쓸만한 것을 공유해 보겠다.

 

패치를 만들어 보실 분들을 위해 다시 적어보겠다. 형식은 웹에서 사용하는 형식이다. 익숙해 지면 편하다.

 

[osc~ 440]        <<= 임의의 소리, 아무거나 해도 된다.

|

[rfft~]

|      \

[rifft~]

|

[/~ 64]

|

[dac~]             <<= 기회는 평등할 것입니다. 과정은 공정할 것입니다. 결과물은 원본과 같을 것 입니다…!

 

이해는 안되겠지만, 그냥 맛만 보는데 의의를 두자.

 

Pd Patch를 첨부한다.

https://docs.google.com/file/d/0B42bn7ncw918dm9PVUZnNUtyRGc/edit?usp=docslist_api

 

2013-10-26

Pd에서 2차 함수 곡선 사용하기

0에서 1까지 슬라이더를 만들었다. 그런데 항상 1:1로 증가하면 재미가 없다. 그래서 처음에는 완만하게 증가하다 나중에 많이 증가하는 함수를 만들어 보자.

보통 당연히 0부터 1까지 증가하면 정비례로 증가하게 된다. 이런 식이다 편의상 1부터 5까지 하겠다.

정비례 증가
1 2 3 4 5
1 2 3 4 5

정비례 증가를 Pd에서 나타내 보겠다. 너무 당연해서 시시하다. 두 개의 슬라이더는 링크되어 당연히 똑같이 움직일 것이다.
Screen Shot 2013 10 25 at 21 16 59

하지만 이렇게 하고 싶다면? 예제가 대충 무슨 말인지 알 것이다. 1부터 5로 증가하는데, 결과는 차츰 증가하다가 나중에 많이 커진다.
1      2        3       4      5
1      1.1    1.5    3       5

그래프로 그려 보자면 이렇다.
Screen Shot 2013 10 25 at 21 07 54

x는 순차적으로 커지는데, y는 조금씩 커지다가 나중에 더 많이 커진다. 이것을 Pd에서 나타내 보면 이렇다.
Screen Shot 2013 10 25 at 21 11 11

[expr] 을 쓰고 있다. expression이라는 것의 줄임말이다. 이것은 수학 공식을 쉽게 쓰기 위한 객체이다.
$f1 은 들어온 값을 말한다. 그리고 *는 곱하기다.  그러므로 들어온 값을 서로 곱하면 된다.
이것이 x^2 (엑스 제곱)을 표현하는 식이다.

그러면 이런 것도 가능할까? y 값이 처음에 많이 커지다가 나중에 조금씩 커지는 모양이다. 이것도 2차 함수이긴 하지만 표현식이 조금 다르다.
Screen Shot 2013 10 25 at 21 10 14

Pd에서 나타내면 약간 이상한 모양이 나오지만 수학적으로는 이렇게 하면 된다. 나도 수학 전공은 아니라 모르겠지만 아무튼 나는 이렇게 한다.
Screen Shot 2013 10 25 at 21 11 16
이것을 하려고 수학의 정석 책을 뒤져가면서 했는데, 지금은 어떻게 했는지 까먹어서 간략하게 설명하겠다.
처음 값은 0에서 1까지다. 편의상 0 to 1 이라고 하겠다.
[expr 1-$f1] 은 들어온 값을 1 to 0으로 돌려 주는 것이다.
[expr $f1*$f1] 은 y=x^2과 같이 작동하는데 값이 반대로 되어 있다.
[expr 1-$f1]은 1 to 0 을 다시 0 to 1 으로 바꿔 주는 것이다.

동작 영상을 한번 봅시다.
http://youtu.be/JIfQjZOhgVw


물론 2차 함수 곡선 이외에도, [expr $f1*$f1*$f1] 으로 하면 3차 곡선이고 4번 하면 4차 곡선이다.







2013-10-23

Ubuntu에서 Pd Vanilla 컴파일 하기

우분투 소프트웨어 센터나 apt-get으로 설치가 가능하지만, 1년 전 옛날버젼으로 설치되므로 바람직하지 못하다. 물론 apt-get이 설치는 편리하지만 최신 버젼을 컴파일링 해서 쓰는 것이 바람직 하다.

물론 이런 컴파일 과정이 귀찮은 사람은 조금 옛날 버젼이 설치되지만, sudo apt-get install puredata 로 편하게 설치하면 끝이다. 그러면 이 귀찮은 것을 보지 않아도 좋다.



Pd Vanilla Source를 다운받는다.
http://msp.ucsd.edu/software.html
압축을 푼다. 다른 툴로 그냥 풀어도 된다.
tar xzf pd-0.45-3.src.tar.gz

해당 디렉토리로 간다. 내가 받은 버젼은 0.45-3이다.
cd ~/Downloads/pd-0.45-3

컴파일에 필수적인 automake가 설치되어 있는지 확인해 보고 없으면 설치한다.
$ sudo apt-get install automake

컴파일에 필요한 의존성 패키지를 설치한다. tk8.5는 깔아도 되고 안 해도 되지만 안 하면 폰트 문제가 생길 수 있다. (기본적으로 우분투는 tk8.4가 설치되어있다.) libtool이 없으면 ./autogen.sh 실행이 안 될 수도 있다.
$ sudo apt-get install libasound2-dev
(옵션) sudo apt-get install tk8.5
(옵션) sudo apt-get install libtool
(옵션) sudo apt-get install gettext

**추가: 2015-03-16 / jack2 on amd64
case 1> jack2를 쓸 경우엔 이걸 설치하지 않으면 안 된다.
$ sudo apt-get install libjack-jackd2-dev

case 2> jack1일 경우엔
$ sudo apt-get install libjack-dev


컴파일을 한다. 다음을 순서대로 입력한다. install은 sudo로 하는 게 좋다.
./autogen.sh
./configure                     (jack support필요하면, $ ./configure --enable-jack)
make
sudo make install

어디에 설치되었는지 확인한다. 확인할 방법이 애매한데, 일단 여기에 있다.
/usr/local/bin

실행파일은
/usr/local/bin/pd

자동으로 프로그램에 등록이 안되기 때문에 프로그램으로 등록해 주거나, 터미널에서 pd 라고 입력한다. 절대경로로 /usr/local/bin/pd 라고 입력해도 실행된다.

아이콘 등록이 안 되어 있으므로, 수동으로 등록해 주어야 하는데 png파일만 등록이 되므로 귀찮다. 소스파일에는 .ico파일만 들어있다. 그냥 아무거나 이쁜걸로 대충 넣어서 쓰자. ico를 png로 바꿔서 저장하면 간단하다.
혹시 에러가 나거나 잘 안 되면 uninstall, make clean을 해 본다.
make uninstall
make clean
재 설치



설명서 원문을 첨부한다.
Quick compilation instructions for Gnu/linux or Mac OSX, or Windows if you have
installed gygwin:  make sure "automake" is installed as well as the usual C
compiler chain.  Then in this directory, type "./autogen.sh", then
"./configure"; then "make".

Alternatively, you can use the fallback makefiles in "src" for gnu/linux, Mac
OSX, or Microsoft Visual C.  On linux, for example, cd to src and type "make -f
makefile.gnu" and (if you wish) "sudo make -f makefile.gnu install".

Special instructions for Microsoft Visual C: cd to src and type "make -f
makefile.nt".  Then CD to the various subdirs of extra and type "make nt" in
each.

Various dependencies: in linux and Mac you need TK (apparently always present
for Mac and usually there for linux).  On linux you may also need an ALSA
"dev" package: (yum install alsa-lib-devel) or (apt-get install libasound2-dev).

참고:
http://msp.ucsd.edu/Pd_documentation/x3.htm#s1.2
http://puredata.info/docs/developer/BuildingPd

2013-10-09

pdlisp object for Pd, MacOS에서 컴파일하기

pdlisp는 박성민이 만든 lisp 객체다. 사용이 아주 간편하다. lisp 스크립트를 pd에서 사용할 수 있다. 최대 장점은 실시간 사용이 완벽하다는 것이다. 10ms 단위의 빠른 계산도 무리가 없다. 내가 공부하는 프랑크푸르트의 전자음악 교수 Orm Finnendahl도 이 것에 대해 극찬하였다.


사용법은 프로젝트 사이트에 가서 다운 받아 사용하면 된다.

여기서 알아볼 것은 컴파일 해서 사용하는 법이다. 기능을 추가하거나, 코드를 발전시켜 보려면 이 과정이 꼭 필요하다.

방법을 소개하겠다.

----

OS Ver:
Mac OS X 10.8.5 Mountain Lion

준비물:
Xcode를 설치한 후 Command line tool도 설치한다.
homebrew
Pd-0.45-3 (버젼은 무관하다. 어자피 header만 따오기 때문에. 단, 꼭 32bit로 한다.)
ecl-13.5.1 (source)
pdlisp (source)


----

1. gcc 컴파일러를 설치한다. Mountain Lion에는 기본으로 llvm이 들어있고, gcc-4.2가 없다! 따로 설치를 해 줘야 한다. 먼저 homebrew를 설치해야 하는데, 공식적인 방법은 이렇다. http://brew.sh/ 에서 참고하거나 밑의 설치 스크립트를 쓰면 된다.

$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"


gcc-4.2설치 (박성민 권장)

$ brew tap homebrew/dupes && brew install apple-gcc42


2. 설치된 gcc-4.2의 폴더 위치를 알아내야 한다.

gcc경로 알아내기

$ locate gcc-4.2

알아낸 경로는 내 경우엔 /usr/local/Library/ENV/4.3 이었다. 다음에 나오는 export에 정확히 적어준다.

3. ecl을 다운받고 ecl 압축풀고 폴더로 간다. export CC=컴파일러위치 (박성민 권장)

$ export CC=/usr/local/Library/ENV/4.3/gcc-4.2 
$ export CFLAGS="-arch i386"
$ export LDFLAGS="-arch i386" 
$ CC=gcc-4.2 ./configure --disable-shared
$ make$ make install


### 경고! ./configure --disable-shared 이렇게안하면 ecl이 동적(dynamic) 라이브러리로 된다. 그럼 pd external object를 못 만든다. 반드시 주의한다.
### 확인! /usr/local/lib/ecl-13.5.1/librt.a 과 libcmp.a 확인, 있으면 정적라이브러리(static)으로 설치된 것이다.

설치되는 경로 /usr/local/lib/ecl-13.5.1/

ecl은 설치 완료 되었다. 다음 단계로 간다.
-----------

4. Pd로 링크를 해줘야 한다. 다운받은 Pd 폴더를 알아낸다. 경로만 파악하면 된다.

내 경우엔 여기였다. 하지만 다를 수도 있으니 꼭 확인을 해보자. 0.45-3을 다른 숫자로 바꾸면 아마 될 것이다. /Applications/Pd-0.45-3.app/Contents/Resources/src 이것을 잘 기억해 놓는다.

-----------

5. pdlisp 컴파일하기

자 본론이다. pdlisp를 다운받고 압축을 푼 뒤에 그 디렉토리로 간다.

$ export PD_INCLUDE=/Applications/Pd-0.45-3.app/Contents/Resources/src ### 경로는 앞서 4번과정에서 알아낸 것을 사용한다.
$ export ECL_LIBS=/usr/local/lib/ecl-13.5.1 ### 앞서 알아낸 경로를 입력해 준다.
$ make


만들어진 파일
pdlisp.pd_darwin

성공했다. pdlisp-help.pd를 Pd로 실행하면 된다. 단, 그 폴더에 pdlisp.pd_darwin과 help.lisp 파일이 존재해야 한다.

사용법은 기회가 되면 다시 설명하겠다. 멋진 작업을 해준 박성민에게 감사를 표한다.

해보고 안되면 저나 박성민에게 문의해 주세요.

2013-10-08

pure data에서 unix command 사용하기!

얼마 전에 awk에 대해 공부했다.

pure data에서도 사용할 수 있다!

awk은 unix 공통이라 가능하다. 윈도우에서 가능한지는 모르겠다.

여기 코드가 있다. 이걸 돌려보겠다.

#! /Users/jong/Desktop/shell-test.sh
ls -al | awk '{ print $5 }';




이 코드를 sh 파일로 저장한다. chmod +x로 실행 가능하게 하면 sh 추가실행 없이 된다, 하지만 안 해도 앞에 sh 붙여주면 그만!

pd-extended에 포함된 shell 이라는 객체가 있다.

Pd 코드는 대략 이렇다.

[sh 파일의/절대경로/파일.sh(
|
[shell]
|
[print]


Pd의 콘솔로 출력 결과를 확인해 볼 수가 있다.



다음은 주의사항이다.

1. 맥에서 path를 절대 경로로 입력해야 한다. ~/Desktop같이 ~/ 홈폴더 안 된다 ㅠㅠ
2. chmod +x로 executable 하게 만들 경우 sh를 빼고 [shell]로 보낼 수가 있다.


캡쳐 실수: [~/Desktop/shell-test.sh( now works가 아니라 IT'S NOT WORKS.
즉 안된다는 말이다. 꼭!! 절대경로로 입력해야 한다!!

다음은 전체 테스트 샷


마지막으로 pure data forum에서 도움을 준 sunji에게 감사한다.

이것으로 pd에서도 unix command를 쓸 수 있게 되었다. perl, awk 등등 많은 것을 시도해 볼 수 있을 듯. Text to Music에서 시도해 보자!

ToDo: Perl코드도 돌려보기

참고:
http://puredata.hurleur.com/viewtopic.php?pid=38682#p38682

더 볼것: 괜찮은 KLDP 한국어 문서
http://wiki.kldp.org/wiki.php/Awk

2013-03-23

[pd] send~, receive~ 와 throw~, catch~ 의 차이점

send~, receive~ 와 throw~, catch~ 의 차이점

대량의[ send~]를  [receive~]로 보내면 기술적인 문제발생.

대량의 오디오트랙을 한곳으로 보내려면, [throw~]로 보내서 [catch~]로 잡으면 된다.

-----

THROW AND CATCH
In the above example you may notice that outputs from delay lines
are not sent with [send~] back to [r~ out]. Audio signals can only have
one [send~] but many [receive~]. While there are technical reasons for
this difference, a handy pair of audio objects that can help to achieve
many-to-one sends are [throw~] and [catch~]. Many [throw~]s can
send audio signals to one [catch~].