Asus Z590-I Motherboard "built-in" Audio uses USB interface, but Microphone is not working

I just built a new computer using an Asus Z590-I motherboard and performed a fresh install of Fedora 35. The Audio on this motherboard uses a USB Interface. I’m running the Cinnamon Desktop.

When I open “Sound Settings” and switch to the “Input” tab, I see a listing for “Microphone USB Audio”, but it doesn’t register any input. Likewise Skype, Slack, and Zoom also do not register any input from the Microphone.

However, Audacity allows me to select “Audio: #2 (hw:0,2)” which Does register the input from my microphone.

How can I set this “Audio: #2 (hw:0,2)” as the System Default so that Zoom and other applications will use it?

Welcome to ask.:fedora:edora @xdmtoter

Could you please give us more info’s as :

With your equipment connected pleas do inxi -Fzx in terminal and post the output as </> Preformatted text here.

Might be the output lspci & lsusb, at least the audio part, would be helpful too.

Thanks. Glad to be here!

The details you requested:

# inxi -Fzx
System:
  Kernel: 5.16.18-200.fc35.x86_64 x86_64 bits: 64 compiler: gcc
    v: 2.37-10.fc35 Desktop: Cinnamon 5.2.7
    Distro: Fedora release 35 (Thirty Five)
Machine:
  Type: Desktop System: ASUS product: N/A v: N/A serial: N/A
  Mobo: ASUSTeK model: ROG STRIX Z590-I GAMING WIFI v: Rev 1.xx
    serial: <filter> UEFI: American Megatrends v: 1301 date: 11/25/2021
CPU:
  Info: 8-core model: 11th Gen Intel Core i7-11700K bits: 64 type: MT MCP
    arch: Rocket Lake rev: 1 cache: L1: 640 KiB L2: 4 MiB L3: 16 MiB
  Speed (MHz): avg: 1417 high: 4854 min/max: 800/4900:5000 cores: 1: 800
    2: 800 3: 2488 4: 988 5: 832 6: 800 7: 800 8: 800 9: 800 10: 800 11: 800
    12: 800 13: 1069 14: 2229 15: 3024 16: 4854 bogomips: 115200
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: Intel RocketLake-S GT1 [UHD Graphics 750] vendor: ASUSTeK
    driver: i915 v: kernel bus-ID: 00:02.0
  Device-2: NVIDIA GA104 [GeForce RTX 3060 Ti Lite Hash Rate]
    vendor: ASUSTeK driver: nvidia v: 510.60.02 bus-ID: 01:00.0
  Device-3: Microsoft LifeCam HD-3000 type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 1-14.2.3:8
  Display: server: X.Org v: 1.20.14 driver: X: loaded: nvidia
    gpu: i915,nvidia resolution: 1: 1280x1024~60Hz 2: 3840x2160~60Hz
  OpenGL: renderer: NVIDIA GeForce RTX 3060 Ti/PCIe/SSE2
    v: 4.6.0 NVIDIA 510.60.02 direct render: Yes
Audio:
  Device-1: Intel Tiger Lake-H HD Audio vendor: ASUSTeK driver: snd_hda_intel
    v: kernel bus-ID: 00:1f.3
  Device-2: NVIDIA GA104 High Definition Audio vendor: ASUSTeK
    driver: snd_hda_intel v: kernel bus-ID: 01:00.1
  Device-3: ASUSTek USB Audio type: USB
    driver: hid-generic,snd-usb-audio,usbhid bus-ID: 1-10:3
  Device-4: Microsoft LifeCam HD-3000 type: USB
    driver: snd-usb-audio,uvcvideo bus-ID: 1-14.2.3:8
  Sound Server-1: ALSA v: k5.16.18-200.fc35.x86_64 running: yes
  Sound Server-2: PulseAudio v: 15.0 running: no
  Sound Server-3: PipeWire v: 0.3.49 running: yes
Network:
  Device-1: Intel Ethernet I225-V vendor: ASUSTeK driver: igc v: kernel
    port: N/A bus-ID: 6f:00.0
  IF: enp111s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
  IF-ID-1: tun0 state: unknown speed: 10 Mbps duplex: full mac: N/A
  IF-ID-2: tun1 state: unknown speed: 10 Mbps duplex: full mac: N/A
  IF-ID-3: tun2 state: unknown speed: 10 Mbps duplex: full mac: N/A
RAID:
  Device-1: md0 type: mdraid level: raid-0 status: active size: 931.27 GiB
  Info: report: N/A blocks: 976506880 chunk-size: 512k
  Components: Online: 0: sda1 1: sdb1
Drives:
  Local Storage: total: raw: 5.46 TiB usable: 5.46 TiB
    used: 794.19 GiB (14.2%)
  ID-1: /dev/nvme0n1 vendor: Western Digital model: WDS100T1X0E-00AFY0
    size: 931.51 GiB temp: 47.9 C
  ID-2: /dev/sda vendor: Smart Modular Tech. model: SHGS31-500GS-2
    size: 465.76 GiB temp: 26 C
  ID-3: /dev/sdb vendor: Smart Modular Tech. model: SHGS31-500GS-2
    size: 465.76 GiB temp: 26 C
  ID-4: /dev/sdc type: USB vendor: Seagate model: BUP BL size: 3.64 TiB
Partition:
  ID-1: / size: 662.99 GiB used: 17.33 GiB (2.6%) fs: ext4
    dev: /dev/nvme0n1p6
  ID-2: /boot size: 973.4 MiB used: 160 MiB (16.4%) fs: ext4
    dev: /dev/nvme0n1p5
  ID-3: /boot/efi size: 95 MiB used: 30.8 MiB (32.4%) fs: vfat
    dev: /dev/nvme0n1p2
  ID-4: /home size: 915.56 GiB used: 160.94 GiB (17.6%) fs: ext4
    dev: /dev/dm-0 mapped: luks-70ef3430-f72f-4c95-8167-99055599b35e
Swap:
  ID-1: swap-1 type: zram size: 8 GiB used: 0 KiB (0.0%) dev: /dev/zram0
Sensors:
  System Temperatures: cpu: 27.8 C mobo: N/A gpu: nvidia temp: 39 C
  Fan Speeds (RPM): N/A gpu: nvidia fan: 45%
Info:
  Processes: 471 Uptime: 3m Memory: 62.12 GiB used: 3.77 GiB (6.1%)
  Init: systemd runlevel: 5 Compilers: gcc: 11.2.1 Packages: N/A
  note: see --pkg Shell: Bash v: 5.1.8 inxi: 3.3.13
# lspci
00:00.0 Host bridge: Intel Corporation Device 4c43 (rev 01)
00:01.0 PCI bridge: Intel Corporation Device 4c01 (rev 01)
00:02.0 VGA compatible controller: Intel Corporation RocketLake-S GT1 [UHD Graphics 750] (rev 04)
00:06.0 PCI bridge: Intel Corporation Device 4c09 (rev 01)
00:14.0 USB controller: Intel Corporation Tiger Lake-H USB 3.2 Gen 2x1 xHCI Host Controller (rev 11)
00:14.2 RAM memory: Intel Corporation Tiger Lake-H Shared SRAM (rev 11)
00:15.0 Serial bus controller: Intel Corporation Tiger Lake-H Serial IO I2C Controller #0 (rev 11)
00:15.1 Serial bus controller: Intel Corporation Device 43e9 (rev 11)
00:16.0 Communication controller: Intel Corporation Tiger Lake-H Management Engine Interface (rev 11)
00:17.0 SATA controller: Intel Corporation Device 43d2 (rev 11)
00:1b.0 PCI bridge: Intel Corporation Device 43c0 (rev 11)
00:1b.4 PCI bridge: Intel Corporation Device 43c4 (rev 11)
00:1c.0 PCI bridge: Intel Corporation Device 43b8 (rev 11)
00:1c.6 PCI bridge: Intel Corporation Device 43be (rev 11)
00:1c.7 PCI bridge: Intel Corporation Device 43bf (rev 11)
00:1d.0 PCI bridge: Intel Corporation Tiger Lake-H PCI Express Root Port #9 (rev 11)
00:1f.0 ISA bridge: Intel Corporation Device 4385 (rev 11)
00:1f.3 Audio device: Intel Corporation Tiger Lake-H HD Audio Controller (rev 11)
00:1f.4 SMBus: Intel Corporation Tiger Lake-H SMBus Controller (rev 11)
00:1f.5 Serial bus controller: Intel Corporation Tiger Lake-H SPI Controller (rev 11)
01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti Lite Hash Rate] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GA104 High Definition Audio Controller (rev a1)
02:00.0 Non-Volatile memory controller: Sandisk Corp WD PC SN810 / Black SN850 NVMe SSD (rev 01)
04:00.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:00.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:01.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:02.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
05:03.0 PCI bridge: Intel Corporation Thunderbolt 4 Bridge [Maple Ridge 4C 2020] (rev 02)
06:00.0 USB controller: Intel Corporation Thunderbolt 4 NHI [Maple Ridge 4C 2020]
3a:00.0 USB controller: Intel Corporation Thunderbolt 4 USB Controller [Maple Ridge 4C 2020]
6f:00.0 Ethernet controller: Intel Corporation Ethernet Controller I225-V (rev 03)
# lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0bc2:ab28 Seagate RSS LLC Seagate Backup Plus Portable 5TB SRD00F1
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0b05:19af ASUSTek Computer, Inc. AURA LED Controller
Bus 001 Device 008: ID 045e:0810 Microsoft Corp. LifeCam HD-3000
Bus 001 Device 007: ID 1bcf:08a0 Sunplus Innovation Technology Inc. Gaming mouse [Philips SPK9304]
Bus 001 Device 006: ID 0c45:5004 Microdia Redragon Mitra RGB Keyboard
Bus 001 Device 005: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 003: ID 0b05:1998 ASUSTek Computer, Inc. USB Audio
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Because Audacity is the only program that seems to recognize my Microphone input, I am trying to use it to make some sense of this issue.

In Audacity, If I go to Preferences, then Devices, the “Host” dropdown has two options:
ALSA and JACK Audio Connection Kit.

If I select “JACK Audio Connection Kit” then my Microphone is just listed as “USB Audio Analog Stereo” under Recording Device, but I cannot get Audacity to capture any audio from it.

However, if I select ALSA, that is when I get the “USB Audio: #2 (hw:0,2)” option under Recording Device, and this is the one that actually works.

So now my question is this; Since pipewire-jack-audio-connection-kit obviously doesn’t like my microphone, can I just remove it and simply use ALSA system wide?

Would you like to try to install pavucontrol then open and select “Input Devices” tab. On the very bottom right corner select “Show: All Input Devices”. After that, then on the main menu of “Input Devices” select the appropriate input devices from the drop down menu.

If above not works, you could register the device by modifying /usr/share/pipewire/pipewire.conf. Please read the couple first lines on how to make custom conf.

Open pipewire.conf and find part as bellow:

    # This creates a single PCM source device for the given
    # alsa device path hw:0. You can change source to sink
    # to make a sink in the same way.
    #{ factory = adapter
    #    args = {
    #        factory.name           = api.alsa.pcm.source
    #        node.name              = "alsa-source"
    #        node.description       = "PCM Source"
    #        media.class            = "Audio/Source"
    #        api.alsa.path          = "hw:0"
    #        api.alsa.period-size   = 1024
    #        api.alsa.headroom      = 0
    #        api.alsa.disable-mmap  = false
    #        api.alsa.disable-batch = false
    #        audio.format           = "S16LE"
    #        audio.rate             = 48000
    #        audio.channels         = 2
    #        audio.position         = "FL,FR"
    #    }
    #}

Then modify it more or less as bellow:

    # This creates a single PCM source device for the given
    # alsa device path hw:0. You can change source to sink
    # to make a sink in the same way.
    { factory = adapter
        args = {
            factory.name           = api.alsa.pcm.source
            node.name              = "My-Input"
            node.description       = "PCM Source"
            media.class            = "Audio/Source"
            api.alsa.path          = "hw:0,2"
    #        api.alsa.period-size   = 1024
    #        api.alsa.headroom      = 0
    #        api.alsa.disable-mmap  = false
    #        api.alsa.disable-batch = false
    #        audio.format           = "S16LE"
    #        audio.rate             = 48000
            audio.channels         = 2
            audio.position         = "FL,FR"
        }
    }

From above you could see the part api.alsa.path = "hw:0,2" that select hw:0,2 as the input source.

Thank you for the additional information. After modifying the pipewire.conf file and restarting the pipewire.service I had a “PCM Source” listed in the volume control, and it worked in All applications.

However, after a reboot I didn’t have any sound at all… pipewire.service was failing to start, and journalctl was showing errors like:

pipewire[5272]: spa.alsa: 'hw:0,2': capture open failed: No such file or directory

So I went back to Audacity, and found that my Microphone was now listed as hw:2,2:confounded:

I modified pipwire.conf again and restarted the service, and now it is working.

This is going to get frustrating if I need to edit this file every time I reboot…

Hi, no need to edit your current custom device node on pipewire.conf. Just add it again with different hw and give different name node.name = "My-Other-Node".

To make default input device, you could use wpctl command.

Run wpctl status and it will show the list of devices. Find part:

Audio
...
 │  
 ├─ Sources:
 │  *   46. Built-in Audio Analog Stereo        [vol: 0.74]

Take a note the number, for above example 46 then run wpctl set-default 46. The default one will have * sign.

Btw, it make me curious why it changes the source after reboot. Would you like to run:

arecord -l

(lowercase L) to see the list of input sources?

Again today I had to modify /usr/share/pipewire/pipewire.conf after a reboot, as my USB Microphone had switched back to hw:0,2 instead of hw:2,2.

Here is the output of arecord -l as requested:

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Audio [USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Audio [USB Audio], device 1: USB Audio [USB Audio #1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Audio [USB Audio], device 2: USB Audio [USB Audio #2]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 3: HD3000 [Microsoft® LifeCam HD-3000], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

This is starting to look like it needs a bug report, but I’ve never done that, so wouldn’t know where to begin.

You should not edit this file as @oprizal mentioned … please read the header of the file !

# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.

Otherwise the system might will overwrite it when updating.

1 Like

From the result of arecord -l there no device with Card 2: ... device 2 .. or hw:2,2. Most likely the problem actually are your system sometime failed to detect (initiate or probing) the hw:2,2 card during the boot. Unfortunately, I have no idea why it happen.

I tried adding two sections. One for hw:0,2 and another for hw:2,2, but this prevents pipewire from starting with the error:

pipewire[5272]: spa.alsa: 'hw:0,2': capture open failed: No such file or directory

And I have no sound at all. :confounded:

Thank you for your concern. I fully understand your reasoning. However; if pipewire receives an update, I WANT IT to overwrite this file. That way I will immediately know if the new version corrected the issue. I do NOT Want a custom config in ~/ or /etc confusing the issue when a new version is released.

That is because every time I reboot, it’s a gamble if I’m going to get hw:0,2 or hw:2,2. When I posted that, hw:0,2 was the working interface. Today, hw:2,2 is the working interface.

Here is new output from arecord -l from today with hw:2,2 as the working microphone port:

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 2: Audio [USB Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [USB Audio], device 1: USB Audio [USB Audio #1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Audio [USB Audio], device 2: USB Audio [USB Audio #2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: HD3000 [Microsoft® LifeCam HD-3000], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

I should also note that it does not matter if I plug my microphone into the rear jack on the motherboard or the front header. Neither work with a Vanilla config, and Both work with the custom config that Oprizal posted. It seems hw:2,2 is Both the Front and Rear Microphone jacks on this crazy motherboard.

I should also mention that I tried switching from wireplumber to pipewire-media-session, but that made no difference.

It looks like the front connector is with an usb port and probably also powered with usb?
Bad connection and/or to old/to long cable can cause power problems.
This could also explain your problem that the system not always recognizes it to the same time.

Please take it of from the connector on the motherboard (the cable from the front connector) and try to run the computer a while this way.

If problem solved you have to inspect the cable and clean the connectors on both sides with a contact cleaning spray. If you still have problems just disconnect the front connector again and
buy you a decent audio extention and use just the back (Motherboard connector).

This motherboard uses the Realtek ALC4080, which is “a multi-channel USB audio codec that embeds a USB 2.0 controller with a high-performance audio codec.”

Looking at the datasheet for this chip, I see it has 1.8V, 3.3V, and 5V input, so no; It is not only powered by USB.

That is the secondary issue. The fact that I have to test and possibly modify a custom config file after each boot is just an added annoyance. The real concern is that the Stock Config doesn’t recognize my microphone at all. One would think that a Modern Operating System would have no trouble working with the Microphone input jack that is built into the motherboard… :confounded:

I will try this to see if the device detection is more consistent, but again, this is the secondary issue.

This is a 100% new computer build. New Motherboard, New Case. I better not have to clean the connectors on a front panel connector on a brand new case. :grin:

I don’t plan on ever using the front panel audio connectors anyway. I just tried them as a test. Sorry I mentioned it. I see the additional info just distracted from the real issue.

I guess you are confusing somethings now:
Linux based operating systems never worked for all hardware out of the box. This is just not possible. And Linux generally also comes without software who is behind a closed source model.

Is this codec you are speaking really a open source codec? If not, it already not fits in to the Linux model. You will need tor install drivers/codecs who not come with the “Stock”.
Your collaboration could be to share your experience with other community members while sharing your knowledge how you install the necessary software/drivers who not come with it.

Just watching on Asus website and clicking on software shows me that the motherboard is designed for a closed source Operating system.

The opensource model Fedora Linux follows, expects from you to collaborate with information and tests that in future also your hardware is working with Linux. Newer kernel generally work with newer Hardware alias has to be adapted for it.

So, you might have to rethink your expectations on Fedora Linux or any other Linux project.

I hope you not get me wrong. The help we do offer you here is, that you can reduce the annoyance you have to live with. Maybe you could try Fedora 36 to see if the the Hardware responses better?

Fully understand what you’re saying. I just wasn’t sure where or how to contribute. I see now that I am not the only one who is having this issue. I found this thread:

I will try to see if I can provide any input over there.

Thanks to everyone here. I at least have a temporary workaround until the community can resolve this properly so other new users don’t suffer the same confusion.

To make this less annoying, I wrote a script that will grep the output of arecord -l and use that to sed the ~/.config/pipewire/pipewire.conf.d/pipewire.conf file, and then restart pipewire. Then I set this script as a startup application in cinnamon.

I just rebooted 5 times, and the microphone works every time.

At least you found a work-around. :+1:

Now if you were to report a bug with all you have done and the solution that works for you it truly would be great since the developers may be able to fix it properly and permanently. :thinking:

If you do a bug report please post the link here so others can follow it as well.

Sounds, very nice. I would love to see the script. If you have gist or similar you could share it as a link and or include it in your profile.
So people can see that you are already a contributor. Even if it is “just” for a workaround.

I do believe for 35, as long used with kernel 5.16, there will be no solution. If someone fights with same problem could be very happy with your script.

I started by making a template file:

mkdir -p ~/.config/pipewire/pipewire.conf.d/
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/pipewire.conf.d/pipewire.conf.template

Then I made the changes recommended by @oprizal, with one modification. I used X instead of the actual Card Number:

    { factory = adapter
        args = {
            factory.name           = api.alsa.pcm.source
            node.name              = "alsa-source"
            node.description       = "Rear Microphone"
            media.class            = "Audio/Source"
            api.alsa.path          = "hw:X,2"
    #        api.alsa.period-size   = 1024
    #        api.alsa.headroom      = 0
    #        api.alsa.disable-mmap  = false
    #        api.alsa.disable-batch = false
    #        audio.format           = "S16LE"
    #        audio.rate             = 48000
            audio.channels         = 2
            audio.position         = "FL,FR"
        }
    }

Next I wrote a simple script which greps the output of arecord to determine the current Card Number, and uses that Card Number to overwrite ~/.config/pipewire/pipewire.conf.d/pipewire.conf, and then restart pipewire and wireplumber:

/usr/local/bin/fix-mic.sh

#!/bin/bash
 
CARDNO=$(/usr/bin/arecord -l | /usr/bin/grep '\[USB\ Audio\ \#2\]' | /usr/bin/cut -d: -f1 | /usr/bin/cut -d\  -f2)
 
sed "s;hw:X,2;hw:${CARDNO},2;g" ~/.config/pipewire/pipewire.conf.d/pipewire.conf.template > ~/.config/pipewire/pipewire.conf.d/pipewire.conf
        
systemctl --user restart pipewire.service
 
systemctl --user restart wireplumber.service

Don’t forget to make it executable:

chmod +x /usr/local/bin/fix-mic.sh

And finally, configure this as a Startup Application in Gnome/Cinnamon/etc…

I also had to Modify the Startup Application listings for Zoom and Skype with a 5 Second Delay to make sure the fix-mic.sh script was finished before these launch. Otherwise they would not detect the correct Microphone.

1 Like