ASTROFOX
插件

插件参考

Astrofox 插件清单、控件、音频数据、uniform 和帧数据的参考文档。

每个插件都从一个 astrofox.plugin.json 清单开始。

清单字段#

字段类型说明
apinumber插件规范版本。使用 1。
namestring必填的带命名空间的 ID,例如 @author/plugin-name。
versionstring插件发布版本。
labelstring在菜单和图层面板中显示的名称。
descriptionstring安装时显示的简短说明。
authorstring插件作者或组织。
typestringdisplay 或 effect。
runtimestringshader 或 worker。显示组件可以使用任意一种;效果必须使用 shader。
shaderstring着色器运行时所用的片段着色器路径。
entrystringworker 运行时所用的 ES 模块路径。
iconstring可选的图标路径,显示在菜单中。
permissionsstring[]请求的能力,目前包括 network。
librariesstring[]worker 请求的宿主库;目前为 three。
cameraboolean为 worker 显示组件添加宿主相机控制。
audioobject插件请求的 FFT 和时域数据。
defaultPropertiesobject每个新实例的初始属性值。
controlsobject声明式的控制面板结构定义。
uniformsobject着色器运行时的属性到 uniform 的映射。

路径以清单 URL 为基准进行相对解析。已发布的文件必须使用 HTTPS;开发时允许使用 http://localhost。

音频数据#

只声明插件需要的音频数据:

值范围和含义
fft.bins1–512 个归一化的频率值
fft.minFrequency / maxFrequency以赫兹为单位的频率窗口
fft.smoothing0–0.99 的指数平滑
fft.minDecibels / maxDecibels输入电平归一化的上下限
td.samples时域波形的采样数量

FFT 值的范围为 0 到 1。时域值的范围同样为 0 到 1,静音时位于中心值 0.5。Worker 显示组件可以同时请求 FFT 和时域数据。着色器显示组件只接收 FFT 和音量。着色器效果接收音量、time、delta 和 inputTexture,不接收 FFT 或时域数组。播放和视频导出时使用相同的分析流程。

控件#

支持的控件类型包括 text、number、toggle、checkbox、color、colorrange、range、select 和 time。

常用字段包括:

字段用途
label便于阅读的控件名称
type要渲染的输入组件
min, max, step数值范围和精度
withRange为数值输入显示滑块
withReactor允许反应器驱动此属性
items下拉选择输入的可选值
hidden按条件或永久隐藏该输入

由于清单是 JSON 格式,动态值需要使用引用:

舞台引用可以包含 scale;例如,{ "$stage": "width", "scale": -1 } 会解析为舞台宽度的负值。

Uniform 映射#

着色器运行时会将属性映射到 GLSL uniform:

color 会将十六进制颜色转换为三分量向量。向量映射会从列出的属性中读取各个分量。

Worker 工厂函数输入#

根据清单内容,worker 工厂函数会接收:

输入说明
properties来自清单和实例的初始属性值
seed每个实例固定的随机种子
size当前舞台尺寸
libraries所请求的宿主库命名空间
renderer请求 three 时提供的共享 Three.js 渲染器

帧数据#

render(frame) 会接收:

字段说明
id帧标识符
time以秒为单位的确定性时间
delta距上一帧的时间,以毫秒为单位
playing时间线或实时输入是否处于活动状态
exporting是否正在进行离线导出渲染
volume归一化的整体音频电平
seed固定的插件实例种子
fft所请求的 FFT 数组(已配置时提供)
td所请求的时域数组(已配置时提供)

导出期间,delta 固定为 1000 / fps。请使用 time、delta 和 seed 来实现可复现的动画。

渲染结果#

worker 的 render() 方法可以返回:

宽度和高度用于设置图层边界。可选的原点值用于设置其变换原点。