MayaFlux 0.1.0: 디지털 창작을 위한 인프라

발행: (2026년 1월 2일 오전 03:33 GMT+9)
20 분 소요
원문: Dev.to

I’m happy to translate the article for you, but I’ll need the text you’d like translated. Could you please paste the content (or the portion you want translated) here? I’ll keep the source link at the top and preserve all formatting, markdown, and technical terms as requested.

MayaFlux 0.1.0 – Release Overview

MayaFlux 0.1.0이 이제 사용 가능합니다. 이것은 다른 창작‑코딩 프레임워크가 아닙니다; 15 년간의 학제간 퍼포먼스 실천, 교육, 연구, 그리고 제작 DSP 엔지니어링을 바탕으로 만든 계산 인프라스트럭처입니다.

Core Philosophy

  • C++20/23 멀티미디어 계산 프레임워크로, 기존 도구들의 여러 근본적인 가정을 거부합니다.
  • 아날로그 합성 메타포(오실레이터, 패치 케이블, 엔벨로프 제너레이터)는 디지털 계산을 제한하지 않았던 하드웨어에서 차용된 교육용 지렛대에 불과합니다.
  • MayaFlux는 다음을 수용합니다:
    • 재귀 및 선‑예측 처리
    • 임의 정밀도 및 교차‑도메인 데이터 공유
    • 아날로그에 해당하지 않는 계산 패턴(다항식은 데이터를 조각하고, 논리 게이트는 창의적 결정을 내리며, 코루틴은 시간 자체를 조정)

Unified Processing Model

오디오, 비주얼, 그리고 제어 처리는 대부분의 상용 도구에서 인위적으로 분리됩니다. MayaFlux에서는 하나의 유닛이 다음을 수행할 수 있습니다:

  • 오디오 채널로 출력
  • GPU 컴퓨트 셰이더 트리거
  • 시간 이벤트 조정

이 모든 작업이 동시에 동일한 처리 콜백 안에서 일어납니다. 샘플, 픽셀, 파라미터는 모두 배정밀도 부동소수점이므로, 도메인 간 데이터 흐름에 변환 오버헤드가 없습니다.

Extensibility

복잡성을 숨기는 도구는 가능성도 숨깁니다. MayaFlux는 어디서든 후크를 제공합니다:

  • 오디오 콜백 교체
  • 버퍼 처리 가로채기
  • 채널 조정 오버라이드
  • 백엔드 교체

모든 레이어가 교체 가능하고, 모든 시스템이 오버라이드 가능합니다. 그 의미를 이해한다면 무엇이든 수정할 수 있습니다. 이해하지 못한다면, 문서는 실제 사운드를 몇 분 안에 만들어내는 작업 예제를 통해 가르쳐 줍니다.

MayaFlux가 아닌 것

카테고리MayaFlux가 아닌 것설명
애플리케이션 소프트웨어DAW가 아님타임라인 편집기, MIDI 피아노 롤, 플러그인 호스팅이 없습니다. MayaFlux는 계산 기반을 제공하며, 사용자가 직접 시퀀싱 로직을 구축합니다.
노드 기반 UI가 아님시각적 패치 인터페이스가 없습니다. 모든 것이 C++ 코드이며, 복잡한 로직에 텍스트가 더 정확합니다. 여러분의 패치는 버전 관리되는 소스 파일이며, 불투명한 바이너리가 아닙니다.
소비자 지향 소프트웨어가 아님아직 Max/P5.js를 대체하지는 않습니다. 해당 도구들은 빠른 프로토타이핑과 시각적 탐구에 뛰어나지만, MayaFlux는 계산적 깊이와 아키텍처 제어에 뛰어납니다.
대상 청중툴 한계에 부딪힌 크리에이티브 테크놀로지스트Processing에서 프로토타입을 만들었지만 실시간 오디오가 필요하거나, Max/MSP를 마스터했지만 프로그래밍 제어를 원하거나, openFrameworks로 설치물을 구축한 뒤 Apple이 OpenGL을 폐기하는 것을 보았다면, MayaFlux는 이러한 제한에 대한 좌절감에서 탄생했습니다.
계산적 깊이가 필요한 시각 예술가 및 설치 제작자Processing이나 TouchDesigner에서 생성적 비주얼을 만들었지만 OpenGL의 폐기된 패턴 없이 저수준 GPU 제어가 필요하거나, 진정으로 동기화된 오디오‑비주얼 처리가 필요하다면, MayaFlux는 그래픽을 오디오 DSP와 동일한 아키텍처 엄격성으로 다룹니다.
진정한 유연성이 필요한 연구자학술 오디오 연구가 새로운 알고리즘을 구현하기 위해 상용 도구와 싸워야 할 필요는 없습니다. MayaFlux는 직접적인 버퍼 접근, 임의의 처리 속도, 그리고 크로스 도메인 조정을 제공합니다.
프리셋을 벗어난 뮤지션 및 작곡가기존 도구를 다 사용했으며 벤더 로드맵이 아닌 여러분의 음악적 상상에 맞는 악기를 원한다면, MayaFlux는 합성을 매 샘플마다 제어할 수 있는 데이터 변환으로 다룹니다.
프레임워크 제약에서 벗어나고자 하는 개발자게임 오디오 미들웨어, 크리에이티브 코딩 라이브러리, 시각 프로그래밍 환경 모두가 아키텍처 경계를 설정합니다. MayaFlux는 이러한 경계를 제거하면서도 락‑프리 조정 및 결정론적 처리를 통해 성능 보장을 유지합니다.

기술 하이라이트

락‑프리 원자적 조정

  • 모든 노드, 버퍼, 네트워크는 C++20의 atomic_ref, compare‑exchange 연산 및 명시적 메모리 순서를 사용합니다.
  • 수정(오실레이터 추가, 필터 연결, 그래프 재구성)은 오디오가 재생되는 동안 발생하며, 글리치, 끊김, 뮤텍스 경쟁이 없습니다.
  • 최대 지연 시간한 버퍼 사이클(보통 10‑20 ms)입니다.

처리 경로에 락 없음

  • 대기 중인 작업은 원자적으로 큐에 저장됩니다.
  • 채널 조정은 비트마스크 CAS 패턴을 사용합니다.
  • 교차 도메인 전송은 토큰 검증이 포함된 처리 핸들을 통해 이루어집니다.

단일 패스 처리

  • 연산 유닛은 소비자 수에 관계없이 사이클당 정확히 한 번 처리합니다.
  • 예: 스펙트럼 변환이 입자 합성 및 텍스처 생성 프로세스에 한 번씩 공급하여 두 도메인이 동기화된 출력을 받습니다.
  • 원자적 상태 플래그가 재처리를 방지하고, 레퍼런스 카운팅이 리셋을 조정하며, 채널 비트마스크가 다중 출력 상황을 처리합니다.

통합 레이트 토큰

  • 전통적인 오디오 레이트와 컨트롤 레이트의 구분이 사라집니다.
  • Rate는 엔진에 호출 주파수를 알려주는 처리 토큰(AUDIO_RATE, VISUAL_RATE, CUSTOM_RATE)에 불과합니다.

모든 곳에 숫자

  • 오디오 샘플, 픽셀 값, 컨트롤 파라미터, 시간 모두 숫자입니다.
  • 변환 오버헤드가 없고, 의미적 경계도 없습니다.
  • 시각 분석 루틴이 합성 파라미터를 직접 변조할 수 있습니다.
  • 재귀 오디오 필터가 텍스처 좌표를 구동할 수 있습니다.
  • 동일한 RootBuffer 패턴이 RootAudioBufferRootGraphicsBuffer에 모두 적용됩니다.

Vulkan 통합

  • 사후 생각이나 “오디오 시각화”가 아닙니다.
  • 그래픽 파이프라인은 동일한 인프라 위에서 실행됩니다: 락‑프리 버퍼 조정, 토큰 기반 도메인 구성, 통합 데이터 흐름.
  • 파티클 시스템, 기하 생성, 셰이더 바인딩—모두 오디오와 동일한 Node/Buffer/Processor 아키텍처를 사용합니다.
  • 다항식 노드는 파형 변형을 구동하듯이 정점 변위를 자연스럽게 구동할 수 있습니다.
  • 이것은 연산 기반이며, 그래픽이 부착된 오디오 라이브러리가 아닙니다.

1급 코루틴 지원

auto sync_routine = [](Vruta::TaskScheduler& scheduler) -> Vruta::SoundRoutine {
    while (true) {
        // Your time‑compositional logic here
    }
};
  • 코루틴을 통해 시간이 구성 가능한 재료가 되어 오디오, 시각, 컨트롤 도메인 전반에 걸친 정교한 시간 조정을 가능하게 합니다.

결론

MayaFlux는 인프라이며, 최종 사용자 애플리케이션이 아닙니다. 기존 도구가 강요하는 인위적인 경계 없이 깊이 통합된 교차 도메인 멀티미디어 시스템을 만들 수 있는 원시 고성능 빌딩 블록을 제공합니다. 궁극적인 유연성, 결정론적 락‑프리 처리, 오디오·그래픽·컨트롤을 위한 통합 연산 모델이 필요하다면 MayaFlux 0.1.0이 시작점이 됩니다.

샘플 코루틴

co_await Kriya::SampleDelay{ scheduler.seconds_to_samples(0.02) };
process_audio_frame();

co_await Kriya::MultiRateDelay{
    .samples_to_wait = scheduler.seconds_to_samples(0.1),
    .frames_to_wait   = 6
};
bind_push_constants(some_audio_matrix);
}

코루틴은 샘플 수, 버퍼 경계, 또는 임의의 술어에 따라 일시 중단됩니다.
시간 논리는 음악적 아이디어처럼 읽히며 – 콜백 지옥도 없고, 메시지 전달 복잡성도 없습니다.

MayaFlux 기능

  • 완전한 LLVM‑기반 JIT 컴파일 – C++ 코드를 작성하고 evaluate를 누르면 한 버퍼 사이클 내에서 결과를 듣고/볼 수 있습니다.
  • 별도의 컴파일 단계 없이, 애플리케이션 재시작 없이, 워크플로우 중단 없이.
  • 전체 C++20 문법, 템플릿 메타프로그래밍, 컴파일‑타임 평가 지원.
  • 라이브 코딩이 더 간단한 언어로 전환한다는 의미는 아닙니다.

Processing Domains

Domains combine Node tokens (rate), Buffer tokens (backend), and Task tokens (coordination).

// Audio domain
Domain::AUDIO = Nodes::ProcessingToken::AUDIO_RATE +
                Buffers::ProcessingToken::AUDIO_BACKEND +
                Vruta::ProcessingToken::SAMPLE_ACCURATE;

// Graphics domain
Domain::GRAPHICS = Nodes::ProcessingToken::VISUAL_RATE +
                   Buffers::ProcessingToken::GRAPHICS_BACKEND +
                   Vruta::ProcessingToken::FRAME_ACCURATE;

// Custom user example
Domain::PARALLEL = Nodes::ProcessingToken::AUDIO_RATE +
                  Buffers::ProcessingToken::AUDIO_PARALLEL + // Executes on the GPU
                  Vruta::ProcessingToken::SAMPLE_ACCURATE;

맞춤 도메인은 특수한 요구 사항을 위해 개별 토큰을 조합합니다.
크로스‑모달 조정은 토큰 호환성 규칙에 의해 등록 시 강제 적용되며, 핫‑패스 실행 중에는 발생하지 않습니다.

버퍼와 프로세서

  • 버퍼는 자체 처리 체인을 가집니다.
  • 체인은 프로세서를 순차적으로 실행합니다.
  • 프로세서는 수학식, 논리 연산 또는 사용자 정의 함수를 통해 데이터를 변환합니다.

모든 것이 조합됩니다:

void compose() {
    auto sine        = vega.Sine(440.0);
    auto node_buffer = vega.NodeBuffer(0, 512, sine)[0] | Audio;

    auto distortion = vega.Polynomial([](double x) {
        return std::tanh(x * 2.0);
    });
    MayaFlux::create_processor(node_buffer, distortion);
}

기반 물질은 변하지 않으며 – 당신의 접근 방식은 더욱 깊어집니다.

플랫폼 지원

  • Windows – MSVC / Clang
  • macOS – Clang
  • Linux – GCC / Clang

배포 방법:

  • GitHub 릴리스
  • Launchpad PPA (Ubuntu/Debian)
  • COPR (Fedora/RHEL)
  • AUR (Arch)

프로젝트 관리

Weave – a command‑line tool that handles:

  • 자동 의존성 관리
  • MayaFlux 버전 획득 및 설치
  • MayaFlux 라이브러리와 필요한 모든 포함 파일을 로드하는 자동 생성 CMake 구성을 포함한 C++ 프로젝트 생성

오디오 백엔드

  • RtAudio와 함께:
    • WASAPI (Windows)
    • CoreAudio (macOS)
    • ALSA / PulseAudio / JACK (Linux)

그래픽 백엔드

  • Vulkan 1.3 – 초기화, 동적 렌더링, 명령 버퍼 관리, 스와프체인 프레젠테이션까지의 전체 파이프라인.
  • 현재 지원되는 기능:
    • 2D 파티클 시스템
    • 지오메트리 네트워크
    • 푸시 상수와 디스크립터를 통한 노드 데이터 셰이더 바인딩

절차적 애니메이션, 생성적 비주얼 및 계산 기하학을 위한 기반.

Live Coding

Lila JIT 시스템은 **LLVM 21+**를 사용하여 템플릿, constexpr 평가, 그리고 증분 컴파일을 포함한 전체 C++ 구문을 지원합니다.

시간 조정

  • 완전한 코루틴 인프라스트럭처 포함:
    • 샘플 정확도 스케줄링
    • 프레임 정확도 동기화
    • 다중 레이트 적응
    • 이벤트 기반 실행

Documentation

  • “load a file”부터 전체 파이프라인 아키텍처까지 포괄적인 튜토리얼.
  • 락‑프리 아키텍처와 상태‑조정 패턴을 다루는 기술 블로그 시리즈.
  • 퍼스나 기반 온보딩(뮤지션, 시각 예술가 등)으로 Pure Data, Max/MSP, SuperCollider, p5.js, openFrameworks, Processing에서의 멘탈 모델 전환을 지원.

Testing

  • 700+ 컴포넌트 테스트 lock‑free 패턴, 버퍼 처리, 노드 조정 및 그래픽 파이프라인 통합을 검증합니다.

예시: 오디오 로드 및 처리

void compose() {
    auto sound   = vega.read("path/to/file.wav") | Audio;
    auto buffers = MayaFlux::get_last_created_container_buffers();

    auto poly = vega.Polynomial([](double x) { return x * x; });
    MayaFlux::create_processor(buffers[0], poly);
}

예시: 처리 체인 구축

void compose() {
    auto sound   = vega.read("drums.wav") | Audio;
    auto buffers = MayaFlux::get_last_created_container_buffers();

    auto bitcrush = vega.Logic(LogicOperator::THRESHOLD, 0.0);
    auto crush_proc = MayaFlux::create_processor(buffers[0], bitcrush);
    crush_proc->set_modulation_type(LogicProcessor::ModulationType::REPLACE);

    auto clock = vega.Sine(4.0);
    auto freeze_logic = vega.Logic(LogicOperator::THRESHOLD, 0.0);
    freeze_logic->set_input_node(clock);
    auto freeze_proc = MayaFlux::create_processor(buffers[0], freeze_logic);
    freeze_proc->set_modulation_type(LogicProcessor::ModulationType::HOLD_ON_FALSE);
}

예시: 재귀 필터

auto string = vega.Polynomial(
    [](const std::deque& history) {
        return 0.996 * (history[0] + history[1]) / 2.0;
    },
    PolynomialMode::RECURSIVE,
    100
);
string->set_initial_conditions(std::vector(100, vega.Random(-1.0, 1.0)));

예시: 오디오‑비주얼 조정

auto control = vega.Phasor(0.15) | Audio;
control->enable_mock_process(true);

auto particles = vega.ParticleNetwork(
    600,
    glm::vec3(-2.0f, -1.5f, -0.5f),
    glm::vec3( 2.0f,  1.5f,  0.5f),
    ParticleNetwork::InitializationMode::GRID
) | Graphics;

particles->map_parameter("turbulence", control,
                         NodeNetwork::MappingMode::BROADCAST);

향후 개발

  • Expanded graphics – 전체 3D 렌더링, 입력 처리, 분산 처리를 위한 네트워킹으로 이동.
  • Hardware acceleration – CUDA 및 FPGA 구현.
  • WebAssembly builds – 브라우저에서 실제 MayaFlux C++ 코드를 실행하는 인터랙티브 웹 데모.
  • Additional backends – JACK 오디오, 다중 Vulkan 디바이스 등.

이번 릴리스는 기반을 구축했으며, 로드맵은 이를 기반으로 확장됩니다.

Source:

MayaFlux – Creative Computing Framework

MayaFlux란?

MayaFlux는 컴퓨팅 기반이 진화했음에도 대부분의 창작 도구가 1980년대식 아키텍처에 머물러 있기 때문에 존재합니다. 아날로그 메타포, 학문적 사일로, 제한적인 추상화 레이어를 탈피함으로써 MayaFlux는 완전히 새로운 창작 표현 패러다임의 문을 엽니다.

“기반은 준비되었습니다. 상상하는 것을 구축하세요.”

핵심 기능

  • 확장 및 맞춤 백엔드 – 임베디드 시스템이나 특수 하드웨어용 인터페이스를 구축합니다.
  • 기본 자동화 – 일반 작업을 위한 준비된 워크플로우를 제공하며, 필요에 따라 완전히 재정의할 수 있습니다.
  • 아키텍처 맞춤화 – 간단한 패턴으로 시작해 필요할 때 전체 아키텍처를 세밀하게 조정할 수 있습니다.

교육 콘텐츠

  • 비디오 워크스루 – 단계별 시각 가이드.
  • 인터랙티브 예제 – 실시간으로 수정 가능한 실습 코드.
  • 패턴 라이브러리 – 특정 창작 기법을 보여주는 컬렉션.

기관 파트너십

우리는 다음과 같은 협력을 적극 모색하고 있습니다:

  • 전임 개발자를 위한 자금 지원.
  • 하드웨어 통합에 관한 연구.
  • 새로운 알고리즘에 대한 학술 작업.

시작하기

  1. 문서 및 튜토리얼 방문
  2. 설치: 몇 분이면 완료됩니다.
  3. 첫 오디오 만들기: Sculpting Data 튜토리얼을 따라 5분 이내에 완성합니다.

문서는 초보자든 숙련 개발자든 현재 위치에 맞춰 제공됩니다.

추가 자료

  • 소스 코드: (link to repository)
  • 라이선스: GPL‑3.0 (오픈 소스, 카피레프트)
  • 연락처: [mayafluxcollective@]
Back to Blog

관련 글

더 보기 »

RGB LED 사이드퀘스트 💡

markdown !Jennifer Davis https://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex: 내가 만드는 이유

소개 안녕하세요 여러분. 오늘은 제가 누구인지, 무엇을 만들고 있는지, 그리고 그 이유를 공유하고 싶습니다. 초기 경력과 번아웃 저는 개발자로서 17년 동안 경력을 시작했습니다.