Live API에 접근하기 - Live Object Model
Ableton Live의 Live Object Model(LOM)을 통해 Max for Live에서 Live의 모든 트랙·디바이스·클립에 접근하는 원리. live.path, live.object, live.observer의 역할 분담을 정리합니다.
Cycling74가 Ableton에 인수된 영향일까. Live와 Max의 연계성은 Max for Live가 등장한 이래 그 어느때보다 가장 많이 통합되고, 발전되어있다. 그 중에서도 확실히 달라졌다고 느끼는 것은 Max for Live 디바이스를 제작하는데 필요한 내용을 정리한 Live Pack이 출시되었다는 점 아닐까.
Max for Live의 가장 흥미로운 기능 중 하나는 Live API를 이용하여 Ableton이 가진 거의 대부분의 매개변수에 직접 액세스가 가능하다는 점이다. 이를 통해 특정 길이의 시간를 4마디로 나눴을 때의 BPM을 계산한다거나, 플러그인 세팅을 바꾸거나 모듈레이션 할 수도 있다.
Live API는 여느 다른 형태의 API와 비슷하게 get, set 등의 명령어를 통해 LOM(Live Object Model)로 명명된 구조체에서 특정 파라미터를 가져올 수 있다. LOM의 구조 및 자세한 레퍼런스는 Cycling74 내부 문서(https://docs.cycling74.com/max8/vignettes/live_object_model)에서 확인할 수 있다.
Live API는 LOM의 계층에 따라 각각 Object Id를 부여하고, 오브젝트를 호출하여 특정 파라미터를 작동시키는 형태를 따른다. 만일 내가 현재 내 Live 프로젝트의 템포를 가져오고 싶다면 [live.path] 오브젝트에 this_device 메세지를 입력하여 Object Id를 가져온 뒤, getpath를 [live.object]에 입력하게 되면 현재 내 디바이스의 위치를 Live Object Model의 계층구조를 따른 다음과 같은 패턴이 나온다.
live_set tracks 1 device 0 은 현재 내 Live 세트의 첫번째 트랙의 첫번째 (device의 인덱스는 0부터 시작하며, tracks 0은 마스터 트랙을 가리킨다.) 디바이스의 위치를 호출하고 있다는 사실을 알려준다. 또는 현재 디바이스의 위치에서 상위 계층 (트랙)을 호출하기 위해선 this_device canonical_parent 를 live.object에 입력하면 된다.
만일 내 Live 세트의 템포를 바꾼다면 live_set의 경로를 구한 뒤, live.object에 set tempo 명령어를 통해 M4L에서 템포를 바꿀 수 있다.
자주 묻는 질문
Live Object Model(LOM)은 어떻게 구조화되어 있나요?
LOM은 트리 구조로 Live Set을 표현합니다. 최상위는 live_set이고 그 아래에 tracks(트랙 배열) → 각 track의 clip_slots/devices/mixer_device → 각 clip의 notes/envelopes 같은 식으로 가지처럼 뻗어 있습니다. Max for Live에서는 [live.path]로 경로를 지정하고 [live.object]로 해당 노드의 속성을 읽거나 씁니다. 예: 'live_set tracks 0 mixer_device volume' 경로로 첫 번째 트랙의 볼륨 페이더에 접근. 전체 레퍼런스는 Cycling74 공식 문서(docs.cycling74.com/max8/vignettes/live_object_model)에 있습니다.
Live API로 무엇을 만들 수 있나요?
Ableton 내장 기능으로 불가능한 거의 모든 인터랙션을 구현할 수 있습니다. 예: (1) BPM이나 박자에 따라 자동으로 변하는 LFO 모듈레이션, (2) 사용자 입력에 반응해 클립을 동적으로 생성·삭제, (3) 여러 트랙의 파라미터를 하나의 매크로로 묶어 매핑, (4) MIDI 노트나 오디오 분석 결과를 기반으로 다른 디바이스 파라미터 조작, (5) 외부 컨트롤러(Push, Launchpad)와 Live의 비표준 매핑. Push 2의 사용자 모드, Launchpad의 사용자 스크립트도 모두 Live API 위에 구축됩니다.