Introduction to Max
우선 Max라는 프로그램은 지난 챕터에 간략하게 소개시켰지만 이번에 간략하게 설명하자면 뉴미디어 아티스트들에게 비주얼 프로그래밍 환경을 제공하는 프로그램이다. Max를 통해 Realtime Audiovisual works 리얼타임 시각/음향 작업물을 만드는 것에 초점을 둘 것이며 여러개의 Object들 (나중에 소개할 후디니에서 노드같은 것들)이 이어져서 어떻게 결과물을 나타내는 것인지 세부적으로 더욱 자세하게 알아보겠다.
Things to learn in this class
- Navigate your way around the Max patcher interface (Max 패쳐 인터페이스에 익숙해지기)
- Lock and unlock your patch (Max 패쳐 잠구고 풀기)
- Instantiate new objects and patch them together (새로운 Object 생성과 이어붙여보기)
- Create a simple patch that takes an input and transforms it into a modified output (인풋을 통해 수정된 아웃풋을 내는 심플한 패치 구성)
- Produce musical notes and using the mouse and other UI objects (마우스와 UI Object들을 활용한 심플한 악보 구성)
- Have a basic understanding of Max's order or operations (Max의 작동 단계의 대한 기초 이해)
Unlocking and Editing a Patcher
Max를 사용하는데 있어서 가장 많이 쓰게될 키들은 줌과 락을 담당하는 키들로써 각각의 용도에 맞게 기능을 제공한다.
| Zoom in (Z) | 심플하게 patch안에서 줌인 기능을 해주는 키이다 |
| Zoom out (Shift + Z) | 심플하게 patch안에서 줌아웃 기능을 해주는 키이다 |
| Lock or Unlock (Command + E) | Patch를 락하거나 언락하여 Object들을 건들수 있게 하거나 수정을 하지 못하게끔 만들 수 있다 |
Patching in Max
Max는 기본적으로 여러개의 element들을 그래픽 상에서 연결 연결하여 결과물을 내는 비주얼 프로그래밍 언어이다. 이는 지금까지 배워왔던 텍스트 상에서 코딩으로 프로그램을 짜던 것과 다르며 상대적으로 Non-programmers들이 많은 미디어 아티스트들에게 아주 유용하게 작용하는 것을 알 수 있다.
Terminology:
Patcher (Noun) - The visual canvas you are looking at it is called a patcher. Max documents (*maxpat files) are referred to as Max patchers (or patches). (Max를 키자마자 보이는 캔버스는 patcher이라고 일컬여진다. 그리고 Max 파일을 저장할때 생기는 도큐멘트는 Max patchers 혹은 patches라고 통용하면 된다)
Patch (Verb) - when you connect one thing to another thing, you patch them together. (만약 어떤 element를 다른 것과 연결한다면 이는 patch한다라고 동사로써 표한할 수 있다)
Max상에서 patch를 하려면 outlet이라고 부르는 object의 아래의 구멍에서 inlet이라고 불러지는 또다른 object의 윗 구멍으로 연결을 하면 된다.

즉 Max에서 object들을 포함한 element들을 위와 같이 outlet에서 inlet으로 연결하면 기존에 있던 정보는 그대로 아래로 흘러가게 된다.
만약 patch된 object들을 풀려면 어떻게 하면 될까? 이는 간단하다 윗 사진에서 보여진 것처럼 object사이의 연결된 줄을 Patch cord라고 하는데 이를 클릭하면 초록색이나 빨간색 버튼들이 나오게 된다. 이를 누른상태에서 연결된 Object에서 연결을 해제하면 저절로 patch cord가 사라져 연결을 취소 할 수 있다. 또다른 방법으로는 patch cord를 클릭하고 난후에 delete키를 눌러 아예 연결된 patch cord를 삭제할 수 있다.
Patcher Text
Max는 기본적으로 .maxpat이라는 파일로 저장되어 text의 형태로 정보들을 모두 담을 수 있다. 이때 이 정보들을 patcher상에서 보기 위해서는 .maxpat 파일로 저장된 텍스트를 patcher안에다 복사 붙여넣기 하여 파일을 열어보는 것이 가능하다. 이때 만든 파일들을 저장하려면 두가지 방식이 있는데...
Saving your works
Command + S를 눌러 save를 할때 .maxpat으로 저장할지 아니면 .maxproj으로 저장할지 max에서 묻는다. .maxproj으로 저장하는 순간 Max는 모든 patcher들을 내장되어 있는 미디어 파일들과 함께 저장하기 시작한다. 중요한건 아니지만 자세한건 이 설명들을 참조하면 된다.
https://cycling74.com/forums/problem-when-i-make-a-project
problem when I make a project - MaxMSP Forum | Cycling '74
(sorry my bad english) When I "save as project" open a new window, with some patchers. (some more *.maxpat) var.maxpat pan4S.maxpat and ...
cycling74.com
Objects (N)
그렇다면 여기까지 읽었다면 궁금할 것이다. 지금까지 그렇게 말하던 Object라는 것은 무엇일까? Object는 patcher상에서 무언가를 실행시켜줄 수 있는 가장 기본이 되는 요소이다. Object는 여러가지 종류가 있으며 그것에 따라 각기 여러가지 서로 다른 기능들을 제공한다. Max의 실력은 Object의 종류들을 얼마나 많이 아느냐에 따라 갈리는게 주될 것이고 그들이 어떻게 작동하는지 파악을 해야 마스터 했다는 소리를 들을 수 있다. Object를 생성하기 위해서는 patch를 unlock상태로 열어주어야 생성이 가능해질 것이고 이는 아까 언급한 Command + E 키로 조절 가능하다.

우선 기본적으로 Object의 정보들을 모두 담고 있는 형태를 Object box라고 부른다. 이때 Object Box안에 무엇을 써 넣는가에 따라 어떠한 Object가 생성될것인지 결정하는 계기가 된다. 이때 Object안에 들어가는 것들은 짧은 영단어 하나와 숫자가 들어가는 형태로 이루어진다. 이때 영단어 하나는 Object name이 될것이고 숫자는 Argument라고 불러지게 될 것이다. 이때 Argument는 주로 이 특정 object가 어떠한 방식으로 작동될것인지 결정하는 요인이 된다. Object는 아무 단어를 허용하지 않으며 Max상에서 지정된 특정 Object name만 받아들여 온전한 Object를 생성할 수 있다. 그렇지 않으면 Object상에서 유저가 써넣은 단어를 이해하지 못해 오류가 날것이며 이는 Object가 오렌지 색깔로 바뀌어 에러가 나는 상황을 초래할 것이다. 이러한 Max가 인식을 하지 못하는 Object을 Bogus Object이라고 부른다. 그말인 즉슨 Object Name을 작성할 때 스펠링 에러를 조심하여 작성하여야 한다. (만약 Vex를 공부한 후디니 유저라면 Object가 마치 Vex에서 보는 Function 즉 함수의 개념과 동일하다는 것을 계속 진도를 나아갔을시에 공감을 할 것 이다. 그말인즉슨 Vex의 visual programming적인 VOP과 Max에서 다뤄지는 patcher상안의 내용은 매우 닮아있을 것이며 배우는데 있어 더욱 수월해짐을 느낄것이다.)
또한 Object안에 여러개의 inlet과 outlet이 있을경우 각기 작동되는 방식이 달라진다.
Arguments
그럼 위에 설명한 Argument 즉 Object box안에 들어갈 숫자들은 무엇을 의미하고 우리들은 어떠한 숫자들을 고려하여 집어넣어야 할 것 일까? 이를 설명하기 위해 Argument가 무엇인지 제대로 알아야 한다. Argument는 Patch가 작동할때 Object가 가질 초기값 (or 설정값)이 될것이다. Argument는 object이 특정 어느 세팅값을 가질 요인으로서 작동할 것이며 Patch가 작동을 시작했을시에 Object이 특정하게 작동하게끔 만들어 주게끔 할 것이다.
*주의*
Argument는 Object안에서 Overwritten (덮어씌다) 될 수 있지만 Object는 항상 현재 가지고 있는 값들을 항상 시각적으로 업데이트하여 보여주지 않는다. 그렇다면 이것은 버그일까?
이러한 방식으로 Max가 작동되는 원리는 그저 유저들에게 Object이 작동할때 항상 어떠한 값을 가지고 시작한다는 것을 알리기 위함이다.

이 사진을 보면 object로 들어오는 값이 각각 7과 8인 것을 알 수 있다. 그리고 Object안에 있는 숫자는 + 12라고 적혀있는 것을 알 수 있다. 만약 그렇다는 것은 기존에 +12로 설정되어있던 값이 위의 7과 8이라는 새로운 숫자에게 덮어씌여져 더이상 argument로서 작동을 하지 않은 것을 볼 수 있다. 그러므로 결과값으로 기존에 있던 12는 사라지고 7과 8이 각각 만나 그 다음 object name인 +로 결합되어 각기 수가 더해져 15라는 결과값을 나타내는 것으로 볼 수 있다. 그러면 Object상에서 12가 사라졌다는 것을 디스플레이 해야하는데 그대로 12로 나타나있는 것을 알 수 있다. 그러므로 알 수 있는 사실은 object안에 있는 argument가 다른 숫자들로 인해 덮어씌여져도 바뀌어 지지 않고 그대로 현재 입력된 argument를 나타내는 것을 알 수 있다.
이는 생각보다 햇갈리는 개념이므로 차차 진도를 나아가면서 이해해보기로 하였다.
Messages (M)
Message는 inlet을 통해 받은 정보를 바꾸지 않는다는 점에서 Object과 다르게 작동한다. Message의 목적은 object에게 명령/지침을 내리는데 있고 object들에게 특정 message를 수행하고 있다는 점을 알려준다. Message는 말 그대로 box안에 아무거나 쓸 수 있으며 잠긴 patcher에서 유저가 클릭을 하거나 Bang이라는 수신호를 전달하게끔 할 수 있게 만든다. Max안에 있는 콘솔을 통해 message가 똑바로 전달되었는지 확인도 가능하다.

Max Console
Max 콘솔은 Max가 어떠한 명령을 시행할때 어떠한 값이나 에러가 결과값으로 나왔는지 유저들에게 알려주는 기능으로써 이를 통해 유저가 어떠한 것들을 결과로 추구해야 하는지 알 수 있다. 이때 빨간색으로 뜨는 것은 에러로서 어느 부분에서 에러가 뜨는지 유저들에게 알려주어 디버깅을 가능케 한다.

Numbers (I)
Number는 숫자를 담아주는 element로써 나중에 숫자를 많이 다루게 될 Max에서 아주 중요하게 작동할 요소이다. Max는 프로그래밍이라는 툴의 걸맞게 보통 숫자로써 소통한다. 그런데 연결될 Object들이 어떠한 수들을 원하는지, 그 수들이 어떠한 역할을 할 건지는 Object의 역할도 중요함으로 Max를 배우는데 있어 Object의 역할들을 충분히 아는 것이 중요하다.
Message와는 다르게 Number들은 patch를 껐다 키면 모든것이 초기화됨으로 유저들은 주의를 요구한다. 이는 message와는 다르게 특정 정보를 담아주는 역할을 하는대신 Number element를 통해 유저가 직접 UI object다루듯이 조절할 수 있는 목적으로 작동됨으로 중요한 수들을 저장하기 위해서는 number이 아닌 message를 사용해야 한다. (Number은 마치 후디니와 유니티에서 다루었던 tunable parameter들처럼 값들을 유동적으로 조절시키는 목적으로 사용된다). 후에 얘기할 내용이지만 Number box는 integer/float등 수들의 형태의 따라 종류가 여러가지 있으며 각기 목적에 따라 알맞는 타입을 설정할 수 있다.

Comments (C)
Comment는 프로그래밍에서 다루었던 것처럼 특정 말들을 남기고 싶을때 아무데나 쓰는 것이 가능케할 수 있는 요소이다. Comment는 주로 patch에서 어느 특정 부분이 어떻게 작동되는지 기록하기 위해 쓸 때 유용하며 유저가 나중에 어떠한 특정 행동을 통해 patch를 작동 시키려 할 때를 위해 미리 짤막한 노트를 쓰는 것을 가능케 한다.
Comment는 종류가 두가지 있는데 일반적으로 쓰여지는 것은 아래 좌측과 같고 또한 inspector -> Basic -> Bubble을 통해 아래 우측과 같이 Bubble형태로 쓰는 것을 가능케 한다.

Getting Help
그렇다면 Object들을 여러가지 사용하고 싶을때 그 많은 종류들을 어떻게 하나하나 다 기억하나? 사전처럼 바로바로 찾아서 쓸 수 있는 기능은 Max에는 없을까? 이는 Object을 우클릭 한 다음 Open (Object Name) Help을 클릭하여 이용할 수 있다. 아래와 같은 사진같이 Max는 각기 Object들이 어떠한 원리로 작동을 하는지 친절히 알려준다.

Assisstance Tooltips
그렇다면 알겠다. Object의 대한 설명은 이해 했지만 그렇다면 Object안에 여러개의 inlet과 outlet이 있다면 그것들의 원리를 각각 어떻게 구분할 것인가?
앞서 언급했듯이 Object에는 각기 다른 방식으로 작동을 하고 목적을 가진 여러개의 inlet과 outlet이 있을 수 있다. 이때 Max는 Assisstance Tooltip이라는 기능을 제공하는데 마우스를 inlet이나 outlet에 올려둔 상태에서 기다리면 짤막한 메세지를 뜨게끔 만들어 유저들이 이 특정 inlet/outlet이 어떠한 기능을 하는지에 대해 이해할 수 있게끔 해둔다.

Assistance tooltip으로도 이해하기 어렵다면 방금 전 소개한 help patcher과 같이 살펴보면 이 Object이 어떠한 원리로 작동되는지 감을 잡아 볼 수 있을 것이다.
Introduction to MIDI 1
MIDI란 Musical Instrument Digital Interface의 약자로써 음악과 악보의 특징들을 컴퓨터 상에서 나타낼 수 있게 한 커뮤니케이션 프로토콜이다. 이는 Max에서 제공하는 것 뿐만이 아닌 sound를 조절 할 수 있는 슬라이더, 특정 sound의 타입을 고를 수 있는 셀렉터, 더 나아가면 작곡을 하게 할 수 있는 DAW등이 포함된다.
이때 MIDI의 특징을 가진 object를 제공하는 object의 종류로는 Kslider과 Nslider 등이 있다.
| Kslider | 피아노 모양의 UI를 생성해주며 유저가 클릭한 건반의 note number를 left outlet로 내보내어준다. |
| Nslider | 악보 모양의 UI를 생성해주며 유저가 클릭한 위치의 note number를 left outlet으로 내보내어준다. |
Basic Arithmetic
앞서 말했듯이 Max는 Visual Programming language로써 수로써 많은 것들을 전달한다. 이때 inlet으로 흘려 들어온 값을 수식과 같이 특정 Object에서 변화를 주어 outlet으로 나타냈을때 다른 수로 변하게 만들 수 있을까? 이는 가능하다. 마치 함수의 개념과 같다. 이를 통해 Max를 사용하여 간단한 계산기를 구축해볼 수 있다.
Object은 영단어 뿐만이 아닌 수식 기호조차도 Object Name으로 삼을 수 있으며 이를 통하여 Object 자체를 수학적인 함수의 개념으로 만들 수 있다. 예를 들면 다음과 같다.

Max's right-to-left order
그렇다면 또한 마지막으로 궁금증이 생긴다. 만약 아래 사진과 같이 하나의 정보로부터 두개의 각기다른 object을 통해 흘려 내려보내면 어느 정보가 먼저 나올것일까?

정답은 오른쪽에 있는 object부터 먼저 실행될 것이다. 이는 patcher내부에서 오른쪽에 있는 결과값을 먼저 우선시하는 Max의 특성인데 이를 통해 patcher안에서 object을 어느 위치에 놓아야 할 건지 고려해야 하는 상황에도 놓이게 된다. 이러한 원리를 통해 위 예시를 예를 들면 콘솔창에서 확인을 했을 시에 B가 먼저 print되고 그다음 A가 Print되는 것을 겪게 될 것 이다.

Max는 프로그램이기도 하지만 비주얼 프로그래밍 언어이다. 그러므로 인해 유저가 patcher안에서 어느 위치에 object을 올려놓는지도 아주 중요한 요소가 되어 결과값에 영향을 미칠 것 이다.
그리고 마지막으로 Max에서 사용되는 Object을 제외한 여러가지 (message/number/commend/button/toggle)들도 모두 Object으로 통용된다. 이들도 또한 Object의 종류지만 담당하는 특정 기능들이 중요하게 작용되어 Max상에서 분리를 해놓은 것뿐이다. 그러므로 다음 챕터부터 이들을 몽땅 무그려뜨려 지칭할때 Object라고 지칭하겠다.
이 챕터를 통해 Max의 기본 인터페이스와 기초적인 작동방식을 알아보았다. 다음 챕터를 통해 본격적인 MIDI를 사용한 작업을 통해 음향적으로 어떠한 결과물을 낼 수 있는지 알아보겠다.
'Interactive Art > Max_Interactive and Digital Arts' 카테고리의 다른 글
| Module 5 - Working with Audio in Max (0) | 2022.10.31 |
|---|---|
| Module 4 - Working with Video in Max (0) | 2022.10.20 |
| Module 3 - Working with MIDI Input and Output (0) | 2022.10.20 |
| Module 1 - Overview of Interactive and Digital Media (0) | 2022.09.14 |