PulseAudio on OpenWRT with MPD and other Stuff: Difference between revisions

mNo edit summary
 
(7 intermediate revisions by the same user not shown)
Line 26: Line 26:
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;
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 lib<ins>mpd</ins>client
opkg install ffmpeg-full ffprobe alsa-utils alsa-ucm-conf mpd-full mpd-avahi-service mpc lib<ins>mpd</ins>client


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


...but first: opkg install python3 (don't worry that the OpenWRT version of Python 3 is lower than the required version of PulseMixer, as it seems to work fine)
...but first: opkg install python3 (don't worry that the OpenWRT version of Python 3 is lower than the required version of PulseMixer, as it seems to work fine)
==== MPD Notes ====
* Make sure to install ffmpeg-full, using opkg install ffmpeg-full EXPLICITLY, otherwise ffmpeg-mini will be installed (which miraculously does NOT include support for the simplest format there is, .WAV Files)
* ffprobe is a useful tool to install
* Modify the /etc/init.d/mpd File to run as root:root (just do it, saves a lot of trouble later)


====The Errors====
====The Errors====
Line 42: Line 48:
chmod: /dev/mixer: No such file or directory
chmod: /dev/mixer: No such file or directory
chmod: /dev/dsp: No such file or directory
chmod: /dev/dsp: No such file or directory
</syntaxhighlight>Will this fix it (spoiler alert, NO, so like Frankie said "don't do it")?: opkg install gst1-mod-dv<ins>dsp</ins>u 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"
</syntaxhighlight>Will this fix it (spoiler alert, NO, so like Frankie said "don't do it")?: opkg install gst1-mod-dv<ins>dsp</ins>u 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".  Just kidding, fix is below;
 
*...just make sure the Audio Device is plugged in.


=====The "Show Stopper" for PulseAudio=====
=====The "Show Stopper" for PulseAudio=====
Line 60: Line 68:


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.
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.
===Surround Sound===
First thing to do is this, enable or put this item in the /etc/pulse/default.conf file: <code>default-sample-channels = 6</code>
Then add all of the below instead (to cut down on any pops and hisses;


===Bluetooth (AKA Bluez)===
===Bluetooth (AKA Bluez)===
Line 80: Line 93:


====FIRST! (or rather the next thing to do)====
====FIRST! (or rather the next thing to do)====
Because OpenWRT doesn't include of the Bluez Tools (nope, not Blues Clues), make sure PulseAudio has the Bluetooth Modules loaded up and ready to go!
REMEMBER: PulseAudio has to be properly configured and running for Bluetooth (bluetoothctl) to work!  and because OpenWRT doesn't include of the Bluez Tools (nope, not Blues Clues), make sure PulseAudio has the Bluetooth Modules loaded up and ready to go (IE, the AVAHI version of PulseAudio)!


<br />
See: [[PulseAudio on OpenWRT with MPD and other Stuff#Installation of Software]]
 
AND make sure the /etc/pulse/system.pa loads the Bluetooth Module


====Crap that Does NOT work====
====Crap that Does NOT work====
Line 92: Line 107:
===ALSA Related Commands===
===ALSA Related Commands===


==== Starting and Stopping ALSA ====
====Starting and Stopping ALSA====
Good luck!  Ain't no ALSA service.  Oh, wait, try the following (it's the only solution besides restarting that seems to work, because modpropbe seems to be 'neutered' on OpenWRT with no additional 'modprobe package' available);
Good luck!  Ain't no ALSA service.  Oh, wait, try the following (it's the only solution besides restarting that seems to work, because modpropbe seems to be 'neutered' on OpenWRT with no additional 'modprobe package' available);


* "Stop ALSA Service": echo '1-1' > /sys/bus/usb/drivers/usb/unbind
*"Stop ALSA Service": echo '1-1' > /sys/bus/usb/drivers/usb/unbind
* "Start ALSA Service": echo '1-1' > /sys/bus/usb/drivers/usb/bind
*"Start ALSA Service": echo '1-1' > /sys/bus/usb/drivers/usb/bind
* ...followed by: alsactl restore
*...followed by: alsactl restore
* ...and just as a note, stopping and starting pulseaudio has the net effect of re-reading the /etc/asound.conf file.
*...and just as a note, stopping and starting pulseaudio has the net effect of re-reading the /etc/asound.conf file.
*...and pkill -9 pulseaudio (works great if the process is 'stuck', and don't forget okpg install procps-ng-pkill)
 
/usr/share/pulseaudio/alsa-mixer/paths/<span> </span>: Path to ALSAMIXER settings (yup, PulseAudio is in the path!)
 
/proc/asound/card0/usbmixer<span> </span>: possible location where ALSAMIXER gets names for different controls


alsactl<span> </span>: Good for testing basic sound device settings (Top Tip: By default, for whatever reason, the "state" (AKA stored configuration) Directory (/var/lib/alsa) does not exist, so create it.
alsactl<span> </span>: Good for testing basic sound device settings (Top Tip: By default, for whatever reason, the "state" (AKA stored configuration) Directory (/var/lib/alsa) does not exist, so create it.
Line 117: Line 137:


alsamixer: shows a text GUI of controls
alsamixer: shows a text GUI of controls
cat /sys/kernel/debug/usb/devices<span> </span>: shows details about various USB Devices


aplay -l<span> </span>: shows list of sound devices
aplay -l<span> </span>: shows list of sound devices
Line 227: Line 249:


====amixer-webui====
====amixer-webui====
opkg install git git-http python3 python3-pip (assumes ALSA is installed already)
opkg install git git-http libmbedtls python3 python3-pip (assumes ALSA is installed already) (substitute python2 for older versions of OpenWRT)


pip3 install flask
pip3 install flask
Line 277: Line 299:


Done.
Done.
...and what channels are available from a device, well, use this command: amixer -c 0 scontents
Below is the output for a 7.1 surround USB Audio Device;<syntaxhighlight lang="text">
Simple mixer control 'PCM',0
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right - Rear Left - Rear Right - Front Center - Woofer - Side Left - Side Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 37 [43%] [-37.50dB] [on]
  Front Right: Playback 37 [43%] [-37.50dB] [on]
  Rear Left: Playback 60 [69%] [-20.25dB] [on]
  Rear Right: Playback 60 [69%] [-20.25dB] [on]
  Front Center: Playback 60 [69%] [-20.25dB] [on]
  Woofer: Playback 60 [69%] [-20.25dB] [on]
  Side Left: Playback 60 [69%] [-20.25dB] [on]
  Side Right: Playback 60 [69%] [-20.25dB] [on]
Simple mixer control 'PCM',1
  Capabilities: pvolume pswitch pswitch-joined
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 87
  Mono:
  Front Left: Playback 4 [5%] [-62.25dB] [on]
  Front Right: Playback 4 [5%] [-62.25dB] [on]
Simple mixer control 'Line',0
  Capabilities: cvolume cswitch cswitch-joined
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 56
  Front Left: Capture 16 [29%] [0.00dB] [on]
  Front Right: Capture 16 [29%] [0.00dB] [on]
Simple mixer control 'Mic',0
  Capabilities: cvolume cswitch cswitch-joined
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 56
  Front Left: Capture 16 [29%] [0.00dB] [on]
  Front Right: Capture 16 [29%] [0.00dB] [on]
root@PandoraWRT:/MP3#
</syntaxhighlight>




Line 458: Line 518:
<br />
<br />


=== Rough Notes; ===
===Rough Notes;===
The below two items are functionally equivalent;
The below two items are functionally equivalent;
----pcm.LINE {
----pcm.LINE {