Skip to content

MixScreen: load decks one at a time, stop blocking on both files - #42

Open
djdefi wants to merge 2 commits into
CircuitMess:masterfrom
djdefi:fix/mixscreen-single-deck-load
Open

MixScreen: load decks one at a time, stop blocking on both files#42
djdefi wants to merge 2 commits into
CircuitMess:masterfrom
djdefi:fix/mixscreen-single-deck-load

Conversation

@djdefi

@djdefi djdefi commented Aug 20, 2026

Copy link
Copy Markdown

MixScreen::start() required both f1 and f2 to be chosen before
any audio would play — you had to go through the song list twice with
nothing happening in between. Replacing a track also called stop(),
tearing down the whole MixSystem (and the other deck's playback)
just to swap one file.

Now:

  • start() constructs MixSystem and begins playback as soon as one
    file is available; the second deck can be browsed/loaded later while
    the first keeps playing (independent per-deck load/play, like most
    standalone DJ controllers).
  • returned()/new loadChannel() route into MixSystem::openChannel()
    so loading or replacing a deck live no longer stops the other deck.
  • encBtnHold() no longer calls stop(); it just closes the selected
    deck's file and reopens SongList, tracking which deck to fill via
    loadingChannel.

Depends on MixSystem::openChannel()/_openChannel() from
CircuitMess/JayD-Library#19.

Not covered here (flagged for follow-up, out of scope for this fix):
SourceAAC/SourceMP3::processReadJob() busy-waits on the audio
thread when the async SD read hasn't completed yet, which can still
cause stutter independent of the loading UX fixed here.

djdefi and others added 2 commits August 20, 2026 11:58
Previously MixScreen::start() required both f1 and f2 to be chosen
before any audio would play, forcing users through the song list
twice with nothing happening in between. Also, replacing a track
via encBtnHold called stop(), destroying the whole MixSystem (and
the other deck's playback) just to swap one file.

Now:
- start() constructs MixSystem and begins playback as soon as one
  file is available; the second deck can be loaded later while the
  first keeps playing (mirrors Denon Prime GO-style independent
  per-deck load).
- returned()/loadChannel() route into the new
  MixSystem::openChannel() so loading/replacing a deck live no
  longer stops the other deck.
- encBtnHold no longer calls stop(); it just closes the selected
  deck's file and reopens SongList, tracking which deck to fill via
  loadingChannel.

Depends on the MixSystem::openChannel()/_openChannel() addition in
JayD-Library.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 1b2cfc57-c6c7-44ce-95c9-72368d409ca8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant