在启动时进行传输循环包装:过时的 Clock._lastUpdate 导致鬼节点 >= _loopEnd
□ 说明
在 " Transport.start(时间,抵消) " 之前设置 " transport.loop = true " ,可立即将 " loopStart " 包装为 " loopStart " ,而不是从预定的抵消中播放。 当“ clock. lastUpdate” 停止/启动周期后, 就会发生这种情况。
□ 根源
lock. loop ()' 进程在范围[ lastUpdate, now (]' 中勾选。 停止/启动周期后:
- " 最后更新 " 保留上一个周期的价值
- " Transport.start(时间,相抵) " 拨打 " setTicksAtTime(时间,缩写) " 的电话
- 对于 Stale 范围内的 " tickTime " 值(最新数据 " 至 " 时间 " ), " Tick Source " 。
- 这些"鬼叮当"可以是 loopend'
- 由于 QQLoop.get(tickTime)
返回 ' true " (在开始前设置), +processTick包装到 'loopStart' - 从未达到预期抵销额
这还影响到“每次”事件处理——鬼勾子可以发射“Transport.schedule ()”,在时间中线开始时,会产生重复的来源。
□再现.
独立HTML使用Tone.js 15.1.22 从CDN. 快速的停止/启动周期, 并有一个小循环区域可靠地触发错误 :
cont transport = Tone.get Transport ();
// 计划一些事件( 如真实的应用程序)
transport.chedule(( ()) QQ;; ;
a. 运算表(( ()) , 3);
// 做 5 个快速启动/ 停止循环以累积 stale TickSource 状态
为(让 i = 0; i < 5; i++) {
运输.loopStart=0;
运算.loopEnd=0.1; // ~38 滴入120bpm/192ppq
运.loop=真实;
运算.start(Tone.now(),0.05);
等待新的承诺(r QQ set Timeout(r, 20));
运算. stop( );
运输.loop=虚假;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
// 第6回播放——鬼叮当触发包
运输.loopStart=0;
运.loopEnd=0.1;
运.loop=真实;
transport.start(Tone.now (), 0.05); // 预定:从0.05s播放
// ACTUAL: 首个 process Tick 批次看到 stale ticks= 39 * loop End=38.4
// / + 包装为循环启动=0, 而不是从相抵 0.05 播放** 已关闭的勾选日志(标出 " 点.召回 " ):**
勾选 #0: 勾选时间=31.327, 勾选时间=39, loop.get= true, loopEnd=38.4 QQ 呜!
勾选 # 1 : 勾选时间 = 31. 330, 勾选时间 = 1 = QQ 被环绕开始
. . . . . . . .
勾选 # 12: 勾选时间=31.380, 勾选时间=0==========================================================================================================================================================================================================================================关键值:cour. lastUpdate=31.326'(站点),transport.start ()',电话:31.380'。 范围`[31.327,31.380]'从累积的TickSource状态产生鬼虱.
工作间
将Clock. Last Update'提前到Transport.start ()'后的起始时间。 这完全跳过 stale 勾选范围 —— “ 时钟. loop( ) ” 仅处理 ` [startTime, now ()]' , 使用当前播放周期的正确偏移 :
[JavaScript] 运算.loopStart=循环Start; 运算.loopEnd = 环行; 运算.loop = true; // safe – 幽灵勾引被跳过 页:1
/ 跳过上一个游戏周期的 stale 勾选 运算. 点. 上更新date=tone.now();
□ 环境
- 说吧
. . . . . . .内容来源: Tonejs/Tone.js