Zongzi. Windowing. Context
(zongzi v0.3.0)
Copy Markdown
Windowing.Strategy.window/1 的只读输入。
必填
timeline— 编辑后的 Timelinenotes_by_seq— active(及策略需要的)SeqID → Note;Timeline 不持 Note 字段
可选
time_sig_map/tempo_map— 拍/秒换算;默认策略主要用拍interventions— 结构 rebase 后存活 的列表opts常用键::tpqn— 默认480:beat_ticks— 显式一拍 tick 数(覆盖从拍号/假定推导):extra— 策略私货
Caller 负责在 Anchor.rebase_all 之后组装本结构。
Summary
Functions
从 map/keyword 构造 Context。
将 Declaration.scope/2 的 tagged return 归一化为 tick 区间。
从 Context 组装 Declaration.scope/2 需要的 scope_ctx plain map。
Types
@type t() :: %Zongzi.Windowing.Context{ current_segments: [Zongzi.Windowing.Segment.t()], interventions: [Zongzi.Intervention.t()], notes_by_seq: %{required(Zongzi.Timeline.SeqID.t()) => Zongzi.Score.Note.t()}, opts: map(), tempo_map: Zongzi.Score.TempoMap.t() | nil, time_sig_map: Zongzi.Score.TimeSigMap.t() | nil, timeline: Zongzi.Timeline.t() }
Functions
从 map/keyword 构造 Context。
@spec normalize_scope( {Zongzi.Score.Tick.t(), Zongzi.Score.Tick.t()} | {:seconds, float(), float()}, Zongzi.Intervention.Declaration.scope_ctx() ) :: {:ok, {Zongzi.Score.Tick.t(), Zongzi.Score.Tick.t()}} | {:error, term()}
将 Declaration.scope/2 的 tagged return 归一化为 tick 区间。
{tick, tick}→ 原样返回{:ok, {tick, tick}}{:seconds, s, e}→ 用scope_ctx.tempo_map转 tick{:seconds, _, _}但tempo_map为 nil →{:error, :tempo_map_required}
@spec scope_ctx(t()) :: Zongzi.Intervention.Declaration.scope_ctx()
从 Context 组装 Declaration.scope/2 需要的 scope_ctx plain map。
字段
:timeline—ctx.timeline:tempo_map—ctx.tempo_map:tpqn—ctx.opts[:tpqn]或默认 480