| 1 | = Pd, Arduino Tips & Troubleshooting = |
| 2 | [[PageOutline(2-3,,inline)]] |
| 3 | |
| 4 | [[BR]] |
| 5 | * 관련 페이지: [wiki:컴퓨터프로그래밍개론TA] |
| 6 | |
| 7 | == Pd == |
| 8 | 항상 Pd Console 창에 나타나는 오류 메시지를 확인해 주세요. 메시지에서 해결의 실마리를 찾을 수 있습니다. |
| 9 | |
| 10 | === Mac에서 Pd를 실행하자마자 오류가 발생하는 경우 === |
| 11 | Pd를 실행하고 곧바로, Console 창에 빨간 글씨로 뭐라고 오류 메시지가 표시되고 나서 Mac 응용 프로그램 오류 화면이 표시되는 경우가 있습니다. |
| 12 | |
| 13 | 이 문제는 Pd를 삭제하고 다시 설치하거나, 다른 버전을 설치해도 해결되지 않습니다.[[BR]] |
| 14 | 일단 발견한 원인은 마지막으로 열었던 파일에 오류가 있을 경우입니다. Windows 버전에서는 그렇지 않는데, Mac에서는 어플리케이션을 실행하면 마지막에 사용하던 파일을 자동으로 다시 여는 듯 하네요. |
| 15 | |
| 16 | 해결 방법: |
| 17 | 1. Pd를 실행시켜서 오류 메시지가 무엇인지 확인한다. (빨간 글씨, 영문)[[BR]] |
| 18 | 메인창은 매우 짧은 시간 보이고 대신 오류 창이 나타나므로 여러 번 시도해 봐야 알 수 있습니다. |
| 19 | 2. 만약 `/경로/특정/파일 을 열 수 없습니다` 라는 메시지일 경우 해당 파일을 찾아, USB 메모리나 적당한 외부에 백업하고 나서 완전 삭제합니다. 디스크 내 이동이나 휴지통에 넣는 것으로도 해결되지 않습니다. |
| 20 | 3. Pd를 다시 실행시키면 정상 실행됩니다. |
| 21 | |
| 22 | 이런 방법 이외에, Pd가 설치된 경로를 명령창으로 찾아 들어가서 Debug 모드로 Pd를 실행해서 원인을 파악할 수도 있습니다. |
| 23 | |
| 24 | === Mac에서 Extra Library 설정법 === |
| 25 | OSC나 다른 추가 라이브러리를 사용하기 위해서는 Pd에서 Path 설정을 추가해 주어야 합니다.[[BR]] |
| 26 | 하지만 Windows에서의 설정 방법과 다르게, Mac에서는 프로그램 설치 폴더에 있는 경로를 선택하는 것이 허용되지 않습니다.[[BR]] |
| 27 | 일단 해당 폴더를 임의의 일반 문서 폴더 밑에 복사하고 그 폴더를 경로 선택하는 방법이 있지만, 좀 더 깔끔한 시스템 환경을 유지하고 싶은 분들을 위해 다음 방법을 알려 드립니다. |
| 28 | |
| 29 | 1. 열려 있는 Pd를 모두 종료합니다. |
| 30 | 2. Finder 실행 |
| 31 | 3. Menu에서 Go > Go to Folder 선택 |
| 32 | 4. 경로 입력 대화창에서 `/Users/(사용자이름)/Library/Preferences` 입력 |
| 33 | 5. `org.puredata.pdextended.plist` 파일 찾아서 열기 |
| 34 | 6. 여러 개의 항목 중에서 `pathXX`로 시작하는 마지막 항목을 새로 만듦 (예: `path36`) |
| 35 | 7. 값은 다른 `pathXX`의 값을 복사해서 수정. 경로의 예는 다음과 같음: `/Applications/Pd-extended.app/Contents/Resources/extra/mrpeach` |
| 36 | 8. 파일 저장 |
| 37 | 9. Pd 실행 |
| 38 | |
| 39 | === 전체 Wave 파일 재생하기 === |
| 40 | `doc/3.audio.examples`에 있는 예제는, 원본 wave file이 정확히 1초 (44100 Sample) 이거나 처음 1초만 사용하는 것을 기준으로 되어 있습니다. |
| 41 | |
| 42 | 녹음한 파일이 1초가 아니라면 |
| 43 | - 모자라면 공백을 넣어서 1초를 만들거나 |
| 44 | - 넘치면 1초 안에 들어가도록 다시 녹음하면 됩니다.;;; |
| 45 | |
| 46 | 하지만 이런 방법은 문제를 근본적으로 해결해 주지는 않지요. |
| 47 | |
| 48 | 해결을 위해서는 먼저 전체 Wave 파일을 다 읽도록 설정해야 합니다. |
| 49 | |
| 50 | 먼저 `table` (wave sample를 불러 오는) 의 property를 클릭하면 'Array Properties' 창이 뜹니다. |
| 51 | 여기에서 Size를 Wave File의 Sample 수만큼으로 조정합니다. |
| 52 | |
| 53 | 정확한 Sample 수를 알기 위해서는 `soundfiler` 개체 뒤에 `Number`를 하나 달고, 파일을 read 시키면 `Number` 개체에 Sample 수가 표시됩니다. |
| 54 | 이렇게 하면 전체 파일을 읽기는 하지만, 재생 속도가 맞지 않습니다. |
| 55 | |
| 56 | 완전한 해결을 위한 절차는 다음과 같습니다. |
| 57 | |
| 58 | 1. `soundfiler`의 입력 메시지를 `[read 파일명 테이블명]` 에서 `[read –resize 파일명 테이블명]`으로 변경 (대상 테이블의 크기를 알아서 변경해 줍니다.) |
| 59 | 2. `soundfiler`에서 나온 값 (총 sample 수) 를 이용하여 |
| 60 | 3. `phasor~`의 주파수를 계산하고 (44100 Sample일 때 1 Hz, x Sample이라면 y Hz. x와 y는 반비례 관계입니다.) |
| 61 | 4. `phasor~`에 곱해줄 값 (변동 Index) 도 전체 Sample 수로 바꿉니다. |
| 62 | |
| 63 | === Array, Save Contents === |
| 64 | `Array` 개체의 경우 배열이기도 하지만, Wave 파형의 모양이나 많은 양의 숫자를 저장해 놓을 수 있습니다. |
| 65 | 또한 그래프 영역에서 마우스를 Click-Drag 하면 그래프를 변형 (그리기) 할 수 있습니다. |
| 66 | |
| 67 | 해당하는 `Array` 위에서 오른쪽 Click - Properties를 선택하면 'Array Properties'와 'Canvas Properties'의 두 창이 나타납니다.[[BR]] |
| 68 | 이 중에서 앞의 제목의 창을 보면 'Save Contents' 라는 Check 항목이 있는데요. 이 체크가 되어 있으면 Pd 패치를 닫았다가 다시 열어도 Array의 마지막 값이 저장되게 됩니다. 주로 사용자 지정 입력을 기록해 놓을 때 사용하면 좋겠습니다.[[BR]] |
| 69 | 하지만 [tabwrite~] 와 같은 방법으로 Wave 파형을 보여주기 위한 Array의 경우, 이 체크를 해제하는 것이 좋습니다. 그때 그때 새로 만들어지는 내용이고, Patch 파일 크기만 커지게 하기 때문이지요. |
| 70 | |
| 71 | === `[metro]` 사용시 Stack Overflow 문제 === |
| 72 | `[metro]`를 동작시키려면 먼저 bang 신호를 주어야 합니다. 그리고 `[metro]`를 이용해서 다른 Object에 bang 신호를 주게 됩니다. |
| 73 | 그런데 `[metro]`의 입력과 출력에 똑같은 bang을 연결하면 |
| 74 | `[bang[` → `[metro]` → 곧바로 `[bang[` 실행 → 또 다시 `[metro]` → 반복... |
| 75 | 이렇게 되면서 무한 반복 실행이 되고, Stack Overflow라는 오류 메시지가 출력되게 됩니다. |
| 76 | |
| 77 | Pd의 어떤 버전에서는 오류 메시지만 발생시키고 별 영향이 없으나, 특정 버전에서는 발생할 때마다 소리가 뚝뚝 끊어지기 때문에 주의를 요합니다. |
| 78 | |
| 79 | 이를 해결하려면 `[metro]` 앞에 별도의 bang(`[bang[` 이나 `[bng]` 이나 `[loadbang]`)을 두고 |
| 80 | 뒤에는 `metro`에서 필요한 Object로 바로 연결해 주면 됩니다. |
| 81 | (이후의 `bang`에서 다시 `metro`로 돌려줄 필요가 없습니다.) |
| 82 | |
| 83 | === 기타 항목 === |
| 84 | - Gem에서 입체에 무늬 (Texture) 입히기 |
| 85 | - Message에서, Patch 단위에서 `$1`, `$2` 등 파라메터 사용 방법 |
| 86 | - Patch 단위로 고유한 이름 만들기 (table 이름 등): `$0`의 사용 방법 |
| 87 | - Pd에서 문자열 서식 조정 (String Formatting) 및 문자열 덧붙이기 |
| 88 | - !Speed/Pitch/Volume을 (독립적으로) 조절 가능한 소리 재생 |
| 89 | - `list` 조작법과 내용의 길이 세기 |
| 90 | - `list`에 대해 `pack` 및 `unpack` 사용 방법 |
| 91 | - 경계값 (Threshold) 을 넘을 때만 특정 동작을 하게 하기 |
| 92 | - 동시에 여러 소리를 재생하는 방법 |
| 93 | - 소리 파일의 일부 구간을 재생하는 방법, 반복 재생하는 방법 |
| 94 | - 소리의 방향 조정 (Panning) |
| 95 | - 소리의 크기 경계를 넘었을 때 특정 동작을 하게 하기 |
| 96 | - 숫자나 문자열 값 저장하기 |
| 97 | - 이벤트의 시간 간격을 측정하기, BPM 측정 방법 |
| 98 | - 카운터를 이용해서 이벤트가 일어난 횟수 세기 |
| 99 | - 특정 조건에 맞을 때만 파트가 동작하도록 하기 |
| 100 | - 한 Message로 여러 곳에 값 보내기 |
| 101 | |
| 102 | == Arduino == |
| 103 | === Arduino가 인식되지 않음 === |
| 104 | Windows 환경에서는 포트가 번호로 지정됩니다. (예: `COM3`, `COM4`, ...)[[BR]] |
| 105 | 컴퓨터에 연결된 아두이노의 시리얼 포트를 확인해 주세요. 시스템 정보 - 장치관리자 에서 확인할 수 있습니다.[[BR]] |
| 106 | 또한 휴대폰이 연결되어 있는 경우 2개 이상의 시리얼 포트가 보일 수 있습니다. |
| 107 | |
| 108 | Mac이나 리눅스 환경에서는 `/dev/tty.usbmodemXXX` (XXX는 숫자) 와 같은 형식으로 지정됩니다. |
| 109 | |
| 110 | Pduino Patch에서 사용하기 위해서는, |
| 111 | - 포트 선택 GUI Radio Button 이후에 있는 `[open X[` 메시지를 `[open /dev/ttyusbmodemXXX[` 로 변경하거나 |
| 112 | - 그냥 Radio Button을 순차적으로 선택하면서 Console에 표시되는 메시지를 확인합니다.[[BR]] |
| 113 | 대부분의 !MacBook 환경에서는, Bluetooth 모뎀 등등을 지나서 몇 번째 정도에서 Arduino 장치가 열렸다고 표시됩니다.[[BR]] |
| 114 | 이제 이 번호를 기억하고 이후에 사용하면 됩니다. |
| 115 | |
| 116 | === Pduino 문제 해결 === |
| 117 | ==== 명령을 전혀 듣지 않는 경우 ==== |
| 118 | - Port 번호 확인: 'Arduino 개발 환경'에서 확인, Windows에서는 장치 관리자에서도 확인 가능 |
| 119 | - 포트 선택 후 (open), Pin 입출력 모드를 설정하는 명령이 전달되어야 합니다. `loadbang`으로 한 번에 명령을 내리면, 순서가 뒤바뀔 수 있습니다. |
| 120 | - 경로 내에, 또는 같은 폴더에 `arduino.pd` 패치가 존재해야 합니다. (없으면 해당 개체의 테두리가 빨간색 점선으로 표시)[[BR]] |
| 121 | 이 파일이 Pd-Arduino 통신을 담당합니다. |
| 122 | - Reset 버튼을 눌러서 Arduino를 초기화 시킵니다. |
| 123 | - 여러 개의 Pd 프로그램을 실행시키지 않았는지 확인합니다. |
| 124 | - USB 케이블을 뽑았다가 다시 연결: 회로가 합선되었을 경우 (5V - Ground를 직접 연결) Arduino Board를 재연결하기 전까지 기계의 응답이 없을 수 있습니다. |
| 125 | - 다른 외부장치 제거 (주로 스마트폰) |
| 126 | - 컴퓨터 재부팅 (!) |
| 127 | |
| 128 | ==== `unknown_input_command` 라는 오류가 나올 경우 ==== |
| 129 | 통신 상태가 불량하거나 (거의 가능성이 없음),[[BR]] |
| 130 | 주로 Arduino 프로그램 공간에 Firmata가 아닌 다른 코드가 기록되어 있는 경우 발생합니다. |
| 131 | |
| 132 | - 케이블 연결 상태 확인 |
| 133 | - Firmata 재기록 |
| 134 | |
| 135 | === 기타 항목 === |
| 136 | - Analog Sensor의 값 범위에 따라 다른 동작을 하도록 만들기 |
| 137 | - Arduino Mega에서 Pduino-Firmata 사용법 |
| 138 | - Arduino에서 보낸 Serial 통신 데이터를 Pd에서 읽고 처리하기 |
| 139 | - Push Button 여러 개를 Analog 입력 Pin 1개에 연결해서 사용하기 |
| 140 | - Push Button을 누른 이후에 Pd에서 특정한 동작을 시작하게 하기 |
| 141 | - 초음파 Sensor를 사용할 수 있도록 Pduino-Firmata 수정 |
| 142 | |
| 143 | [[AddComment]] |
| 144 | ---- |
| 145 | [wiki:학교분류] |