MayaFlux 0.1.0:数字创意基础设施

发布: (2026年1月2日 GMT+8 02:33)
16 分钟阅读
原文: 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 of the article (excluding the source line you already provided) here? Once I have the text, I’ll translate it into Simplified Chinese while preserving the original formatting, markdown, and technical terms.

MayaFlux 0.1.0 – 发布概览

MayaFlux 0.1.0 现已发布。这 不是 另一个创意编码框架;它是基于 15 年跨学科表演实践、教学、研究和 DSP 生产工程构建的计算基础设施。

核心理念

  • C++20/23 多媒体计算框架,它拒绝了现有工具的若干基本假设。
  • 模拟合成隐喻(振荡器、补丁线、包络发生器)是从硬件借来的教学支撑,实际上从未限制数字计算。
  • MayaFlux 采用:
    • 递归与前瞻处理
    • 任意精度与跨域数据共享
    • 没有模拟对应物的计算模式(多项式塑造数据,逻辑门做出创意决策,协程协调时间本身)

统一处理模型

在大多数商业工具中,音频、视觉和控制处理被 人为分离。在 MayaFlux 中,一个单元可以:

  • 输出到音频通道
  • 触发 GPU 计算着色器
  • 协调时间事件

所有这些都在同一个处理回调中 同步 发生。采样、像素和参数全部采用 双精度浮点,因此数据在各域之间流动时无需转换开销。

可扩展性

隐藏复杂性的工具也隐藏了可能性。MayaFlux 在各处提供钩子:

  • 替换音频回调
  • 拦截缓冲区处理
  • 覆盖通道协调
  • 替换后端

每一层都可以被替换;每个系统都可以被覆盖。如果你理解其含义,就可以修改任何东西。如果不懂,文档会通过可运行的代码示例在几分钟内教会你生成真实的声音。

MayaFlux 不是 什么

类别MayaFlux 不是说明
应用软件不是数字音频工作站(DAW)没有时间线编辑器、MIDI 钢琴卷帘或插件托管。MayaFlux 提供计算基础;你需要自行构建序列逻辑。
不是基于节点的 UI没有可视化补丁界面。所有内容都是 C++ 代码——文本对复杂逻辑更精确。你的补丁是受版本控制的源文件,而非不透明的二进制文件。
不是面向消费的软件它尚未取代 Max/P5.js。这些工具擅长快速原型和可视化探索;MayaFlux 则在计算深度和架构控制方面表现出色。
目标受众创意技术人员遇到工具限制如果你在 Processing 中做过原型但需要实时音频,精通 Max/MSP 但想要编程控制,或在 openFrameworks 中构建装置后看到 Apple 弃用 OpenGL,MayaFlux 正是源于对这些限制的沮丧而诞生。
需要计算深度的视觉艺术家和装置制作者如果你在 Processing 或 TouchDesigner 中创建生成式视觉,但想要低层次的 GPU 控制而不使用 OpenGL 的废弃模式,或需要真正同步的音视频处理,MayaFlux 将图形视为与音频 DSP 同等的架构严谨性。
需要真正灵活性的研究人员学术音频研究不应为实现新算法而与商业工具斗争。MayaFlux 提供直接的缓冲区访问、任意的处理速率以及跨领域协同。
超越预设的音乐人和作曲家如果你已经用尽现有工具,想要与自己音乐想象相匹配的乐器,而不是供应商的路线图,MayaFlux 将合成视为你在每个采样点都能控制的数据转换。
逃离框架约束的开发者游戏音频中间件、创意编码库以及可视化编程环境都施加了架构边界。MayaFlux 在移除这些限制的同时,通过无锁协同和确定性处理保持性能保证。

技术亮点

无锁原子协同

  • 每个节点、缓冲区和网络都使用 C++20 的 atomic_ref、比较交换操作以及显式内存顺序
  • 修改(添加振荡器、连接滤波器、重构图)在 音频播放时 进行,毫无卡顿、掉帧或互斥锁争用。
  • 最大延迟 对于任何修改:一个缓冲周期(通常为 10‑20 ms)。

处理路径中不使用锁

  • 待处理操作以原子方式排队。
  • 通道协同使用 位掩码 CAS 模式
  • 跨域传输通过带令牌校验的处理句柄完成。

单遍处理

  • 计算单元在每个周期 恰好处理一次,不论有多少消费者。
  • 示例:一次频谱变换同时为颗粒合成和纹理生成提供数据;两个域都收到同步的输出。
  • 原子状态标志防止重新处理;引用计数协调重置;通道位掩码处理多输出场景。

统一速率令牌

  • 传统的音频速率与控制速率的区分被消除。
  • 速率 仅是一个处理令牌(AUDIO_RATEVISUAL_RATECUSTOM_RATE),告诉引擎调用的频率。

数字无处不在

  • 音频样本、像素值、控制参数和时间全部是 数字
  • 没有转换开销,没有语义边界。
  • 可视化分析例程可以直接调制合成参数。
  • 递归音频滤波器可以驱动纹理坐标。
  • 同一套 RootBuffer 模式同时适用于 RootAudioBufferRootGraphicsBuffer

Vulkan 集成

  • 这不是事后添加的“音频可视化”。
  • 图形管线运行在 相同的基础设施 上:无锁缓冲区协同、基于令牌的域组合、统一数据流。
  • 粒子系统、几何生成、着色器绑定——全部使用与音频相同的 Node/Buffer/Processor 架构。
  • 多项式节点可以像驱动波形整形一样自然地驱动顶点位移。
  • 这是一种 计算基底,而非在图形上“拼装”音频的库。

一流的协程支持

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 语法、模板元编程、编译时求值。
  • 实时编码并不意味着要切换到更简单的语言。

处理域

域将 节点令牌(速率)、缓冲区令牌(后端)和 任务令牌(协调)组合在一起。

// 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 – 一个命令行工具,处理:

  • 自动化依赖管理
  • MayaFlux 版本获取与安装
  • 使用自动生成的 CMake 配置生成 C++ 项目,加载 MayaFlux 库及所有必要的包含路径

音频后端

  • RtAudio 支持:
    • WASAPI(Windows)
    • CoreAudio(macOS)
    • ALSA / PulseAudio / JACK(Linux)

Graphics Backend

  • Vulkan 1.3 – 完整的管线,从初始化、动态渲染、命令缓冲区管理到交换链呈现。
  • 当前支持:
    • 2D 粒子系统
    • 几何网络
    • 通过推送常量和描述符进行节点数据的着色器绑定

为程序化动画、生成式视觉效果和计算几何提供基础。

Live Coding

Lila JIT 系统,使用 LLVM 21+,支持完整的 C++ 语法,包括模板、constexpr 求值以及增量编译。

时间协调

  • 完整的协程基础设施,包括:
    • 样本级精确调度
    • 帧级精确同步
    • 多速率适配
    • 事件驱动执行

Documentation

  • 从“加载文件”到完整管道架构的综合教程。
  • 涵盖无锁架构和状态协同模式的技术博客系列。
  • 基于角色的入门指南(音乐人、视觉艺术家等),帮助从 Pure Data、Max/MSP、SuperCollider、p5.js、openFrameworks、Processing 进行思维模型的转变。

测试

  • 700+ component tests 验证无锁模式、缓冲区处理、节点协同以及图形管线集成。

示例:加载并处理音频

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);

未来发展

  • 扩展图形 – 朝着完整的 3D 渲染、输入处理、用于分布式处理的网络通信方向发展。
  • 硬件加速 – CUDA 和 FPGA 实现。
  • WebAssembly 构建 – 在浏览器中运行实际 MayaFlux C++ 代码的交互式网络演示。
  • 额外后端 – JACK 音频、多个 Vulkan 设备等。

本次发布奠定了基础;后续路线图将在此基础上构建。

MayaFlux – 创意计算框架

MayaFlux 是什么?

MayaFlux 的出现是因为计算基底已经进化,而大多数创意工具仍停留在 1980 年代的架构中。通过抛弃模拟隐喻、学科壁垒和限制性的抽象层,MayaFlux 为全新的创意表达范式打开了大门。

“基底已就绪。构建你想象的东西。”

核心能力

  • 扩展与自定义后端 – 为嵌入式系统或专用硬件构建接口。
  • 默认自动化 – 为常见任务提供现成工作流,并可完全覆盖以满足定制需求。
  • 架构定制 – 从简单模式开始,必要时扩展到完整的架构调优。

教育内容

  • 视频演练 – 步骤式视觉指南。
  • 交互示例 – 可实时修改的动手代码。
  • 模式库 – 展示特定创意技术的集合。

机构合作伙伴

我们正在积极探索能够提供以下支持的合作:

  • 为全职开发提供资金。
  • 硬件集成研究。
  • 学术研究新算法。

入门指南

  1. 访问文档和教程
  2. 安装: 只需几分钟。
  3. 第一个可运行的音频: 按照 Sculpting Data 教程,五分钟内完成。

文档会根据你的水平提供帮助——无论你是初学者还是高级开发者。

其他资源

  • 源代码: (link to repository)
  • 许可证: GPL‑3.0(开源,Copyleft)
  • 联系: [mayafluxcollective@]
Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://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 年前开始我的 developer 生涯……