음악, 삶, 개발
[mtr] 파트1 - 둘러보기 본문
< [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 는 현재 디버그용이므로 너무 깊이 생각하지말자.