Zongzi. Curve. Adapter behaviour
(zongzi v0.3.0)
Copy Markdown
实现新的曲线适配器。
示例
defmodule Foo do
# 一般都存在状态
use Zongzi.Curve.Adapter, keys: ...
@impl Zongzi.Curve.Adapter
def control_points(foo), do: ...
@impl Zongzi.Curve.Adapter
def span(foo), do: ...
@impl Zongzi.Curve.Adapter
def rasterize(foo, tick_seq), do: ...
end可编辑的曲线
# 比方说控制点可变之类的
# 整体平移(随着特定音符片段)
# 什么什么的栅格化的实现
这里主要是用于参数的曲线在根据 Tempo 得到的 tick_seq 的采样点作为栅格化的单位/依据。
所以这也是考虑 Zongzi.Curve.Adapter.span/1 回调的一个原因了。
同时也要考虑只要一部分曲线拿来序列化的情况。
关于这个名字,因为下游引擎所需要的一般是基于物理时间的栅格化的数据, 所以我们还是把「栅格化」这个名字顺延过来了。
Summary
Callbacks
返回容器内的控制点列表,单位是 tick 。
按给定 tick 序列采样,返回 float-32-native 二进制。tick_seq 可以是 list 或 Range。
返回曲线的时间跨度(最后一个控制点的 tick 偏移)。空曲线返回 0。
Callbacks
@callback control_points(container :: struct()) :: [Zongzi.Curve.ControlPoint.t()]
返回容器内的控制点列表,单位是 tick 。
@callback rasterize( container :: struct(), tick_seq :: Enumerable.t(Zongzi.Score.Tick.t()) ) :: binary()
按给定 tick 序列采样,返回 float-32-native 二进制。tick_seq 可以是 list 或 Range。
@callback span(container :: struct()) :: non_neg_integer()
返回曲线的时间跨度(最后一个控制点的 tick 偏移)。空曲线返回 0。