Alex McLean (TidalCycles) 인터뷰

(haskell.foundation)
0작성자: admin#00002시간 전0개의 댓글

생성형 AI가 사용된 요약입니다

  • 음악과 프로그래밍, 전통 공예를 교차하며 탐구하는 라이브 코딩 환경 'TidalCycles'의 창시자 Alex McLean의 철학과 기술적 진화 과정을 심도 있게 다룸.
  • 하스켈(Haskell)의 엄격한 타입 시스템과 고수준의 추상화가 음악적 리듬을 '시간에서 이벤트로의 함수'로 표상(Representation)하는 데 결정적인 역할을 했음을 규명함.
  • 남인도의 전통 구음 리듬 체계인 코나콜(Konnakol) 및 고대 직조(Weaving) 패턴과 같은 비서구권·비컴퓨터적 지식을 통해 알고리즘적 사고의 지평을 넓히고 있음.
  • 복잡한 설치 과정에도 불구하고 자생적으로 진화한 커뮤니티(Algorave 등)와 이를 타 언어(JavaScript 기반 Strudel)로 확장하며 포용적이고 유연한 라이브 코딩 문화를 구축함.

하스켈(Haskell)과의 첫 만남과 언어에 대한 유연한 태도

  • 런던 골드스미스 대학(Goldsmiths)에서의 학제간 융합 연구 경험
    • 예술과 컴퓨팅 기술(Arts and Computational Technology)이 결합된 프로그램에서 석사 및 박사 과정을 수료함.
    • 학과 내에 음악가, 작곡가, 음악 심리학자들이 혼재하는 매우 융합적인 환경이었음.
  • 기존 주력 언어였던 Perl에서 Haskell로의 전환
    • 수년간 독립 레이블 등에서 Perl 프로그래머로 활동했으나, 학문적 환경에 진입하며 '가면 증후군(Impostor Syndrome)'을 극복하기 위해 더 진지하고 학술적인 언어를 찾고자 함.
    • 초기에는 Lisp을 고려했으나, Audrey Tang이 Haskell로 단기간에 Perl 6(Pugs)를 구현한 사례에 깊은 인상을 받아 Haskell 학습을 시작함.
  • 프로그래밍 언어 생태계의 배타성에 대한 비판적 시각
    • 대학에서 특정 언어(예: Java, Lisp)를 강요받지 않는 자유로운 환경에서 수학함.
    • Scheme을 사용하는 동료(Dave Griffiths)와 Haskell을 사용하는 본인이 한 무대에서 라이브 코딩을 하는 것을 보고 놀라는 사람들의 반응을 흥미롭게 여김.
    • Haskell의 높은 추상화 수준이 오히려 여러 프로그래밍 언어 간의 연결성을 파악하게 해주는 통합적인 경험을 제공한다고 주장하며, 에디터나 운영체제, 언어에 대해 영역 다툼(Territorial)을 벌이는 문화를 지양해야 함을 강조함.

라이브 코딩(Live Coding)의 태동과 TidalCycles의 탄생 배경

  • 라이브 코딩 실천의 구체적 동기
    • 라이브 코딩은 코드가 해석(Interpret)되는 동시에 REPL과 같은 환경에서 음악적 구조를 조작하여 실시간으로 음악을 생성하는 행위임.
    • 2000년대 초반부터 알고리즘 음악에 관심을 가졌으며, 초기에 Perl 기반의 환경인 feedback.pl을 개발함.
    • 그러나 재즈 즉흥 연주 드럼 연주자(Alex Garacotche)와 협업할 때, 스크래치(백지상태)에서 코드를 짜서 소리를 내기까지 수 분이 걸리는 Perl 환경의 성능 한계가 즉각적인 상호작용을 방해함.
  • 새로운 언어(TidalCycles) 설계를 위한 이론적·기술적 영감
    • 매우 빠르고 즉각적으로 패턴을 생성할 수 있는 언어의 필요성을 체감함.
    • Bernard Bel의 Bol Processor: 북인도의 타블라(Tabla) 타악기 리듬을 표현하기 위해 만들어진 논리 프로그래밍 시스템으로, 다중 박자(Polymeter), 폴리리듬, 임베디드 리듬을 처리하는 방식에 큰 영감을 줌.
    • Laurie Spiegel의 에세이: 음악적 패턴 조작에 관한 짧고 아름다운 철학적 통찰이 시스템 설계에 영향을 미침.
    • Haskell의 엄격한 타입 시스템(Strict Typing)의 이점: 리듬의 구조를 명확히 표상(Representation)할 수 있도록 강제하였으며, 리듬에 대한 스스로의 이해를 점진적으로 심화시키는 강력한 도구가 됨.

임베디드 도메인 특화 언어(eDSL)로서의 TidalCycles

  • Haskell 학습 과정 및 구조적 영감
    • Graham Hutton의 저서를 통해 파서 제작 등 Haskell의 기초를 체계적으로 다짐.
    • Conal Elliott과 Paul Hudak의 함수형 반응형 프로그래밍(FRP, Functional Reactive Programming) 논문에서 큰 영향을 받음.
    • 모나드(Monad)의 엄밀한 수학적 정의를 완벽히 이해하기보다는, 패턴 속의 패턴을 다루기 위해 독립적으로 unwrap이라는 개념을 고안했다가 나중에 그것이 모나드의 join과 같다는 것을 깨닫는 등 감각적이고 실천적으로 습득함.
  • 언어 내장형 구조의 장점
    • TidalCycles는 단순한 프로그램이 아니라 Haskell 내부에 구축된 임베디드 도메인 특화 언어(eDSL)임.
    • 패턴 타입(Pattern Type)과 이를 조작하는 수많은 콤비네이터(Combinator) 함수의 결합으로 구성됨.
    • '오버로디드 스트링(Overloaded Strings)'을 활용해 문자열 구문 내에 시퀀스를 표현하는 미니 표기법(Mini-notation)을 성공적으로 구현함.
    • 결과적으로 프로그래밍을 모르는 수만 명의 예술가들이 자신도 모르는 사이에 Haskell을 작성하며 음악을 만들고 있음을 긍정적으로 평가함.

라이브 코딩의 시간성(Time)과 상태(State) 처리

  • 에러 대응과 순환적(Cyclic) 음악의 특성
    • 사용자는 타입 에러보다는 구문 에러를 더 자주 겪지만, 수정된 코드가 제대로 평가되지 않아도 기존의 루프가 계속 재생됨.
    • 테크노와 같은 음악은 기본적으로 순환적이므로(예: 4주기 반복), 평가가 빗나가도 다음 주기를 기다려 자연스럽게 코드를 실행할 수 있음.
  • 연주자 개입과 시간적 동기화
    • 라이브 코더는 스스로가 프로그램의 '상태 변경자'로서 직접 개입함.
    • 시스템이 코드를 모듈로(Modulo) 연산하여 정해진 박자에 정확히 맞추어 지연 실행(Delay)하도록 설정할 수도 있지만, 많은 경우 연주자가 직접 '평가(Evaluate)' 버튼을 누르는 순간 바로 컷(Cut)이 일어나도록 함.
    • 이는 박자의 첫 시작점에서 깔끔하게 전환하려는 목적뿐만 아니라, 의도적으로 박자를 삐걱거리게(Wonky) 만들어 예술적 긴장감을 주고자 하는 연주자의 통제권을 보장하기 위함임.
  • 무상태성(Statelessness) 기반의 순수 함수
    • Tidal의 기본 타입 내에는 외부 상태가 존재하지 않으며, 오로지 '시간(Time)'만이 시스템에 주입되는 유일한 상태임.
    • 컨트롤러 값이나 이전 이벤트에서 상태를 전달받는 함수 패턴도 구성 가능하나, 본질적으로 완전히 상태가 없는 순수 타입(Stateless, Pure Type)이므로 하나의 패턴을 다른 패턴으로 교체하는 작업이 매우 직관적임.

TidalCycles의 아키텍처와 구동 방식

  • 시스템 구성 요소와 네트워크 프로토콜
    • 라이브 코더는 Emacs, Vim, VS Code 등의 범용 에디터에 플러그인을 설치하여 사용함.
    • 이 플러그인들은 GHCi(Haskell 인터프리터)의 프론트엔드 역할을 하며, 공백으로 구분된 코드 블록을 GHCi로 전송하여 평가함.
    • (에러 메시지 등 모든 피드백은 GHCi의 출력값을 그대로 반환받음)
    • 코드가 실행되면 패턴을 담고 있는 가변 변수(Mutable Variable)가 업데이트됨.
    • 스케줄러가 이 패턴을 기본적으로 초당 20회(20Hz) 쿼리(Query)하여, 생성된 사운드 제어 메시지를 OSC(Open Sound Control) 프로토콜을 통해 외부로 전송함.
  • 사운드 생성 및 발전 과정
    • TidalCycles 자체는 소리를 합성하지 않는 순수한 '패턴 엔진'임.
    • 초기에는 C로 구현된 Dirt라는 샘플러를 사용했으나, 이후 SuperCollider 환경에서 동작하는 SuperDirt로 진화하여 더욱 정교한 사운드 합성과 MIDI 기기 제어가 가능해짐.

비서구권 리듬(Konnakol) 탐구와 패턴 표상(Representation)의 혁신

  • 서구 음악 이론의 탈피
    • 정규 음악 교육을 받지 않은 것을 오히려 '초심자의 마음(Beginner's Mind)'을 유지할 수 있는 장점으로 여김.
    • 서구의 전통적인 악보 기반 접근(Score-based Approach, 예: Paul Hudak의 Haskell School of Expression)에서 벗어나 대안적인 리듬 체계를 모색함.
  • 남인도 코나콜(Konnakol)과의 조우
    • 코나콜: 특별한 의미 없이 오직 리듬적 소리(예: tadhinginatom, takadina)만을 내는 음절(Syllables)들의 조합으로 이루어진 고대의 구음 실천.
    • 고도로 수학적이고 알고리즘적인 특성을 띠며, 수십 박자에 달하는 거대한 미터 주기(Tala, 탈라)에 맞추어 음절의 길이를 팽창하거나 압축하는 정교한 연산을 인간의 몸으로 수행함.
    • 알고리즘 음악의 기원을 50~80년의 컴퓨팅 역사가 아닌 수천 년 된 인류의 리듬적 강박에서 찾고자 함.
  • TidalCycles의 구조적 한계와 극복
    • 기존 Tidal: 모든 것을 '주기(Cycle)'를 기준으로 연산함(예: 패턴을 뒤집으면 전체 시퀀스가 아닌 각 주기 내부가 뒤집힘). 그러나 코나콜은 주기 내부의 '비트(Beat) 기반 단계적 변환'을 수반함.
    • 한때 아날로그적 연속 신호(Signal)와 이산적 이벤트(Discrete Event)를 통합하기 위해 타임 스팬(Time Spans) 전체를 쿼리하는 복잡한 함수 구조로 전환했으나, 함수 자체를 래핑(Wrapping)하는 방식 탓에 비트 기반 변환에 접근하기 어려웠음.
    • 복잡한 타입 클래스로 통합하려던 시도가 너무 난해해지자(Lost in the weeds), 결국 초기의 단순한 패턴 타입으로 돌아가 '단계 수(Number of Steps)'라는 추가 필드만 삽입하는 방식으로 우회함.
    • 이 작은 메타데이터의 추가만으로 두 패턴을 결합하는 완전히 새로운 방식과 남인도 카르나틱(Carnatic) 음악 구조를 모사할 가능성이 열림.

커뮤니티 성장, 시스템 포팅, 그리고 라이브 코딩 문화

  • 척박한 설치 환경과 커뮤니티의 연대
    • Haskell, SuperCollider, SuperDirt, 에디터 플러그인 등 무거운 시스템들을 하나로 엮어야 해서 초기 설치(Installation)가 큰 진입장벽이자 일종의 트라우마로 작용함.
    • Haskell 바이너리 통합 시도(Summer of Haskell)가 실패하기도 했으나, 이 과정에서 사용자들이 서로 돕는 지역 커뮤니티가 강력하게 결성됨.
  • 소스 코드 해체 및 타 언어로의 포팅
    • 스스로 Tidal 원본 코드를 보지 않고 Haskell로 밑바닥부터 2시간 만에 다시 구현해보는 라이브 스트림을 진행함.
    • 이를 통해 코드의 구조가 유연해지고 다른 사용자들의 이해도가 급증함.
    • 결과적으로 Python, Lua 등 다양한 언어로 포팅되는 계기가 되었으며, 특히 JavaScript 기반의 포팅인 Strudel (Felix Roos 참여)은 독자적이고 거대한 웹 오디오 커뮤니티로 성장함.
    • Strudel은 연산자 오버로딩이 불가능한 JavaScript의 한계 탓에 메서드 체이닝(Method Chaining)을 사용하지만, 코어 로직은 Haskell 버전을 사실상 직역(Verbatim Translation)한 것임. (현재는 양 언어 간 아이디어가 상호 이식되는 Two-way street 상태임).
  • 알고레이브(Algorave)와 포용적 문화
    • Algorave: 알고리즘(Algorithm)과 레이브(Rave)의 합성어. 코드를 짜서 댄스 음악을 만드는 파티 문화.
    • 기존의 전자음악이나 컴퓨터 과학 커뮤니티가 특정 인구 집단에 독점되는 경향을 타파하고자, 젠더 표현 및 음악적 배경의 다양성을 포용하는 대안적 공간으로 기획되어 성공을 거둠.
    • 상업적 틱톡(TikTok) DJ부터 극단적 실험 노이즈 음악가까지 스펙트럼이 매우 넓어짐.

학제간 연구: 직조(Weaving)와 알고리즘 패턴의 발견

  • 직조 기계와 라이브 코딩의 융합
    • 뮌헨 Deutsches Museum의 Penelope 프로젝트에 '파라 아카데믹(Para-academic, 대학 외 연구자)' 자격으로 참여함.
    • 소형 베틀(Loom)을 라이브 코딩으로 제어하여 직조의 3차원적 속성과 간섭 패턴을 연구함.
    • 최근에는 TC2 산업용 프로토타이핑 베틀의 네트워크 프로토콜을 리버스 엔지니어링하여 Tidal이나 셀룰러 오토마타(Cellular Automata) 규칙으로 제어하는 실험을 진행함.
  • 수공예에서 배우는 컴퓨터 과학의 태도
    • 영국의 비영리 단체 Then Try This에서 'Algorithmic Pattern' 프로젝트를 이끌며 직조, 저글링, 무용, 종치기(Bell ringing) 등 고유의 기호 체계(Notation)와 수치적 변환에 집착해 온 인류의 역사를 연구함.
    • 컴퓨터 과학자들은 흔히 전통 공예에 접근할 때 '해결해야 할 문제'를 찾으려는 오만함을 보이나(AI를 통한 무분별한 개입 등), 고대 직조공들은 이미 그 문제를 수평생 다루어 왔음.
    • 따라서 기술이 공예를 구원하는 것이 아니라, 역사 깊은 수공예의 암묵지(Tacit Knowledge)를 이해하고 이를 빈약한(Impoverished) 최신 컴퓨터 과학 프로그래밍에 영감으로 수혈하는 것이 본질임을 역설함.
  • 진로에 대한 조언 (공간의 창출)
    • 기존 학계의 낡은 위계질서 내에서 승진하려 하기보다, 새로운 일들이 발생할 수 있는 '공간(Space)과 독특한 조건'을 직접 만들고 커뮤니티를 구축할 것을 권장함.

예측 불가능성과 미래의 발전 방향

  • TidalCycles의 무한한 확장성과 뜻밖의 활용 사례
    • 로봇의 춤 제어, 공압으로 개조된 해체된 아코디언 제어(Alexandra Cardenas) 등 음악 이외의 물리적 제어에도 활발히 사용됨.
    • 아름다운 상업적 트랜스 음악부터 형언할 수 없는 극단적 노이즈에 이르기까지 산출물의 범위가 방대함.
    • 하지만 범용 패턴 시스템이라 할지라도 대상을 무작정 조작하기만 해서는 안 되며, 패턴화하려는 '재료(Material) 자체의 본질'에 대한 겸손한 이해가 선행되어야 함을 강조함.
  • 기술적 미래 과제와 비전
    • 단계 수(Number of Steps)의 패턴화: 현재 고정된 값(시간 값/유리수)으로 존재하는 단계 수 자체를 패턴으로 만들어, 모나딕 결합(Monadic Binds and Joins)을 통해 사운드의 위상을 더 복잡하게 꼬아보는 것을 실험 중임 (코드의 구조 변경이 청각적으로 어떤 결과를 낳을지 예측할 수 없는 딜레이된 깨달음의 미학을 즐김).
    • 시각적 프론트엔드 구축: 공간적 배치나 단어 간의 근접성(Proximity) 자체가 코드의 매개변수가 되는 2차원적 언어를 구상함.
    • 단어의 형태론(Morphology)과 구조의 결합: 의성어(Onomatopoeia)처럼 프로그래밍 언어의 텍스트 이름이 사운드의 속성과 물리적으로 연결되는 실험을 구상하며 융합적 가능성을 계속해서 확장해 나갈 것임.

댓글

댓글을 남기려면 로그인하세요.