음악, 삶, 개발

[mtr] 파트1 - 둘러보기 본문

개발 공부/Max 공부방

[mtr] 파트1 - 둘러보기

Lee_____ 2020. 11. 4. 02:12

< [mtr] > 

 

mtr 은 내가 너무너무도 기다려온 Max 8.1.6 에서 새로 추가된 object 이다.

mtr 은 multi-track-recorder 의 약자로 Max 에서 timeline 을 구현할수있는 event sequencer 이다.

사실 새로 추가된것은 아니고, 기존에 있었던 object 인데 거의 새로 쓰여진 object 이라고 보는게 맞다.

event 를 원하는 지점에 추가 또는 녹음할수있고 추후 이 event 들을 playback 할수있다.

 

공식문서에는 아래와 같이 적혀있다.

"Records messages and provides sequenced playback."

 

message 를 녹음하라고되어있지만, 녹음뿐만 아니라 sequencer 처럼 event 를 추가할수있다.

사실 mtr 을 sequencer 로 생각하고 접근하는것이 추후 mtr 을 이해하는데 훨씬 편할것이다.

Max 에서 timeline 을 표현하는 방법은 매우 어려웠다.

여러 방법들을 시도했지만 대부분 타이밍 문제를 겪었는데,

Max For Live 로 mtr 을 굴려본결과, 꽤나 매우 정확한 타이밍을 가질수있다. 


< mtr 의 track 만들기 >

mtr 1 을 하면 한 개의 트랙, mtr 2 를 2개의 트랙이다.

이 tracks argument 는 최대 128 tracks 까지 설정가능하며, (mtr 500 을 해도 128 트랙까지만 된다)

추후 변경 불가능하기때문에 객체가 생성될때 반드시 초기화되어야한다. 

내가 입력한 값만큼 inlet 과 outlet 이 추가되고,

해당 inlet 에 event 관련 메세지를 보내게되고, outlet 에는 play 할때 현재 event 가 출력된다.

tracks argument 를 입력하지않고 [mtr] 을 하면 하나의 트랙이지만,

패치의 가독성을 위해 [mtr 1] 로 작성하는것이 좋다.

이 포스팅에서는 [mtr 1] 을 기준으로 설명해갈것이다.


< [mtr] 속 정보를 가져오기 - [dict] 객체 >

 

[mtr] 관련 메세지를 배우기전에, 먼저 디버그 환경을 조성해놓는것이 바람직하다.

디버그 환경을 조성한다는것은 mtr 을 속을 console 로 찍어본다는것이다.

다행히 이것이 가능하다.

두가지 메세지를 mtr 로 보낼수있는데, info 와 dump 이다.

이 두 메세지는 반드시 첫번째 lnlet 으로만 보내져야한다.

이 메세지중 하나가 보내지고나면, 첫번째 outlet 으로 dict 를 출력한다.

 

info 는 트랙의 정보와 global 파라미터들을 보여준다. 

info 대신 bang 을 보내도 된다.

dump 는 각 track 들이 가진 event 들에 대한 정보를 보여준다.

현재는 아무 event 도 추가되지않았기때문에 위처럼 비어있는상태이다.


< mtr 디버그 환경 만들기 : [dict.route] >

 

info 와 dump 메세지가 보내지고 나면, 

똑같이 첫번째 inlet 으로 dict 가 나오는데

하나의 dict 만 사용한다면 이 둘을 동시에 볼수없을것이다.

이때 [dict.route] 를 사용하면 이들을 분리하여 출력할수있다.

info 와 dump 는 둘다 type 이라는 property 를 가지고있는데,

이들의 값이 각각 info 와 dump 이다.

따라서..

위와 같이 작성하면 둘다 동시에 출력을 할수있다.

하지만 우리는 실제 dictionary 속을 보고싶기때문에,

위의 메세지 박스대신, [dict.view] 를 연결한다.

[routepass dictonary] 를 연결한 이유는,

첫번째 inlet 에서 dict 가 아닌 다른 메세지가 나올때가 있기때문이다.

위와 같이 작성을 마쳤다면 이제 끝이다.

이제 내가 필요할때마다 저 update 버튼을 눌러주면 된다.

 

만약 내가 직접 누르기싫고, 계속 update 되길 원한다면

위와 같이 metro 를 추가해주자.

 

하지만 결국엔 track 에 event 가 추가또는 삭제될때만,

dict 가 업데이트 되는것이 현명할것이다.

하지만 위의 metro 는 현재 디버그용이므로 너무 깊이 생각하지말자.