Return to

Pipewire, I mean Wireplumber no...Pulseaudio? HELP!

Please be patient with me here, this is really confusing to me right now.

I’ve made the jump to…whatever the latest audio implementation is, which apparently is wireplumber, I may be confused since pipewire was the earlier implementation in fedora 34 which is a really quick switch to wireplumber in fedora 35.

I’ve been used to pulseaudio and I can easily understand it, just go into the configuration file and do what you want to do.

All I used it for was to create a virtual mic for applications to hook into like discord and other VOIP services so I can filter them using OBS to negate my fan noise (It’s HOT here) and other QoL things.

All I had to do was put in two lines in the config file to achieve this, now, I have a bucket load of nothing to go from, I’ve tried other implementations with pw-link and even trying remaps which just echo’s my mic, but doesn’t show up as a virtual mic and OBS cannot affect the output.

I’m really stumped and frustrated here, so I thank you for reading this far.

Here are the two lines that I used for :

# Create virtual microphone for OBS filters, than used for VoIP applications
# Virtual sink (input from real mic)
load-module module-null-sink sink_name=MicSource
# Virtual source (source for applications to hook into)
load-module module-virtual-source source_name=VirtualMic master=MicSource.monitor

I’ve read the pipewire wiki and other sources to no avail, it doesn’t accept the module-virtual-source parameter and outputs as an error using pactl.

1 Like


Many of us have ! As of Fedora 35 that is.

The current audio implementation still is pipewire ! wireplumber is a session manager for pipewire not a replacement.

What you need to do this is a patchbay like qjackctl or carla . The pipewire implementation has really made this process you do a lot easier now and very cool to create your pulse audio sinks.

I came across a video you might find useful for exactly what you do with pulseaudio sinks for discord and others.


Hey Magnus,

Thanks for the info, however I’m still confused when I was following the video, when I tried to route and add the sinks via terminal (the GUI way was not working at all) I came to the fact that it was janky.

The closest result I could do was a weird one, the latency was HUGE, literally about 15-20 seconds in the past and the implementation of the sinks is not all there, I got it so OBS can detect my physical mic, but when I tried to route it to a sink called (virt_mic) and then to discord, it would not pick anything up and when I waited for the latency, it was all over the place.

The plugins are another issue, I installed them from dnf, then when I launch catia, they don’t exist? I’ve encountered a lot of problems and caveats and I’ve given it a go, but doing something as simple as a virtual mic with two lines in a config file to this…it’s just mind-boggling.

My process was to try to get Physical_Mic => Virt_Mic => Discord
Didn’t work

Then Physical_Mic => OBS
Worked, obviously

Physical_Mic => OBS => Virt_Mic => Discord
Didn’t work, filters from OBS didn’t crossover and the latency issue occurred.

Should I just change it back to pulseaudio and keep it simple? Cause this is more of a headache that I don’t need.

Note: I’m not an audio engineer, just a guy who would like to have a filtered voice for VOIP applications. Pulseaudio worked, just trying to make sense of pipewire/wireplumber with the same implementation, but failing miserably.

What is the buffer size? you can use pw-top to check this

if you are on Fedora it’s basically baked in, it looks like you are close, but I think there’s something that you could simplify here. Still willing to help, just need to look at things from a different angle.

I can’t see buffer size in pw-top, is it B/Q ?

Also you can switch back to pulseaudio with sudo dnf swap --allowerasing pipewire-pulseaudio pulseaudio ref:

But if you think that I’m close, I’m willing to try it. I’m on Fedora 35 and I tried the pulseaudio swap which works, just wanted to see if I can use the default before I give up on the new ways.

And now I’m pissed because the fedora devs wouldn’t get the fuck out of my podcasts wanking themselves to kingdom cum about how fucking amazing it is

This thread is human art

You are super close. But without a graph (qjackctl catia helvum) to see how you have your pulse sinks, or how you step it all up I can’t tell you step by step.
It already looks like you want to remove pipewire regardless, I would just change approach and map out what you’ve done. Get a high level view of your process. I have notifications on so I can chime ine whenever…

I think the issue is somewhere here :

But a graph would help… Here is an example



Hey Magnus,

Thanks for helping me out here.

I’ve managed to get OBS to do what I want it to do…sort of, not sure, and when I got to discord is just refuses to play ball. Here’s what I’m up to:





I’ve only used a sink and a source from terminal:
pactl load-module module-remap-sink sink_name=virt-mic
pactl load-module module-remap-sink sink_name=virt-mic-source
(Quick and dirty for testing)

Strange enough, when I created the source, it just gave me loopback-12 …I have no idea why it did that. Also Discord is only picking up virt-mic as the output, and it picks up loopback-12 as the input? I have a feeling I didn’t put in the sinks and sources right in pipewire…

Have you tried soundux by the way? As far as Discord goes, this is what I use. Though I think Zoom recently has supported audio-sharing, so maybe that has come to Discord?

I’ve just looked into soundux when you replied, I don’t think it can use filters like OBS-Studio does which my goal.


I have some questions about how you have your mic set up, and where is Discord? Discord usually shows up as a Chromium device.

You can use qjackctl to connect/disconnect the devices and move them around. What I see is, how is your mic being routed? I think you could plug/unplug these virt-mic and loopback devices to streamline a bit. I could tell this is probably why it is so latent.

Right clicking will bring up some choices for you to do some wiring…

I’m experimenting like crazy there’s a lot of mess of unused sinks/sources at the moment, still can’t get discord to pick up the virtual mic, and yeah, I’ve seen the chromium device pop up, however discord is discord and it just dissapears when I start restarting discord for it to pick up new devices (which is the only way for me to test on it).

I’m going to start with inputting pactl sinks/sources to see which ones fit best then go from there.

1 Like

Using this image as a guide, you can start cleaning up what should go where. It looks like you created too many virt devices and the wrong ones are going to the wrong place.

Q: OBS output is going out to a virt mic ? What do you want to send out from OBS? , should just be OBS Input ?

This is your Original Post :

I’m going to attempt to map out. What I think you should do is start renaming virt mic to (Discord, Zoom/Slack), also you noted you were using OBS to filter noise ? Is that correct?

Yeah, using OBS to use my filters that are already made for my mic, I don’t want to separate my master sound into individual devices, I just want to create a virtual mic for VOIP applications like discord to hook into. This has worked in pulseaudio with two lines of parameters, I think it should work in pipewire. Still doing some experimenting.

1 Like

It’s basically the same.

Ok cool.

Then looking at your grid, you need to identify what OBS monitor output > virt mic > loopback 12 > Web RTC voice engine inout is really trying to do…

ATR 2500 USB Microphone is that your main mic? Why is it not infront of the chain? Should be going to your OBS Plug ins or directly into your Sound Card?

Ok, I’m officially lost, is the pipewire documentation complete cause I cannot find any module-virtual-source or master=*.monitor parameters which would help.

What is the equivalent too:

  1. pactl load-module module-null-sink sink_name=MicSource
  2. pactl load-module module-virtual-source source_name=VirtualMic master=MicSource.monitor

Seriously, I cannot find anything on them in the documentation besides the remap ones.

This is my latest attempt which miserably failed: