PulseAudio on OpenWRT with MPD and other Stuff

Wiki.TerraBase.info
Revision as of 17:41, 4 August 2024 by Root (talk | contribs)
Jump to navigation Jump to search

First of all, good to be back. Issues with MediaWiki, along with time constraints on fixing it, have prevented new articles from being created.

Anyway, working on several different Routers running OpenWRT 23.05.03 using PulseAudio, MPD (MPC), Bluetooth (BlueZ), and a bunch of other stuff including PulseMixer (works great on OpenWRT, even though the 'required' version is above the version of Python3 available in OpenWRT).

Starting Thoughts

The PulseAudio people are brilliant. But their documentation is a bit questionable. Case in point is the https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/ page. It starts off on a big tangent, then seems to go off on other tangents before addressing the main concepts. That's cool and not a complaint against the PulseAudio people. It's just a little note to let people know who are reading it and just want to get RTP to work that they shouldn't get frustrated. Just keep reading, ignore most of the stuff at the beginning and you'll get there.

A Deep, Deep Hole with PulseAudio at the Very Beginning (on OpenWRT)

The nice people with the OpenWRT project and all their hard work is very much appreciated. But there are also the head scratching (and head exploding) moments too. For instance: How can so much effort be put into something, yet one little item is allowed to (or isn't configured correctly) remain in place that prevents the PulseAudio service from operating properly?

Short Answer: Configure and / or compile the PulseAudio Service in such way that it requires whatever user (including the ROOT User!) be a member of the audio Group. And then don't put that User in the Audio Group as part of the installation. There you go, problem created! And all the work done to include PulseAudio in OpenWRT? Pointless (until the issue is corrected).

The issue? As noted, the root User is not included in the audio Group. Add it in there using groupadd (which in and of itself is interesting to install) or just edit the /etc/group File.

Ready? Let's Install PulseAudio (and dependencies, plus other tools, and see what happens)

Installation of Software

opkg update

opkg install pulseaudio-daemon-avahi pulseaudio-profiles pulseaudio-tools

Do NOT install pulseaudio-daemon (plain), if you want to use Bluetooth to connect to Speakers. The pulseaudio-daemon-avahi contains the necessary bluetooth modules, pulseaudio-daemon (plain) does NOT. One can always disable the avahi service too, without affecting PulseAudio.

Dependencies include some basic ALSA (Advanced Linux Sound Architecture) stuff, but a couple of more items are nice to have for several reason, including testing, so;

opkg install alsa-utils alsa-ucm-conf mpd-full mpd-avahi-service mpc libmpdclient

...and maybe opkg install madplay mpg123 (they don't install any services, so they're just there if you need them)

The Errors

Are these the errors referred to earlier as the "show stopper" for PulseAudio. Nope. Just an annoyance that can be fixed.

chown: /dev/mixer: No such file or directory
chown: /dev/dsp: No such file or directory
chmod: /dev/mixer: No such file or directory
chmod: /dev/dsp: No such file or directory

Will this fix it (spoiler alert, NO, so like Frankie said "don't do it")?: opkg install gst1-mod-dvdspu gst1-mod-audiomixer (a bunch of dependencies would be installed too). We'll get to the fix later, let's focus on the "Show Stopper"

The "Show Stopper" for PulseAudio

Issue this command (it is for 'talking' to the PulseAudio Service): pactl list short sinks

The result: Connection failure: Access denied

Why (as noted earlier, but more details and a solution later): The root User (that's right, the ROOT user) doesn't have the privileges to execute the command. WTF!?

How long did it take to figure out and what was the anger level: 10 Page Diatribe DELETED

Solution: Add the root user to the Audio Group: nano /etc/group;

Before: audio:x:29:
After: audio:x:29:root,mpd

Result: It forking works now: pactl list short sinks

There's a bunch of stuff about Cookies (one of PulseAudio's security methods), anonymous authentication, etc., but this is the simplest and works without changing PulseAudio's default configuration.

Bluetooth (AKA Bluez)

Installation

opkg install bluez-daemon bluez-libs bluez-tools bluez-utils bluez-utils-btmon bluez-utils-extra kmod-input-uinput (other dependencies will install too)

...and that's just the basic Bluetooth stuff. It doesn't include the firmware and driver for any specific hardware

Hardware

Bluetooth hardware is fairly inexpensive these days. To 'future-proof' things as much as possible, order hardware with the latest and greatest version of Bluetooth. As of this writing, summer 2024, Bluetooth 5.3 is the contemporary version.

A nice feature to have is a removable antenna. There are more compact devices that don't have removable antennas. And if you want super cheap device, step down to Bluetooth 4.x (still works great with speakers).

Bluetooth Controller - A nice feature to have is a removable Antenna.
Bluetooth Controller - A nice feature to have is a removable Antenna.

Oh, one obnoxious note with Bluez and PulseAudio on OpenWRT is that as of this writing, even though Bluetooth 5.x supports two sets of speakers, just can't make a single controller connect to more than one speaker. Woof!

Example of installing firmware and drivers for Bluetooth Hardware: opkg install rtl8761bu-firmware (bu is the version of the rtl8761 that was designed to work with USB 2.0, so if you're hooking up to a USB 3.0 port, this will work, but according to documentation, won't be optimized. PS: Bluetooth to Speaker will not exceed USB 2.0 speeds).