Only some Steam games have audio

I’m currently trying to debug why only certain games launched from Steam will play audio, whereas others will not. I have no issues playing audio in other apps, for example, my browser. I have attempted to check journalctl for any info while I boot problematic games up, but nothing jumps out at me. FWIW, I have selected the expected audio interface as the default using pavucontrol.

After doing some research, I see many posts that recommend trying to install various packages, such as pipewire-pulse, lib32 versions of various audio packages, and different alsa packages, but none of these have solved the issue.

pacman -Q | rg "pulse|pipe|alsa|pavu"

alsa-card-profiles 1:1.0.6-1
alsa-firmware 1.2.4-3
alsa-lib 1.2.11-1
alsa-plugins 1:1.2.7.1-2
alsa-topology-conf 1.2.5.1-3
alsa-ucm-conf 1.2.11-1
alsa-utils 1.2.11-1
gst-plugin-pipewire 1:1.0.6-1
lib32-alsa-lib 1.2.11-1
lib32-alsa-plugins 1.2.7.1-2
lib32-libpipewire 1:1.0.6-1
lib32-libpulse 17.0-1
libpipeline 1.5.7-2
libpipewire 1:1.0.6-1
libpulse 17.0-3
pavucontrol 1:5.0+r66+gc330506-1
pipewire 1:1.0.6-1
pipewire-alsa 1:1.0.6-1
pipewire-audio 1:1.0.6-1
pipewire-jack 1:1.0.6-1
pipewire-pulse 1:1.0.6-1

Meanwhile, I have no pulseaudio service (this seems expected?)

systemctl --user status pulseaudio.{socket,service}

Unit pulseaudio.socket could not be found.
Unit pulseaudio.service could not be found.

I do have pipewire service:

systemctl --user status pipewire.{socket,service}

● pipewire.socket - PipeWire Multimedia System Sockets
     Loaded: loaded (/usr/lib/systemd/user/pipewire.socket; enabled; preset: enabled)
     Active: active (running) since Mon 2024-05-20 20:55:35 EDT; 1h 23min ago
   Triggers: ● pipewire.service
     Listen: /run/user/1000/pipewire-0 (Stream)
             /run/user/1000/pipewire-0-manager (Stream)
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/pipewire.socket

May 20 20:55:35 nick-workstation systemd[1163]: Listening on PipeWire Multimedia System Sockets.

● pipewire.service - PipeWire Multimedia Service
     Loaded: loaded (/usr/lib/systemd/user/pipewire.service; disabled; preset: enabled)
     Active: active (running) since Mon 2024-05-20 20:55:35 EDT; 1h 23min ago
TriggeredBy: ● pipewire.socket
   Main PID: 1172 (pipewire)
      Tasks: 3 (limit: 38277)
     Memory: 19.3M (peak: 21.9M)
        CPU: 6.692s
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire.service
             └─1172 /usr/bin/pipewire

May 20 20:55:35 nick-workstation systemd[1163]: Started PipeWire Multimedia Service.

and likewise pipewire-pulse:

systemctl --user status pipewire-pulse.{socket,service}

● pipewire-pulse.socket - PipeWire PulseAudio
     Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.socket; enabled; preset: enabled)
     Active: active (running) since Mon 2024-05-20 20:55:35 EDT; 1h 24min ago
   Triggers: ● pipewire-pulse.service
     Listen: /run/user/1000/pulse/native (Stream)
     CGroup: /user.slice/user-1000.slice/user@1000.service/app.slice/pipewire-pulse.socket

May 20 20:55:35 nick-workstation systemd[1163]: Listening on PipeWire PulseAudio.

● pipewire-pulse.service - PipeWire PulseAudio
     Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-05-20 20:55:35 EDT; 1h 24min ago
TriggeredBy: ● pipewire-pulse.socket
   Main PID: 1174 (pipewire-pulse)
      Tasks: 3 (limit: 38277)
     Memory: 29.7M (peak: 30.8M)
        CPU: 4.196s
     CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
             └─1174 /usr/bin/pipewire-pulse

May 20 20:55:35 nick-workstation systemd[1163]: Started PipeWire PulseAudio.

Which I guess is expected based on what I understand about how pipewire / pipewire-pulse works, but I’m not quite sure.

When I run inxi -Aax:

inxi -Aax

Audio:
  Device-1: NVIDIA GA102 High Definition Audio driver: snd_hda_intel v: kernel
    pcie: gen: 1 speed: 2.5 GT/s lanes: 16 link-max: gen: 4 speed: 16 GT/s
    bus-ID: 0b:00.1 chip-ID: 10de:1aef class-ID: 0403
  Device-2: AMD Starship/Matisse HD Audio vendor: ASUSTeK
    driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
    bus-ID: 0d:00.4 chip-ID: 1022:1487 class-ID: 0403
  Device-3: Apogee Symphony Desktop driver: snd-usb-audio type: USB rev: 2.0
    speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 1-3:3 chip-ID: 0c60:002a
    class-ID: fe01
  Device-4: Elgato Systems GmbH Wave XLR driver: snd-usb-audio type: USB
    rev: 2.0 speed: 12 Mb/s lanes: 1 mode: 1.1 bus-ID: 1-4:4 chip-ID: 0fd9:007d
    class-ID: fe01 serial: DS22K1A00050
  API: ALSA v: k6.9.1-arch1-1 status: kernel-api
    tools: alsactl,alsamixer,amixer
  Server-1: PipeWire v: 1.0.6 status: active with: 1: pipewire-pulse
    status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
    4: pw-jack type: plugin tools: pactl,pw-cat,pw-cli,wpctl

I see that some other audio device which are not my target sink (trying to output to device 3) are available, could it be possible that some device is taking priority? Is there an easy way to determine this? The default sink and source appear to be correctly set when I run pactl info:

pactl info

Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 11315
Tile Size: 65472
User Name: nick
Host Name: nick-workstation
Server Name: PulseAudio (on PipeWire 1.0.6)
Server Version: 15.0.0
Default Sample Specification: float32le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.usb-Apogee_Electronics_Corp_Symphony_Desktop-00.multichannel-output
Default Source: alsa_input.usb-Elgato_Systems_Elgato_Wave_XLR_DS22K1A00050-00.mono-fallback
Cookie: 0850:bed3

So I’m really not sure what to try next. :sweat: Thanks in advance for any help!

I do see these in journalctl but I don’t believe they’re related?

May 20 22:33:05 nick-workstation rtkit-daemon[1192]: Failed to look up client: No such file or directory
May 20 22:33:05 nick-workstation rtkit-daemon[1192]: Warning: PolicyKit call failed: Error reading file “/proc/151174/status”: No such process
May 20 22:33:06 nick-workstation rtkit-daemon[1192]: Failed to look up client: No such file or directory
May 20 22:33:06 nick-workstation rtkit-daemon[1192]: Failed to look up client: No such file or directory
May 20 22:33:07 nick-workstation rtkit-daemon[1192]: Failed to look up client: No such file or directory
May 20 22:33:07 nick-workstation rtkit-daemon[1192]: Warning: PolicyKit call failed: Process not found

What games exactly?

I know some like Darkest Dungeon have various combinations of broken wayland/pipewire connections, esp older native games.

Ironically Darkest Dungeon works better as a windows/proton game than on native linux because it has broken pulseaudio dependancies into it when everyone is using pipewire these days. Specifically, the cut scenes have audio, but the game and menus do not on linux native.

1 Like

Interesting. No wayland here though, using i3wm so I believe that’d be X11. The games that seem to have issues playing audio include Helldivers 2 and Crow Country, I can test for more though. Games that do not have issues include Portal, Celeste, Animal Well, and Lisa. I’m not necessarily convinced that it is something wrong with the games themselves and have more of a feeling that is it a compatibility issue.

Helldivers 2: https://www.protondb.com/app/553850

For Crow Country, have you actually tried different versions of Proton?

Hmm, nothing helping out on the protondb listing for Helldivers. I just tried a few games that are not working with different proton versions (was using experimental, 9.0 and 8.0) and none worked. Could it be possible that some applications are seeing, for example, my HDMI? Its listed as my first sound card by ALSA, but I have set pavucontrol to have my default output to be the Apogee and the input to be the Elgato.

aplay -l

**** List of PLAYBACK Hardware Devices ****
card 0: NVidia [HDA NVidia], device 3: HDMI 0 [Dell AW3423DW]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 1: ALC1220 Digital [ALC1220 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Desktop [Symphony Desktop], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: XLR [Elgato Wave XLR], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

I also just did some testing of games that work vs those that don’t and noticed some odd behavior in pavucontrol, where games that do not have any audio don’t even show the application as a playback source in pavucontrol, where as games that are working as expected show the name of the app in pavucontrol / current signal. I’ll attach some screenshots as examples.

Crow Country:

Animal Well:

Hollow Knight:

That is indeed strange. Try changing Proton to as far back as Proton 6. I have to use Proton 7 with Cyberpunk 2077, as newer versions just don’t work properly.

You really just gotta test things out. Both with Proton and with system settings. Of course, if it doesn’t show the games in pavucontrol, it’s very likely that there is something wrong with the way the games are communicating with your system.

I didn’t mean to say it’s only a Wayland issue. Some game shave broken pulseausio or Wayland hooks that prevent piepewire from hooking in properly.

Looking at you particular issue though I’m not certain what could cause that, but the symptoms are similar to the issue I was having with darkest dungeon. It also did not appear on the audio control panel, until I launched it with an old proton version (6 or 7 iirc, but that game is 10 years old or so)

1 Like

what does pw-top say when you’re running a game with no sound?

wpctl status?

also you can try easyeffects, it has an actual gui that shows you active audio streams which can be useful (but you should be able to see them just fine in pw-top and wpctl), it’s more reliable than pavucontrol because pavucontrol was made for pulseaudio but you’re using pipewire, pavucontrol tends to work fine but you know, when experiencing issues on pipewire, better to try to solve them with tools actually made for pipewire. Easyeffects isn’t an actual replacement for pavucontrol or anything though, it just happens to have this one feature that could benefit you in this scenario.

I don’t have helldivers or crow country so i can’t test those.

You could also try some actions to see if they affect sound, like plugging in/out some headphones or a microphone, also you have what 4 audio devices? Could it be that the games are trying to play sound on the wrong device?

This shouldn’t make a difference since some games do work, but just in case, try renaming .local/state/wireplumber to something like .local/state/wireplumber-bak.

Then reboot and let your system recreate the directory automatically. Try the problematic games again after.

1 Like

Hey, thanks, sorry for the late response but this was a good pointer for debugging (I didn’t know about pw-top). There appears to be some differences between games that are working and games that aren’t. wpctl status seems correct

CC wpctl

vs. Animal Well wpctl

I see both running in wpctl when they are running and my sink and source appears correct. However pw-top is not the same story.

CC pw-top:

Animal well pw-top:

yeah pipewire is not detecting any audio stream at all for crow country :thinking:

You might be going to need someone who really knows what they’re talking about, maybe try reporting the issue on pipewire’s git page.

You’re sure to get the help you need there but you may need to take more steps to troubleshoot the issue yourself, looks like there isn’t gonna be an easy answer unless you have disabled sound in the game’s options or something.

Yeah audio settings for these games do not have audio turned off, I made sure to check that. Even furthering the weirdness, HD2 appears to match games that are working :sweat:

I can give this a try and if no luck, I will bring the issue to pipewire since it seems to be pipewire related.

2 Likes

This was another good lead to chase, though I don’t feel like I’m any closer to a solution. When I backup my wireplumber state and reboot, the default audio device that I want to use for output (Apogee Symphony) is not the one that’s selected for output, instead the one that I want to use for input (Elgato Wave XLR) is default for both input and output.

On a program by program basis, I can go in an select the output for the problematic games in pavucontrol (they appear in playback sources now) and then I get audio from my desired output, however there appears to be two issues:

  1. If I set this output as the default output device for the system as whole and not just per program, it breaks

  2. For whatever reason, the input from the Elgato mic input is not seen by pavu or any app, despite being set to the “Analog Stereo + Mono Input” profile, so games / browser / discord, etc. do not get my mic input unless I change it to just “Mono Input” profile. And of course, changing it to just the “Mono Input” profile, for whatever reason, results in output not being sent to my desired output device in games as I originally described in OP and previous posts (i.e nothing in wp-top).

So this does seem like it is a configuration issue, or perhaps even a hardware issue, but I guess I will bring it to pipewire if no one has any other ideas.

A screenshot coupled with your description would be better in this case. That and being able to manipulate the settings myself :sweat_smile:

But the fact that it can kinda do the right thing now makes me think you just need to keep testing the different settings until you find the right (or expected) setup, or at least an okay (or good enough) setup.

Might try a graphical pipewire sound routing program like qpwgraph to see if anything unexpected comes up on it?

This was a great recommendation, thanks. While I was messing around I figured it’d be easier to debug with just a single audio device, and the Apogee has XLR inputs so I plugged my mic into it and decided to try using just that and unplugged the Elgato.

I’ve installed a GUI called Helvum and am doing some debugging. Here are some screenshots of the routing while I boot a problematic and two non-problematic games:

Here we can see that Animal Well “finds” my output correctly on its own (ignore webrtc stuff, that was cause discord was running):

Here’s Portal, it also seems to have no problem “finding” my outputs:

Now for Crow Country which was giving me trouble:

Weirdly, it boots and the pane for the game is not even available in the helvum UI at all (I tried moving other panes around, it wasn’t there). So I tried connecting the Elgato again and bizarrely it “finds” the elgato outputs.

Now I have pane from which I can send the game audio outs to the ones I want like so, and great I have audio now

But when I remove the device and close and reopen the game, I’m back to where I started, no pane for Crow Country is visible. This makes me wonder if the fact that the Elgato “offers” a playback FL and playback FR whereas the Apogee is multi-channel audio and does not might be tripping some games up? Perhaps there is a way to create a custom profile that sets the outputs I need for the Apogee to be playback FL and playback FR?

1 Like

This is probably the issue. Because the device is multi-purpose, some games get confused about what to do with them and probably aren’t written to handle such devices/scenarios.

Remember that games are programs, so the problematic games are probably just missing else if statements.

Yep, I inevitably got something working for now, using a virtual sink with loopback to appear as a standard stereo LR playback destination, and then piping that into the proper places on my output device.

Pipewire seems very powerful, but the journey of getting here was painful. :sweat_smile:

1 Like

Yes, it is, especially since working out of the box is what most people want, rather than advanced settings/features.

But, once you add more than 2 external devices, advanced settings usually become necessary.

Great that you found out how to get things working.

2 Likes