Elgato Wave:3 USB microphone detected but no audio captured — suspended state in PipeWire

I recently switched from Windows to Fedora 44 and my Elgato Wave:3 microphone is not working in any application (Discord, ZapZap, GNOME Settings). After extensive troubleshooting I found the following:

Root cause identified (partially): The Wave:3 only accepts S24_3LE format on Linux, not the standard S16_LE. Recording with the correct format works:

arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 5 /tmp/test.wav

However, applications still fail because PipeWire repeatedly suspends the device. Discord logs confirm the cycle:

[AVError] no-audio-input-detected — audioInputDeviceName: "Elgato Wave 3 Mono"
[AVErrorManager] Error resolved
[InputWatcher] Silence: false
[InputWatcher] Silence: true

Symptoms:

  • Discord (Flatpak) reports no-audio-input-detected cyclically
  • ZapZap (Flatpak) does not detect audio input
  • GNOME Settings shows no microphone activity
  • PipeWire detects the device correctly
  • Node: alsa_input.usb-Elgato_Systems_Elgato_Wave_3_BS49J1A14632-00.mono-fallback
  • arecord -l and wpctl status and pactl list sources all show the device

Versions:

  • Fedora 44, kernel 7.0.10-201.fc44.x86_64
  • PipeWire 1.6.6
  • WirePlumber active
  • xdg-desktop-portal 1.21.2
  • Discord Flatpak 1.0.140

Relevant findings:

arecord with wrong format fails:

arecord: set_params:1393: Sample format non available
Available formats:
 - S24_3LE

journalctl shows USB reset events on resume:

xhci_hcd 0000:01:00.0: xHC error in resume, USBSTS 0x401, Reinit
usb usb1: root hub lost power or was reset

pactl list sources shows the device correctly as s24le 1ch 48000Hz.

What I have tried:

  • WirePlumber rule with session.suspend-timeout-seconds = 0 — device still suspends
  • PipeWire config with custom node using S24_3LE format
  • wave3-pulse.conf with stream.properties for F32LE conversion
  • USB reset via /sys/bus/usb/devices/3-2/authorized
  • Older kernel from GRUB — same issue

Question: How do I permanently prevent PipeWire from suspending the Wave:3, or force it to use S24_3LE correctly so applications can access it stably?

Additional finding — device needs a “wake-up” recording:

Running two consecutive arecord commands works — the first one wakes the device, the second captures audio correctly:

bash

arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 1 /dev/null && \
arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 5 /tmp/test.wav

This confirms the issue is PipeWire suspending the Wave:3 between uses, and the device requires an explicit wake-up before it can capture audio. The WirePlumber rule with session.suspend-timeout-seconds = 0 does not seem to prevent this behavior.

Thanks

Hey.

I do have a solution for the issue with the Wave 3 being identified as an output device, rather than an input. So far, it’s persistent through restarts and updates.

I have no idea whether it actually does precisely what you asked for; but if you, or anyone else finding this thread, just want a simple, quick solution:

Install Pulse Audio Volume Control (or pavucontrol, as it’s also known) → Start it and navigate to the Configuration tab → Switch the Profile for the Elgato Wave:3 to Pro Audio → Restart the PC (systemctl daemon-reload MAY also work, but I haven’t tested that)

Your microphone should now show up as an option for input devices in Discord, etc. Simply selecting it there should work.

I hope this helps.