Audio Routing for some games on steam

Hi there!

I’ve been trying to transition to Linux because I’m sick of Microsoft and Apple, but I’ve been experiencing some weird issues, they are not related exclusively to Fedora, as I had similar issues with other distros like PopOS, let me explain.

My set up is core i7 13700k on a Z690 board, I’m running Fedora 43 Rawhide, i was on Fedora42 I rolled to the 43 trying to see if it could fix anything, I use a USB audio interface, Antelope Orion Studio, it’s USB Class Compliant, so its outputs and inputs are detected without any problems, i can’t tweak anything without it’s software, but all my audio work is done on Mac OS, so I don’t care if i can’t change parameters on linux, I just want the output basic functionality.

So the sound card, works just fine out of the box, I can see it on the pipewire list and it works as intended.

the problem is, on Steam, when I have the Orion Studio selected as default output, on most of the games i will get no sound output, I tried a bunch, (Timberborn, Schedule I, Sekiro…) But on others like Expedition 33 or Undertale, it works just fine. Using the AI I tried a bunch of stuff like blacklisting BuiltIn Audio, or HDMI output, in case the apps were confused by trying to route the audio through some devices listed earlier, with no success. I also tried to rename Aux0 and aux1 from the Orion Studio to Front Left and Front Right which is the default name for the HDMI output . (BTW I don’t have any HDMI sound because my monitor doesn’t have speakers)

So what I found out is, on Sound Settings, when I launch those games with no sound they don’t even appear there, but there is something curious, when I launch the games with the default sound set on the HDMI, the hdmi sound activity, on the preferences or pavucontrol, shows activity, IF I SWITCH THEN TO THE ORION, the audio gets routed correctly :expressionless: and I get sound out of the app, as soon as I restart it with the default output being the Orion Studio, I get no sound again and there is no audio being detected from the app, is like it fails doing the first connection or something. The workaround I did is keep the HDMI as de default option and manually switch each app individually to the Orion Studio when sound is being played, and that seems to just work, but it’s pretty annoying but well since I only have to do it once per application… I guess its a viable workaround.

Anyone knows why or how could that be fixed? The no sound issue over USB also happened on PopOS using Heroic Game Launcher on EpicGames instead of Steam, so its something not exclusive to steam proton, or steam way of handling sound, it’s probably related to wine, but also native Linux Launcher games for Long Dark for example also didn’t gave me audio… and this didn’t run any Wine so I’m completely lost, Firefox, Discord and other apps route audio through USB Orion Studio just fine.

Thank you!

Unless you are happy to debug a broken system it’s better to stay on the release version of fedora, f42. f43 rawhide is still be developed and subject to change.

I wonder if the volume from some games has been set to 0.
Yoiu should be able to Alt-TAB out of the game and check the sound settings.

How many channels does the USB audio controller expose to the system? What does Gnome Settings/ Sound show?
There was a bug in pipewire 1.4.4 affecting wine/proton games with support for multi channel 5.1/7.1 audio setups. This looks quite similar, but I guess it might have something to do with the device’s configuration.

I guess that by starting the game with the HDMI/DP audio sink audio is set up as the usual 2 channel stereo FL,FR configuration. Then you can re-route this stream to the USB device.

you can inspect the configuraion with

wpctl status 
wpctl inspect <ID>   , ID is the number  of the sink(s) /inputs / devices from the previous command

or with pulseaudio commands

pactl list cards
pactl list sinks short 
pactl list sinks 

a simple stereo audio device looks something like this:

$ pactl list sinks short
49	alsa_output.pci-0000_00_05.0.analog-stereo	PipeWire	s16le 2ch 48000Hz	SUSPENDED

$ pactl list sinks 
<deleted>
                audio.channels = "2"
		audio.position = "FL,FR"
<deleted>

Hello! Here is my output from wpctl status

PipeWire 'pipewire-0' [1.4.5, diafebus@fedora, cookie:1647691224]
 └─ Clients:
        34. uresourced                          [1.4.5, diafebus@fedora, pid:2010]
        35. WirePlumber                         [1.4.5, diafebus@fedora, pid:2017]
        36. pipewire                            [1.4.5, diafebus@fedora, pid:2019]
        51. WirePlumber [export]                [1.4.5, diafebus@fedora, pid:2017]
        52. kwin_wayland                        [1.4.5, diafebus@fedora, pid:2023]
        90. discord_capture                     [1.4.5, diafebus@fedora, pid:3446]
       106.                                     [1.4.5, diafebus@fedora, pid:2321]
       147. Steam                               [1.4.5, diafebus@fedora, pid:98]
       148. xdg-desktop-portal                  [1.4.5, diafebus@fedora, pid:2041]
       149. libcanberra                         [1.4.5, diafebus@fedora, pid:2167]
       150.                                     [1.4.5, diafebus@fedora, pid:2167]
       151. plasmashell                         [1.4.5, diafebus@fedora, pid:2258]
       154. libcanberra                         [1.4.5, diafebus@fedora, pid:2258]
       155.                                     [1.4.5, diafebus@fedora, pid:2258]
       157. Steam Voice Settings                [1.4.5, diafebus@fedora, pid:98]
       158. Firefox                             [1.4.5, diafebus@fedora, pid:2]
       160. Chromium input                      [1.4.5, diafebus@fedora, pid:3529]
       161. WEBRTC VoiceEngine                  [1.4.5, diafebus@fedora, pid:3446]
       162. WEBRTC VoiceEngine                  [1.4.5, diafebus@fedora, pid:3446]
       164. Firefox                             [1.4.5, diafebus@fedora, pid:2]
       165. System Settings                     [1.4.5, diafebus@fedora, pid:6616]
       181. Chromium input                      [1.4.5, diafebus@fedora, pid:1314]
       184. libcanberra                         [1.4.5, diafebus@fedora, pid:6616]
       195. wpctl                               [1.4.5, diafebus@fedora, pid:53357]

Audio
 ├─ Devices:
 │      53. Navi 21/23 HDMI/DP Audio Controller [alsa]
 │      54. HD Pro Webcam C920                  [alsa]
 │      56. Built-in Audio                      [alsa]
 │     191. Antelope Orion Studio III (Custom Stereo) [alsa]
 │  
 ├─ Sinks:
 │      71. Navi 21/23 HDMI/DP Audio Controller Digital Stereo (HDMI 4) [vol: 1.00]
 │  *  212. Antelope Orion Studio III (Custom Stereo) Multichannel [vol: 0.99]
 │  
 ├─ Sources:
 │  *   38. HD Pro Webcam C920 Analog Stereo    [vol: 1.00]
 │     236. Antelope Orion Studio III (Custom Stereo) Multichannel [vol: 1.00]
 │  
 ├─ Filters:
 │  
 └─ Streams:
        95. Firefox                                                     
            111. output_FR       > OrionStudio III:playback_AUX1        [paused]
            120. output_FL       > OrionStudio III:playback_AUX0        [paused]
       115. discord_capture                                             
            105. input_FL        < HD Pro Webcam C920:capture_FL        [active]
            231. input_FR        < HD Pro Webcam C920:capture_FR        [active]
            243. monitor_FL     
            284. monitor_FR     
       166. WEBRTC VoiceEngine                                          
             80. output_FL       > OrionStudio III:playback_AUX0        [active]
            116. output_FR       > OrionStudio III:playback_AUX1        [active]
       171. WEBRTC VoiceEngine                                          
            172. input_FL        < HD Pro Webcam C920:capture_FL        [active]
            173. monitor_FL     
            174. input_FR        < HD Pro Webcam C920:capture_FR        [active]
            175. monitor_FR     
       180. Firefox                                                     
            159. output_FR       > OrionStudio III:playback_AUX1        [init]
            179. output_FL       > OrionStudio III:playback_AUX0        [init]
       244. Firefox                                                     
             50. output_FL       > OrionStudio III:playback_AUX0        [active]
            121. output_FR       > OrionStudio III:playback_AUX1        [active]
       286. discord_capture                                             
             99. input_FR        < Firefox:output_FR    [init]
            114. input_FL        < Firefox:output_FL    [init]
            266. monitor_FL     
            269. monitor_FR     

Video
 ├─ Devices:
 │      69. HD Pro Webcam C920                  [v4l2]
 │      70. HD Pro Webcam C920                  [v4l2]
 │      72. HD Pro Webcam C920                  [libcamera]
 │  
 ├─ Sinks:
 │  
 ├─ Sources:
 │  *  152. HD Pro Webcam C920 (V4L2)          
 │  
 ├─ Filters:
 │  
 └─ Streams:

Settings
 └─ Default Configured Devices:
         0. Audio/Sink    alsa_output.usb-Antelope_Audio_OrionStudio_III_2912421000130-00.multichannel-output
         1. Audio/Source  alsa_input.usb-046d_HD_Pro_Webcam_C920_E485506F-02.analog-stereo

As you can see, here i have the Orion as Sink selected hardware, but when it’s set up that way is when most games won’t get me any sound, is like it fails to even connect any audio server, and then the game has no sound at all, when the sink is linked to the HDMI and then using Sound from settings I route the stream media sound to the orion, then it works. But not always, counter strike 2 on native linux doesn’t work neither way, unless i use proton but then it won’t work for online gaming.

wpctl inspect 212
id 212, type PipeWire:Interface:Node
    alsa.card = "1"
    alsa.card_name = "OrionStudio III"
    alsa.class = "generic"
    alsa.components = "USB23e5:a221"
    alsa.device = "0"
    alsa.driver_name = "snd_usb_audio"
    alsa.id = "USB Audio"
    alsa.long_card_name = "Antelope Audio OrionStudio III at usb-0000:00:14.0-11.2, high speed"
    alsa.mixer_name = "USB Mixer"
    alsa.name = "USB Audio"
    alsa.resolution_bits = "24"
    alsa.subclass = "generic-mix"
    alsa.subdevice = "0"
    alsa.subdevice_name = "subdevice #0"
    alsa.sync.id = "00000000:00000000:00000000:00000000"
    api.alsa.card.longname = "Antelope Audio OrionStudio III at usb-0000:00:14.0-11.2, high speed"
    api.alsa.card.name = "OrionStudio III"
    api.alsa.headroom = "256"
    api.alsa.path = "hw:1"
    api.alsa.pcm.card = "1"
    api.alsa.pcm.stream = "playback"
    api.alsa.period-num = "128"
    api.alsa.period-size = "256"
    audio.channels = "24"
    audio.position = "AUX0,AUX1,AUX2,AUX3,AUX4,AUX5,AUX6,AUX7,AUX8,AUX9,AUX10,AUX11,AUX12,AUX13,AUX14,AUX15,AUX16,AUX17,AUX18,AUX19,AUX20,AUX21,AUX22,AUX23"
    card.profile.device = "3"
  * client.id = "51"
    clock.quantum-limit = "8192"
    device.api = "alsa"
    device.class = "sound"
    device.icon-name = "audio-card-analog"
  * device.id = "191"
    device.profile.description = "Multichannel"
    device.profile.name = "multichannel-output"
    device.routes = "0"
  * factory.id = "19"
    factory.name = "api.alsa.pcm.sink"
    library.name = "audioconvert/libspa-audioconvert"
  * media.class = "Audio/Sink"
  * node.description = "Antelope Orion Studio III (Custom Stereo) Multichannel"
    node.driver = "true"
    node.loop.name = "data-loop.0"
    node.max-latency = "16384/48000"
  * node.name = "alsa_output.usb-Antelope_Audio_OrionStudio_III_2912421000130-00.multichannel-output"
  * node.nick = "OrionStudio III"
    node.pause-on-idle = "false"
  * object.path = "alsa:acp:III:3:playback"
  * object.serial = "2365"
    port.group = "playback"
  * priority.driver = "1000"
  * priority.session = "1000"

That’s the wpctl inspect on the Orion devices, yes it’s a 24 channel input and output sound device… but for firefox and other stuff it does work fine.

pactl list sinks short 
72      alsa_output.pci-0000_03_00.1.hdmi-stereo-extra3 PipeWire        s32le 2ch 48000Hz       SUSPENDED
2365    alsa_output.usb-Antelope_Audio_OrionStudio_III_2912421000130-00.multichannel-output     PipeWire        s24le 24ch 48000Hz      RUNNING

I don’t know what else to try, I also tried messing around with the ~/.asoundrc
adding this

ctl.dmixer {
type pulse
}
pcm.pulse {
type pulse
}
ctl.pulse {
type pulse
}
pcm.!default {
type pulse
}
ctl.!default {
type pulse
}

but I get the same results.. so yeah, I’m a bit lost because it shows it can work just fine but does weird stuff here and there… and as I said it’s not exclusive to fedora, it happened with other linux distros with my particular set up.

And which profile does pavucontrol display for the OrionStudio?

Reading the pipewire issue, it seems that multichannel setups require proper naming of the audio positions to connect outputs to sinks. If you have only a stereo setup then set profile to ‘Stereo’ profile.
I guess that maybe you need to create a config file to configure it properly and limit number of audio channels and audio positions to match your setup.
see PipeWire: pipewire-props

EDIT:
pipewire wiki is great, here is an example for a virtual sink

It maps FL FR to AUX0 AUX1

context.modules = [
    {   name = libpipewire-module-loopback
        args = {
            node.description = "UMC Speakers"
            capture.props = {
                node.name = "UMC_Speakers"
                media.class = "Audio/Sink"
                audio.position = [ FL FR ]
            }
            playback.props = {
                node.name = "playback.UMC_Speakers"
                audio.position = [ AUX0 AUX1 ]
                target.object = "alsa_output.usb-BEHRINGER_UMC404HD_192k-00.pro-output-0"
                stream.dont-remix = true
                node.passive = true
            }
        }
    }
    {   name = libpipewire-module-loopback
        args = {
            node.description = "UMC Headphones"
            capture.props = {
                node.name = "UMC_Headphones"
                media.class = "Audio/Sink"
                audio.position = [ FL FR ]
            }
            playback.props = {
                node.name = "playback.UMC_Headphones"
                audio.position = [ AUX2 AUX3 ]
                target.object = "alsa_output.usb-BEHRINGER_UMC404HD_192k-00.pro-output-0"
                stream.dont-remix = true
                node.passive = true
            }
        }
    }
]
1 Like

You just need to have a 3.5mm jack audio output on your Monitor wich you connect to the speakers which you can power with usb. This way, everything with HDMI sound will play over this speakers, if correctly selected in the audio settings. I can not confirm this for steam and wine but, every device connected to the monitor with HDMI uses the monitor as HDMI output source.

lol, I think we can be pretty sure he has much better equipment attached to the Orion Studio.
I think a virtual sink is probably the solution here.

1 Like

I just can talk for me, and I do have just a 3.5mm jack on my monitor :slight_smile:

haha, no its not a solution, Orion outputs are 6.3 balanced jacks, and my monitors only input from TRS 6.3 balanced or XLR, wouldn’t make much sense to use a 3.5mm jack on those speakers my idea is to use the setup as I use it on my other OS, if i have to be plugging and unplugging cables doesn’t make any sense to use linux then, too much stuff to work around just to make it work. I like tinkering with stuff and I’m trying the system to see what can I make work and what I can not, for now I’m using the HDMI out and then re route through System Settings>Sound, when I have some time I will read the link you shared on pipewire, I’d love to make that work properly, it clearly has the capability to route audio correctly, but I might need to maturity to get there for those cards with more outputs and inputs, I tried reaper with the orion and all inputs are recognized correctly and get signal.