New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FEAT(client): Implement native support for PipeWire #4970
Conversation
1d53f8e
to
c5a8aa9
Compare
Tested on top of 1.4.0-devel-snapshot-005 and was working pretty well. I could crash the application by hammering the apply button in the audio settings, which you already confirmed on IRC. I'll be using this branch for a few days, so I can give more feedback. |
Holy shit, I love you for this! I am using Pipewire for some time now, and even for pro-audio stuff I prefer it over Jack as I can achieve lower latency with Pipewire than I can even with Jack. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like the Pipewire API implementation is very clean. The implementation is very short, and about 90% of the changes are just added Pipewire headers. Thanks so much for this!
btw. closes #3834 |
Until a few days ago I was using JACK for input and PulseAudio for output, mainly due to JACK not allowing to set different buffer sizes for separate audio interfaces. PipeWire allowed me to replace both efficiently, while retaining the ability to control streams through KDE's applet!
Thanks a lot! I was quite surprised to see that the implementation ended up being way shorter compared to the JACK one while basically implementing all features. Not to mention that the PipeWire implementation also supports common surround mappings. |
While using this patch I can only select the "Mono" pipewire output, mumble crashes otherwise. I also go a full pipewire crash when using this patch.
|
Very interesting. Which version of PipeWire are you using? I'm using the ALSA backend as well and all channel mappings work for me. |
I'm currently using Pipewire 0.3.26. Just to be clear, all mappings work on the ALSA backend. |
In that case I would report the bug upstream. |
@mweinelt Crash fixed! |
Confirmed, hammering apply does not crash anymore! One nit: I've set the audio output mapping to Stereo, but it will not remember that and return to Mono after every restart. |
With the latest changes mumble doesn't crash for me anymore when selecting anything else than the "Mono" output. 👍 |
The crash reported by @mweinelt was caused by the I assume in your case it caused PipeWire to crash as well. Or maybe @mweinelt and I didn't notice it happening because the service restarted instantly. In any case, glad to hear you're not encountering the issue anymore! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of ptr.reset(new ...)
you should use ptr = std::make_unique< ... >()
I can confirm that the pipewire backend now remembers the input/output profiles set. Awesome! |
Nice! I did a cursory test on PipeWire 0.3.27 and the initial test is positive 🎉. Some quick glances at I do seem to experience an issue with this back end where I get no microphone input after restarting Mumble. If I then go to the Settings screen and click "Apply" once, it is fixed. The output does not have this problem. All the dropdowns are also set to their correct values - in my case, there is only one microphone and it's called "mono", and it's visibly selected. The input meter also does not go up and down until I click "Apply". In case it is relevant: my PipeWire setup is pretty much default, I didn't enable any additional modules or modify any configuration files. I'll try to give this new back end some more real-world endurance testing in the next couple of days 🙂 . |
The device input actually exposes profiles, not devices, like the JACK backend. The label for the select is just unprecise among the multiple backends supported. |
Tested with PipeWire 0.3.26. The implementation is quite basic and simple, yet it surpasses the JACK one in terms of features. For example, support for the most common surround mappings is provided. As opposed to JACK, an option to disable the auto endpoint connection is not provided. However, it's something that can be easily implemented if needed. Support for echo cancellation will definitely be added in future.
@JuniorJPDJ The nodes should now appear as @Gert-dev I cannot reproduce the issue with 0.3.26. Could you perhaps try that version as well? |
Tested with PipeWire 0.3.26.
The implementation is quite basic and simple, yet it surpasses the JACK one in terms of features.
For example, support for the most common surround mappings is provided.
As opposed to JACK, an option to disable the auto endpoint connection is not provided.
However, it's something that can be easily implemented if needed.
Support for echo cancellation will definitely be added in future.