목록개발 공부 (130)
음악, 삶, 개발
앞서 파트3 에서 [dict] 는 global 하게 [mtr] 전체를 업데이트 한다고 했는데, 각 개별 track inlet 으로 [dict] 를 넘길수있는데, 이에 대한 내용이 공식 문서에 나와있지않았고, 일종에 reverse 엔지니어링을 통해 발견하였다. 먼저 [dict] 속 데이터의 구조는 아래와 같다. { "events" : [ { "time" : 0, "message" : "hello", "args" : [1, 2, 3, 4, 5] } ], "length" : 0.0, "loop" : 0, "trackspeed" : 1.0, "type" : "track" /* 반드시!!!!!!! */ } 반드시 type 속성에 "track" 이라고 명시되어야하며, 이게 없다면 에러가 뜬다. 이를 내가 원하는 해..
앞서 addevent 를 사용하여 이벤트를 추가하는 방법을 배웠다. addevent 가 가장 기본적인 방법이긴하나, 동시에 수십개의 이벤트를 한번에 집어넣고싶다던지 한다면 결국 js 를 통해 루프를 만들어야할텐데 꽤나 귀찮은 작업일수있다. addevent 를 여러번 호출해서 이벤트를 추가하는 방법보다, 한번에 객체를 [mtr] 에 할당하는 방식으로 [dict] 를 넘길수있다. 먼저 [dict] 에 이벤트들을 작성한다. /* [dict] 안에 들어갈 데이터 */ { "tracks":[ { "events":[ { "time":0.0, "message":"list", "args":[ 1000.0, "two" ] }, { "time":0.0, "message":"list", "args":[ 0.0, "one" ..
addevent 라는 메세지를 통해서 [mtr] 에 특정 시점에 이벤트를 추가할수있다. 이 시점은 ms 또는 @sync 1 일 경우 tick 으로 정의된다. tick 으로 정의되는 경우는 추후 다른 포스팅에서 설명하도록 하고, 먼저 ms 로 event 를 추가하는 방법을 알아보겠다. addevent 메세지는 기본적으로 2개의 인자를 받게되는데, 첫번째는 어느 시점에 추가할지 ms인 float 이고, 두번째는 이벤트명이다. 하지만 이벤트명만으로는 이벤트를 추가하는데에 충분하지않다. 우리는 다양한 정보들 (velocity, pitch 등등) 을 저장하고싶을것이다. 이때는 길이의 제약없이 $3 $4 $5... 계속 늘려나갈수있고 이는 array 가 된다. ..
먼저 XCode 를 사용하지않고 VSCode 를 사용하려는 이유는, XCode 의 autocomplete 이 미치도록 느리거나 아예 안된다. 반면 VSCode 를 사용하면 매우 빠른 autocomplete 을 보여준다. Projucer 로 생성된 프로젝트 폴더를 VSCode 로 통채로 연뒤에 .vscode 라는 폴더를 생성한다. 그리고 이안에 c_cpp_properties.json 이라는 파일을 생성한다. 그리고 이 파일안에 아래 코드를 붙여넣기한다. // c_cpp_properties.json { "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**", "~/JUCE/modules" ], "defines": [], "m..
Max 7.2 Pressure (Polyphonic-Aftertouch) Slide Pitch 나는 MPE 가 지원되는 컨트롤러를 가지고있지않다.
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 를 추가할수있다. 사실 mt..
16 노트를 계속해서 플레이하는 간단한 패치를 만들었다. 주안점은 Live 의 transport 를 나타내는 [plugsync~] 와 [mtr] 에 저장된 event 가 어떻게 현재 Live 의 현재 position 에 맞혀 적절히 플레이되는가이다. ----------begin_max5_patcher---------- 2238.3oc6ZssiiaiD8Y6uBFirXSB7ngWJdaABvrOrXeY2ufjAMjs4zsxXKIH I2o6MXx29VjT1suHaKGKm7xzMPegrLopCqKmpn9swilLq3EW8Dx+f7SjQi9s wiFEFxOvn1+ezjUouLeYZcPrIyKVsxk2LYZbtF2KMgwe+6I+2zO6HKxl2PVW tHswkrQn70qxxW5ZBq.qcv..
디자인툴에서 말하는 Path 와 동일한 개념이다. 따라서 Illustrator 를 통해 Path 의 개념을 먼저 공부할것이다. (열린 Path, 닫힌 Path 등등..) GUI 를 디자인함에 있어, 가장 뿌리가 되는것이 Path 이므로 이 클래스에서 제공하는 멤버 함수들을 또한 모두 공부할것이다. Illustrator 에서도 Path 를 만드는데에 매우 많은 방법들이 필요한데, Path 클래스 또한 약 40가지의 Set 함수를 제공한다. 이 함수들을 이용하여 일러스트레이터의 Path 를 Juce 의 Path 로 옮기는 함수들을 작성할것이다. 뒤에서 보겠지만 Path 객체는 Graphics 클래스의 멤버 함수의 인자로 넘김으로써 그려지게된다. Path Class R..