Queue skips every second track at natural end-of-track (double advance, Qobuz, 4.119)

Title: Queue double-advance after natural end of track - next track is loaded then immediately abandoned, every second track skipped (Qobuz)

ENVIRONMENT
Volumio 4.119, Raspberry Pi 4 Model B Rev 1.4, MPD 0.24.6, USB DAC (Topping D10s), Qobuz plugin, wired LAN. Standard Qobuz album queue (16/44.1), no shuffle, no repeat.

SYMPTOM
When a track finishes playing naturally, the next track in the queue is resolved and loaded, then abandoned within about 1 second, and playback jumps to the track after it. The result is that every second track in the queue is silently skipped. Observed repeatedly across one evening (queue positions 1 and 3 skipped in one session; positions 9 and 11 in an earlier session, same signature). Manually tapping the skipped track in the queue plays it perfectly, so the track, the Qobuz stream and the audio chain are all fine - only the automatic end-of-track handoff fails.

WHAT THE LOGS SHOW (journalctl, volumio service)
The next track’s stream URL is resolved and added to MPD successfully. MPD then reports a “stop” state (the natural end of the previous track). CoreStateMachine::syncState receives stateService=stop while currentStatus=play, runs “play index undefined”, and advances the queue a second time - past the track it just loaded.

Trace 1 (23:54:29 - position 1 skipped after position 0 finished):

23:54:29 ControllerMpd::sendMpdCommand add “https://streaming-qobuz-std.akamaized.net/file?...eid=20793726…”
23:54:29 STATE SERVICE {“status”:“stop”,“position”:null,“seek”:null,…}
23:54:29 CURRENT POSITION 1
23:54:29 CoreStateMachine::syncState stateService stop
23:54:29 CoreStateMachine::syncState currentStatus play
23:54:29 CoreStateMachine::play index undefined
23:54:29 CorePlayQueue::getTrack 2
23:54:29 ControllerQobuz::clearAddPlayTrack ← now loading position 2 instead
23:54:30 ControllerMpd::sendMpdCommand stop / clear / load+add eid=20793727 / play
23:54:31 STATE SERVICE {“status”:“play”,“position”:0,…} CURRENT POSITION 2

Trace 2 (23:59:13 - position 3 skipped after position 2 finished, identical sequence):

23:59:13 ControllerMpd::sendMpdCommand add “https://…eid=20793728…”
23:59:13 STATE SERVICE {“status”:“stop”,…} CURRENT POSITION 3
23:59:13 CoreStateMachine::syncState stateService stop
23:59:13 CoreStateMachine::syncState currentStatus play
23:59:13 CoreStateMachine::play index undefined
23:59:13 ControllerQobuz::clearAddPlayTrack ← loads position 4
23:59:14 STATE SERVICE {“status”:“play”,“position”:0,“duration”:231,…} CURRENT POSITION 4

RULED OUT

  • The track itself: the same tracks play in full when selected manually from the queue, and one of them (eid 20793726) played in full earlier the same evening through the same automatic handoff.
  • USB/DAC: an xhci_hcd “Transfer event for disabled endpoint” kernel message fires at every track handoff including all successful ones - chronic transition noise, not correlated with the skips.
  • mpd.log shows “exception: No such playlist” once or twice at every transition, successful or not - also uncorrelated.

INTERPRETATION
This looks like a race in the end-of-track handoff: the “previous track ended” stop event is processed after the next track has already been queued, and the state machine treats the stop as belonging to the newly loaded track (“play index undefined”), advancing again. Timing-dependent, which would explain intermittent reports.

REPRODUCIBILITY
The pattern was predicted in advance and the next occurrence was observed on schedule: with position 4 playing, we predicted position 5 would be loaded and abandoned at the natural end of track - at 00:03:06 position 5 started, at 00:03:10 it was abandoned (4 seconds) and position 6 began playing. Three occurrences captured in one session (positions 1, 3, 5), each with the identical log signature.

SURVIVES FULL POWER CYCLE
After a complete shutdown overnight and cold boot the next morning (7+ minutes uptime, all services freshly started, library and mounts intact), the very first natural end-of-track handoff reproduced the bug identically: position 0 finished, position 1 (the same eid 20793726) was resolved and added to MPD, the stop/play state mismatch fired “play index undefined”, and playback jumped to position 2. Log signature byte-for-byte identical to the previous evening’s traces (Aug 09 11:43:49). This rules out accumulated state and confirms the race is structural.

LOG UPLOAD (sent from the /dev page seconds after an occurrence): http://logs.volumio.org/volumio/wPmaVug.html
Device UID: aa1480b30ceac8c9f2374c671111d5eb

Additional occurrences after the report above was written: the alternating pattern continued this morning - positions 1, 3, 5 and 7 of the same queue were each skipped at natural end-of-track (7 confirmed skips across two days and a full power cycle).

ome significant new observations since filing, from an automated watcher polling /api/v1/getState every 4 seconds during normal listening (Qobuz, same system as the original report):

  1. NOT FIXED BY RESTART, AND INTERMITTENT WITHIN A SESSION. After a full Volumio restart the same album played several tracks cleanly — then the skip returned mid-session. Earlier the same evening it had been skipping repeatedly. So the bug comes and goes within one uptime; restarting only buys a quiet period.

  2. THE STRICT EVERY-SECOND-TRACK ALTERNATION BREAKS. Two confirmed skips in one listening session (Aug 10, after the restart) with three clean natural handoffs between them:

    • Skip A: track at position 4 was loaded after the natural end of position 3, reported “stop” at 0:00 of 4:30, and playback resumed at position 5. The position-4 track never played.
    • Clean: positions 5 → 6 → 7 all handed off normally at natural end of track.
    • Skip B: position 7 ended naturally at 5:02 of 5:04, playback jumped directly to position 9. Position 8 was silently skipped.
  3. STRONG HINT IT IS RESPONSE-TIME DEPENDENT: an album played repeatedly during the same session (so presumably warm at Qobuz/CDN) looped with NO skips at all; switching to a fresh album brought the skipping back immediately. This intermittency pattern (rather than deterministic alternation) points to a timing race whose window depends on how quickly the next track resolves — possibly Qobuz-side response timing. Related report with the same position-jump fingerprint from June 2026: Qobuz skipping track — where a workaround of forcing 44.1/16 CD quality was suggested. I have not yet tested the quality-cap workaround.

  4. As in the original report: TIDAL on the identical system remains clean (5/5 natural handoffs), and manually tapping a queue entry always plays it correctly. Journal signature when it fires is unchanged: syncState stateService stop / currentStatus play → CoreStateMachine::play index undefined → clearAddPlayTrack of the track after the loaded one.

System configuration (in case peripherals are relevant — verified via lsusb/aplay at time of writing):

  • Raspberry Pi 4, Volumio 4.119, Wi-Fi on 5 GHz
  • DAC: Topping D10s, USB (enumerates as card 5, USB Audio)
  • Local storage: 2 TB USB SSD (JMicron JMS567 SATA bridge) mounted at /media/ROCKET-nano — note the skips occur on QOBUZ streams, not local files
  • Touchscreen attached: HDMI display + ILI Technology USB multi-touch (Volumio touch display UI running)
  • DAC and SSD share the USB3 controller; touchscreen on USB2

One practical note: this system is at a seasonal house and is now powered down until my next visit, so I can’t pull additional logs in the short term. The log link in the original report covers the identical signature. In the meantime I’ll be testing my second Volumio system (same architecture, version 4.103) for the same behavior, and can gather fresh logs here on my next stay if useful.