Fix Timing Problems
Find the message or the symptom, then work through the fix. Every timing amount here is a fraction of one step, as in Add Swing and Human Feel.
An edit lands late
Section titled “An edit lands late”A pattern you send to a playing track starts at the next cycle boundary, not when you run the line. That keeps it on the downbeat; there is no way to apply it mid-cycle.
- Run the line shortly before the boundary.
- To land a change at a chosen cycle further ahead, write it to a position in an arrangement — see Add Fills to a Song.
Notes drop out under load
Section titled “Notes drop out under load”Pattern query deadline exceeded: 3 scheduling pass(es) truncated since the previous warning (latest: MIDI, cycle 812, budget … ms). Scheduled output may be incomplete. Simplify expensive patterns or generators, or reduce scheduling load.
A cycle took too long to compute, and some of its events were not scheduled.
- Look for a generator that grows with time. A stream, a Markov chain or a script pattern replays every cycle from cycle 0 to answer for the current one, so a costly step function gets slower as the cycle count rises.
- Make the step function cheaper, or move work that doesn’t change out of it and into a
let. - Look for an
on_cyclecallback that does heavy work, and do that work once outside it.
Events pile up at the end of the cycle
Section titled “Events pile up at the end of the cycle”.nudge(), .swing() and .humanize() never move an event into the next cycle. An event pushed
past the end of the cycle lands on the end, so large offsets can stack several events there.
- Keep the offsets small:
0.1is a tenth of a step. - Make the offset of the last events of the cycle smaller, or negative.
[bd sd bd sd].nudge(#[0, 0.1, 0, -0.1]);Swing moves only every other slot
Section titled “Swing moves only every other slot”That is what swing does: the even slots of its grid stay, and the odd ones play late. To move each
event by its own amount, use .nudge() with one offset per event:
[hh hh hh hh].nudge(#[0, 0.2, 0.05, 0.15]);Swing doesn’t move anything
Section titled “Swing doesn’t move anything”Swing moves only what plays on the odd slots of its grid. A part with nothing there stays straight:
the quarter notes of [bd sd bd sd] all sit on even 16ths, so .swing(0.25, 16) leaves them alone.
Match the grid to the part you want to swing: 16 for 16th hats, 8 for 8ths, 4 to swing the
sd in [bd sd bd sd].
MIDI gear is early or late against the mix
Section titled “MIDI gear is early or late against the mix”The pattern is in time, but a synth or drum machine is heard ahead of or behind the audio tracks.
Set the port’s trim_ms — see
Align Hardware with the Mix.
Related
Section titled “Related”- Add Swing and Human Feel — nudge, swing and humanize
- Cycles & Time — why an edit waits for the cycle boundary
- How Patterns Work — how each timing move measures its amount