Deep dive
One song
into the
next.
Crossfade decides what happens in the gap between two tracks — an instant cut, or a smooth overlap that keeps the rhythm of your run going. This page is the long version of how Run2Beat moves from one song to the next on iPhone and Apple Watch.
Two ways to move between tracks
In Settings → Transitions you choose how Run2Beat advances when one track ends and the next begins:
- Gapless. The next track starts the instant the current one ends — a clean cut with no overlap. The next file is still preloaded ahead of time, so Gapless is an instant handoff rather than a cold load that would insert a multi-second spin between songs.
- Crossfade. The next track begins just before the current one finishes. The outgoing track fades down while the incoming one fades up, so the two overlap for a fixed six seconds on both iPhone and Apple Watch. There is no length slider — the overlap is the same everywhere so the blend sounds identical in your pocket and on your wrist.
The default mode is Crossfade. Switching to Gapless clears Beat matching automatically; the beat-match toggle is only available while Crossfade is selected.
Only on automatic changes
Crossfade is deliberately limited to the moments when the app moves to the next track on its own. Anything you do is treated as “I want this now” and starts instantly:
- Skip forward or jump back — instant, no fade.
- Tap a different track in a list — instant, no fade.
- Pause — stops immediately and cancels any pending fade.
If you reach the end of the queue there’s nothing to fade into, so the last track simply ends. User actions always cancel an armed or in-flight fade and tear down any standby chain that was being prepared.
Change it mid-run
You don’t have to stop playback to change your mind. Roughly 22 seconds before each track ends, Run2Beat re-reads the transition setting and decides whether this automatic advance should crossfade. Flip Gapless ↔ Crossfade earlier than that and the new choice takes effect on the current transition; flip later and it applies to the next song instead. Once a fade is armed for the current advance, it stays committed — a late toggle cannot abort a fade that is already about to start. A fade that has already begun keeps the length and curve it started with.
Beat matching
With Crossfade on, Settings also offers an optional Beat matching toggle for BPM lists. During the fade, the next track can begin where the music picks up (past a quiet intro), and the change may wait a moment so the beat lines up better between songs. Results vary from track to track; it is off by default.
Under the hood each track can store two cues measured once and reused: a groove start (where high energy / pulse gets going — the seek target for intro skip) and a beat zero near the file start (a phase anchor). Soft outros are measured live at play time when a clear die-out is present, so a quiet ending can pull the fade anchor a little earlier without unconditionally cutting the outgoing song short. The phase nudge only runs when outgoing and incoming tempos match — a warm-up track stepping up into a different target BPM is skipped on purpose.
The first time you use it, Run2Beat may need a one-time prep scan before BPM-list playback or Watch sync. That scan is shown in a progress sheet and only runs for songs that still need cues; cancel continues without requiring data for that session. Beat matching does not apply to the Library, standard playlists, or Gapless. Plain Crossfade is unchanged when the toggle is off. The setting syncs to Apple Watch; cues travel with AirDrop when you share a playlist or BPM list.
How Beat matching works →Equal-power fade, not a linear dip
A linear amplitude ramp dips about 3 dB in the middle of the blend and perceptually feels shorter than the wall-clock overlap. Run2Beat instead drives a manual equal-power curve: with progress t from 0 to 1 warped slightly so the incoming track becomes audible a bit sooner (helps quiet intros), then mapped through cos / sin so both tracks stay audible across the whole six seconds. There is no mid-fade engine pause and no attaching a silent chain halfway through a song — both caused glitches in earlier designs.
On iPhone the ramp updates player-node volumes at about 30 Hz on the main run loop. On Apple Watch a background timer at about 60 Hz ramps each track’s gain-mixer output volume instead — player-node volume did not audibly change the watch mix, and a background timer keeps firing even when the screen is off (where the main run loop tends to coalesce).
How iPhone arms a crossfade
The phone pipeline is one audio engine:
player → time-pitch → equalizer → mixer
Crossfade uses a dual-slot idea: primary chain for the song you hear, plus a standby chain prepared for the next one. When a track starts, a single timer walks two phases:
- Evaluation — about 22 s before the end (or sooner if less remains). Re-reads Settings and decides whether this auto-advance should fade.
- Ramp trigger — exactly six seconds before the end. Opens the incoming file on a fresh player / time-pitch / EQ chain, starts it silent, swaps Now Playing to the incoming track, and begins the equal-power ramp. When the ramp finishes, the standby graph promotes to primary and the old nodes are torn down.
Gapless on iPhone still preloads the next track into a warm secondary path so natural end is an instant handoff rather than a cold open. Look-ahead for the next song peeks the queue without mutating “already played” state until the fade (or handoff) actually commits.
On your Apple Watch
Crossfade on the watch follows the same rules and the same six-second equal-power curve, but the graph has an extra constraint: watchOS cannot use Apple’s EQ audio unit, so the incoming track must be decoded and run through Run2Beat’s own EQ into a temp buffer before it can play. That prep used to be scheduled just-in-time and sometimes bled into the audible fade on a cold first transition. Today prep starts as soon as evaluation fires — while the outgoing track is still at full volume — so the entire decode cost is paid outside the overlap.
Arming therefore has three phases on the watch: evaluation (adaptive lead sized to fade + measured prep budget, capped around 24 s), immediate prep of the next file, then a ramp-ready callback that waits until exactly six seconds remain whenever prep finished early enough. Only if prep ran pathologically long does the ramp start immediately with its duration clamped to whatever time is left. A rolling window of past prep durations seeds the next session’s schedule so the lead stays realistic after the first song.
Some pre-rendered Watch files carry a sliver of trailing silence from the encoder. Displayed duration stays on the full decoded length, but crossfade and gapless arming can anchor to the audible musical end so the six-second overlap lands on music rather than dead air. The on-screen title does not jump when prep begins — the queue index advances only when the audible fade actually starts, so a cancelled prep never leaves the UI ahead of the audio.
How settings reach the Watch
The iPhone is the sole authority for transition settings. Mode, the fixed fade length and Beat matching travel inside the regular WatchConnectivity shared-settings payload alongside recipes, playlists and equaliser presets. Settings also pushes immediately when you toggle while the watch is reachable. The watch applies incoming values and never echoes them back. After changing Transitions, a sync (or an immediate push while paired and reachable) is what makes the wrist match your pocket.
Invariants worth knowing
- Only automatic advances fade; manual control always wins.
- Evaluation freezes the decision for the current transition; later toggles affect the next song.
- Both tracks are audible together during the blend — equal-power, not pause-then-resume.
- Watch EQ/decode prep happens outside the audible fade whenever possible.
- Phone owns Settings; Watch mirrors them.
The short version
Pick Gapless for a clean cut or Crossfade for a fixed six-second equal-power overlap, and forget about it. Optionally turn on Beat matching on BPM lists when you want fades that feel a little more in time. Run2Beat fades only when it advances on its own, never gets in the way when you take control, and behaves the same on your wrist as in your pocket — with the watch doing its EQ homework early so you still hear the full blend.
→ Back to the overview