Skip to content

Background music loop during the install #67

Description

@loki666

A ~30-minute install is a long time staring at a progress bar in silence. A quiet background loop
would make the medium feel finished. Nice-to-have, explicitly behind anything that affects whether
an install works.

What the medium has today: nothing

install/manifest.lock carries exactly one audio-adjacent row — libpipewire, the client library,
pulled in transitively by gamescope's own depends. It is not sound; you can watch it fail
harmlessly in any installer log:

[gamescope] [Error] pipewire: pw_loop_new failed
Warning: failed to setup PipeWire, screen capture won't be available

The shipped device image has nine, for contrast:

alsa-card-profiles  alsa-lib  alsa-topology-conf  alsa-ucm-conf
pipewire  pipewire-alsa  pipewire-audio  pipewire-pulse  wireplumber

So the UCM is not on the installer medium.

Do NOT bring PipeWire/WirePlumber

WirePlumber wants a user session and the installer deliberately has none — no logind, no
/run/user/0. That is precisely the XDG_RUNTIME_DIR trap that has already cost two hardware
slots (gamescope got seatd, DRM master, Turnip and DSI-1, then aborted on its wayland socket). Do
not re-enter that class of problem for background music.

Plain ALSA instead: alsa-utils + alsa-lib + alsa-ucm-conf, three packages, no daemons.

The part that is not obvious: aplay alone makes no sound here

alsa-ucm-conf only SHIPS the use-case configs. Something has to apply them, and on the device that
something is WirePlumber — the very thing being dropped. With plain ALSA it has to be explicit:

alsaucm -c <card> set _verb HiFi     # alsa-utils. Without it the codec path is never set up.
amixer  -c <card> sset ... unmute    # gains
aplay -q /usr/share/novadeck/install/loop.wav

Skipping the alsaucm step looks exactly like "this board has no audio hardware", which is how an
afternoon disappears.

Shape

  • A separate unit, not a UI child. Wants= (never Requires=) off the installer session, so a
    wedged audio path cannot touch the thing that installs a disk. install/ui already runs three
    children (SpineRun, NetJoin, VerifyRun) and this one has no reason to be a fourth.
  • aplay cannot loop or decode. WAV only: while :; do aplay -q loop.wav; done, with a small
    gap per iteration. 22 kHz mono is ~44 KB/s, so a 3-minute loop is ~8 MB against a 2.1 GB medium;
    44.1 kHz stereo is ~32 MB and still fine.
  • Every step guarded so SILENCE is the failure mode, never a hang. This is the tool that has to
    work when everything else on the device is broken. A SoundWire wedge needs a REBOOT to clear on
    these boards, and paying that during a 30-minute install would be a bad trade for ambience.
  • Music licensing has to be settled before anything is staged into mkimage.sh — the medium is
    published.

Check first

Confirm alsa-utils actually resolves in the holo repos before committing to the design.
python-pygame and gtk2 both turned out not to exist there — which is why the SDL binding arrives
as a pinned wheel (install/pygame-ce.pin). make relock-installer is what answers it.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Nice to have -- hygiene, polish, weak leadsarea/sessionSubsystem: session

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions