Repository navigation
What's Changed
New Features
- External MIDI clock sync — PadDeck can now follow an external MIDI clock (a DAW, Gigmeister, or any clock master) so synced loop pads launch and loop tempo-locked to the beat instead of the instant a pad is hit.
- Clock input — selectable CoreMIDI clock source in Settings → MIDI, independent of the Launchpad port. Parses Clock (0xF8), Start/Continue/Stop, and Song Position Pointer.
- Transport bar — live tempo readout, a Synced/Internal indicator, bar·beat·tick position, and the global launch-quantize selector (1/16, 1/4, 1/2, 1 bar, 2 bars; default 1 bar). BPM is jitter-smoothed so the readout stays stable.
- Quantized launch & stop — a synced loop pad queues and starts on the next musical boundary (LED blinks while queued, pulses on the beat once playing). Stop can quantize to the boundary or fire immediately.
- Phase-locked looping — synced loops stay locked across many bars, scheduled sample-accurately on the audio clock with output-latency compensation, and re-align to the downbeat on Start / Song-Position or a tempo change.
- Per-pad sync controls — per pad: a Sync toggle, a quantize override, loop length in bars/beats, and a loop-length mismatch warning. (Time-stretch is scaffolded behind a disabled per-pad toggle for a future release.)
- Internal fallback — if the clock drops out (~0.5s) playback falls back to internal/free-run and re-locks automatically when the clock returns. New settings: follow external clock, ignore Start/Stop, time signature, and a latency offset.
Free one-shot and non-synced loop pads are unchanged — they still fire instantly.
Under the Hood
- New
PadDeckTestsunit-test target covering the clock math: tempo smoothing, tick→bar/beat position, Song Position Pointer, and boundary calculation.
Full Changelog: v2.3.0...v2.4.0