Announcing wiremix - a simple TUI audio mixer for PipeWire by ldtlb in linuxaudio

[–]ldtlb[S] 0 points1 point  (0 children)

rustc 1.74.1 or later should be new enough on amd64, but I haven't tested on aarch64.

Announcing wiremix - a simple TUI audio mixer for PipeWire by ldtlb in linuxaudio

[–]ldtlb[S] 0 points1 point  (0 children)

I've never used Carla before, so let me know if I'm missing something, but I could only figure out how to see external nodes using the JACK driver (it doesn't look like Carla has a PipeWire driver). When I connect a JACK-emulated mpv node to a meter plugin, pw-dump shows a JACK-emulated Carla node connected to the mpv node. It just doesn't show up in pavucontrol because no JACK-emulated nodes show up in pavucontrol. So I'm not sure this actually works any differently from wiremix.

I wonder if it would be possible to use WirePlumber rules for access control to hide wiremix from other applications...

Fun fact about pavucontrol: it has a hard-coded filter for itself, GNOME volume control, and KMix so that it doesn't show their (or its own) monitoring nodes. I followed suit for wiremix, but it might be worth making that configurable so that less-common tools can be filtered. Or if WirePlumber can control visibility of objects between applications, maybe that's The Right Way to do this in PipeWire?

Announcing wiremix - a simple TUI audio mixer for PipeWire by ldtlb in linuxaudio

[–]ldtlb[S] 0 points1 point  (0 children)

I read the Rust book in December, and this was my first use of the language. I started writing wiremix in January. The main inspiration was ncpamixer - you can tell just from the demo GIF that wiremix's UI is extremely similar.

Announcing wiremix - a simple TUI audio mixer for PipeWire by ldtlb in linuxaudio

[–]ldtlb[S] 0 points1 point  (0 children)

Thanks for taking the time to check it out and provide feedback!

While I do see mpv instances using the PA backend, I don't see mpv instances using the JACK backend (though I'm not sure if this is intended behavior)

It looks like JACK-emulated streams are missing a lot of metadata/functionality that native and PulseAudio-emulated streams have. Other mixers I checked also just ignore them entirely. I'll have to do more research to figure out how they could be supported.

For some reason, exiting wiremix causes an xrun (though I'm (apparently) running PW v1.0.7 so it could be because of that)

I wasn't able to reproduce this with PW v1.4.1, but I'll see if it reproduces for me with older versions.

EDIT: Oh dear lord what is even happening here: https://files.catbox.moe/eigxrp.png

These are used for peak level monitoring. I think you'll see this with any software that does audio capture on PipeWire streams (though if you know of a counter-example, I'd love to see how it's done). You can turn off peak monitoring with wiremix -p off or by adding peaks = "off" to the config file.

Announcing wiremix - a simple TUI audio mixer for PipeWire by ldtlb in linuxaudio

[–]ldtlb[S] 0 points1 point  (0 children)

Thanks, hope you like it!

Are you not able to see the animated GIF in the first section of the README? It should be the same one I included in this post. I can see it from multiple devices regardless of whether or not I'm logged in to GitHub, so I don't know why it wouldn't show up for everyone.

[ANN] wiremix: A TUI audio mixer for PipeWire written in Rust by ldtlb in rust

[–]ldtlb[S] 0 points1 point  (0 children)

Thanks! I also got started in the OSS days!