ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

t3(TiXL)ConvertTime 算子详解:在 Bars 与 Seconds 之间换算时间

t3(TiXL)ConvertTime 算子详解:在 Bars 与 Seconds 之间换算时间 t3TiXLConvertTime 算子详解在 Bars 与 Seconds 之间换算时间【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3在 t3TiXL实时运动图形引擎中时间体系默认以Bars小节为单位——在 120 BPM 下1 个时间单位即 2 秒。ConvertTime算子是Lib.numbers.anim.time算子库中负责时间单位换算的核心组件它可以在秒Seconds与小节Bars之间相互转换是编写节拍同步动画、跨时间域计算如把秒级传感器数据换算为节拍驱动的关键帧时的基础工具。读完本文你将掌握ConvertTime的输入参数、Mode 枚举取值、底层 BPM 换算公式以及它在无播放上下文时的状态降级行为。算子概览时间单位换算器ConvertTime的官方描述为Converts time between seconds and bars. 在秒与小节之间转换时间。它位于 t3 的 Lib 算子库Lib.numbers.anim.time命名空间下源码实现见 ConvertTime.cs。该算子的 GUID 为0cd18cbb-e138-4b4b-a800-175fc39c61bf在 ConvertTime.t3ui 中以SymbolTags: 8注册。输入参数Name (Relevancy Type)DescriptionTime(Single)待转换的时间值。传入的单位取决于Mode指定的换算方向Mode(Int32)换算模式映射到枚举Modes见下文两个输入槽在 C# 侧以固定 GUID 声明保证项目文件的序列化兼容[Input(Guid DD9B7590-9D1F-4A3A-AFE7-FA37FEFD5798)] public readonly InputSlotfloat Time new(); [Input(Guid 3AD320B9-D1BC-4BDB-B5C8-20CAA721621B, MappedType typeof(Modes))] public readonly InputSlotint Mode new();注意Mode槽使用了MappedType typeof(Modes)特性编辑器会将这个 Int32 输入渲染为下拉枚举控件枚举成员即为 ConvertTime.cs 中定义的私有枚举private enum Modes { BarsToSeconds, // 值 0把 Bars 值换算为秒 SecondsToBars, // 值 1把秒换算为 Bars }因此Mode 0表示 Bars→SecondsMode 1表示 Seconds→Bars。根据 ConvertTime.t3 中的默认值定义Mode默认值为0BarsToSecondsTime默认值为0.0。输出NameTypeResultSystem.SingleResult是一个Slotfloat其 GUID 为2ccb0dad-0d47-4169-9351-97b96e55ad26。当Time或Mode任一输入变化时输出槽的UpdateAction被触发重新求值。底层换算原理BPM 与 240 的由来ConvertTime本身不含换算逻辑它委托给全局播放上下文的 Playback 单例var time Time.GetValue(context); if (Playback.Current null) { _lastErrorMessage Cant get BPM rate without value playback; return; } Result.Value Mode.GetEnumValueModes(context) switch { Modes.BarsToSeconds (float)Playback.Current.SecondsFromBars(time), Modes.SecondsToBars (float)Playback.Current.BarsFromSeconds(time), _ throw new ArgumentOutOfRangeException() };换算公式定义在 Playback.cspublic double BarsFromSeconds(double secs) { return secs * Bpm / 240.0; } public double SecondsFromBars(double bars) { return bars * 240.0 / Bpm; }这里的240是音乐时值体系的经典常数1 Bar四四拍小节包含 4 个四分音符1 分钟有 60 秒所以BPM × 4 × 60 / 240 BPM/60秒每拍即 1 小节时长为240 / BPM秒。BpmMath.cs 中也封装了同样语义的工具函数public static double BarsPerSecond(double bpm) bpm / 240.0; public static double BarDurationSeconds(double bpm) 240.0 / bpm;代入默认Bpm 120见 Playback.cs 中Bpm属性默认值1 Bar 2 秒这也与 Playback.cs 顶部注释中给出的示例一致at 120 BPM a unit of time is 2 seconds。关键推论换算结果随当前 BPM 动态变化。若你希望某个秒级时长恒定对应同样的 Bars 值需要锁定 BPM反之若把秒值通过ConvertTime转成 Bars 后再驱动动画动画的绝对时长会随 BPM 变化而伸缩——这正是节拍同步设计的意图所在。无播放上下文时的状态降级ConvertTime实现了IStatusProvider接口这是 t3 算子图错误处理机制的一部分。当Playback.Current null例如该算子处于脱离播放器的独立求值环境中时算子不会抛出异常而是记录错误信息Cant get BPM rate without value playback本次求值不更新Result通过GetStatusLevel()返回Warning级别状态编辑器中该算子会显示警告图标与消息。public IStatusProvider.StatusLevel GetStatusLevel() { return string.IsNullOrEmpty(_lastErrorMessage) ? IStatusProvider.StatusLevel.Success : IStatusProvider.StatusLevel.Warning; }这种降级为警告而非中断的设计保证了算子图在部分上下文缺失时仍可继续运行。与同库算子的配合ConvertTime不是孤立存在的它与 Lib.numbers.anim.time 算子库中的其他时间算子构成完整的时间处理链路Time返回经过模式选择Local Fx Time / Local Time / Playback Time / Runtime / Frozen和速度因子缩放后的当前时间且自带UnitsBars/Secs选项——它内部同样调用context.Playback.SecondsFromBars做单位换算与ConvertTime共享同一套 BPM 公式ClipTime返回当前时间片段Local Time的值通常以 Bars 计需要秒值时可接ConvertTime完成 Bars→Seconds 转换StopWatch可停止/保持的秒表用于测量任意两个时刻间的持续时长。一个典型用法是ClipTimeBars→ConvertTime (Mode BarsToSeconds)→ 得到该时刻对应的秒数再送入期望以秒为单位的时间算子如DateTimeInSecs语义下的接口或视频/音频采样相关算子。使用注意事项小结Mode 是 Int32 枚举槽0 Bars→Seconds1 Seconds→Bars传入其他值会在求值时抛出ArgumentOutOfRangeException。换算依赖实时 BPM结果不是静态的Bpm变化时同一输入会得到不同输出需要恒定换算时应先固定 BPM 来源。依赖Playback.Current播放上下文缺失时算子仅输出警告状态Cant get BPM rate without value playback而不产生数值。单精度输出Result为System.Single长时间线大量 Bars 的高精度累计场景下存在 float 精度上限属于该算子固有约束。相关文件索引内容路径算子 C# 实现Operators/Lib/Symbols/numbers/anim/time/ConvertTime.cs默认值与连接定义Operators/Lib/Symbols/numbers/anim/time/ConvertTime.t3UI 布局定义Operators/Lib/Symbols/numbers/anim/time/ConvertTime.t3uiBPM 换算公式Core/Animation/Playback.csBPM 工具函数Core/Audio/Timing/BpmMath.cs时间算子库目录.help/docs/operators/lib/numbers/anim/time/README.md【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表