Pulseaudio Crossover Rack - multi-way crossover design & implementation with linux

Hmmmmm, I played something from my NAS over our (currently weak) wifi network and it started. Could this have something to do with it? It seems fine again with some music copied onto the microSD card. I am in the middle of setting up a wired connection to a network switch in my study, so as such that would not be a disaster. Although i don't understand how this would explain a timing difference between different channels.

It's right on top in Htop, whatever window I have on top, PA, PAXOR en PAVUCTL are always on top. Priority seems sorted.
 
Last edited:
You can try removing and inserting filters after the RPi has started up. If that doesn't help I don't know an answer at the moment, sorry.

There are plans to completely switch to a different approach regarding filter implementation and to use camillaDSP for that. This will probably solve the problem with ladspa plugins and also provide FIR filters. As I'm quite busy with designing hardware though that will probably take some months to implement.
 
Last edited:
I used RPi 3 v1.2 with the latest Raspbian 2020-02-13, only wired ethernet, but it should not be an issue. RPI has power only for 44.1/48kHZ sample rate. Bigger problem are multiple PA streams, but it is true also for the desktop PC. Here are my notes for RPI installation:

1. was only related to old Onkyo SR-TX806, I do not need it for newer VSX-924
sudo nano /boot/config.txt
# uncomment if hdmi display is not detected and composite is being output
hdmi_force_hotplug=1 //default
# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=1
# 1080p at 25Hz for Onkyo SR-TX806
hdmi_mode=33
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
hdmi_drive=2

# added, do not advertise unsupported modes of Onkyo, otherwise it does not turn on the input
hdmi_force_mode=1

2. reboot.
alsamixer // increase volume and test

speaker-test -r 48000 -D hw:0,1 -c 8

3. install PA and pavucontrol
sudo apt install pulseaudio pavucontrol

and set according to phofman:
https://www.diyaudio.com/forums/pc-...sign-implementation-linux-47.html#post5880096
nano ~/.asoundrc

insert:
pcm.hdmi8ch { type hw card ALSA device 1 channels 8 }
sudo nano /etc/pulse/default.pa
Modify it to:
load-module module-udev-detect tsched=0
load-module module-alsa-sink device="hdmi8ch"

set-default-sink alsa_output.hdmi8ch

Now sinks looks like this:
pi@paxor:~ $ pactl list sinks
Sink #0
State: SUSPENDED
Name: alsa_output.hdmi8ch
Description: Built-in Audio
Driver: module-alsa-sink.c
Sample Specification: s16le 8ch 44100Hz
Channel Map: front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
Owner Module: 5
Mute: no
Volume: front-left: 65536 / 100% / 0.00 dB, front-right: 65536 / 100% / 0.00 dB, rear-left: 65536 / 100% / 0.00 dB, rear-right: 65536 / 100% / 0.00 dB, front-center: 65536 / 100% / 0.00 dB, lfe: 65536 / 100% / 0.00 dB, side-left: 65536 / 100% / 0.00 dB, side-right: 65536 / 100% / 0.00 dB
balance 0.00
Base Volume: 65536 / 100% / 0.00 dB
Monitor Source: alsa_output.hdmi8ch.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE DECIBEL_VOLUME LATENCY
Properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "bcm2835 IEC958/HDMI"
alsa.id = "bcm2835 IEC958/HDMI"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "1"
alsa.card = "0"
alsa.card_name = "bcm2835 ALSA"
alsa.long_card_name = "bcm2835 ALSA"
alsa.driver_name = "snd_bcm2835"
device.bus_path = "platform-soc:audio"
sysfs.path = "/devices/platform/soc/soc:audio/sound/card0"
device.form_factor = "internal"
device.string = "hdmi8ch"
device.buffering.buffer_size = "131072"
device.buffering.fragment_size = "131072"
device.access_mode = "mmap+timer"
device.description = "Built-in Audio"
device.icon_name = "audio-card"
Formats:
pcm

Sink #1
State: SUSPENDED
Name: alsa_output.platform-soc_audio.analog-mono
Description: Built-in Audio Analog Mono
Driver: module-alsa-card.c
Sample Specification: s16le 1ch 44100Hz
Channel Map: mono
Owner Module: 21
Mute: no
Volume: mono: 55909 / 85% / -4.14 dB
balance 0.00
Base Volume: 56210 / 86% / -4.00 dB
Monitor Source: alsa_output.platform-soc_audio.analog-mono.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
Properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "bcm2835 ALSA"
alsa.id = "bcm2835 ALSA"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "0"
alsa.card_name = "bcm2835 ALSA"
alsa.long_card_name = "bcm2835 ALSA"
alsa.driver_name = "snd_bcm2835"
device.bus_path = "platform-soc:audio"
sysfs.path = "/devices/platform/soc/soc:audio/sound/card0"
device.form_factor = "internal"
device.string = "hw:0"
device.buffering.buffer_size = "131072"
device.buffering.fragment_size = "131072"
device.access_mode = "mmap+timer"
device.profile.name = "analog-mono"
device.profile.description = "Analog Mono"
device.description = "Built-in Audio Analog Mono"
alsa.mixer_name = "Broadcom Mixer"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card"
Ports:
analog-output: Analog Output (priority: 9900)
Active Port: analog-output
Formats:
pcm


install Pulseaudio Crossover Rack
Debian repository :: T5! DIY Audio Software & Hardware
Pulseaudio Crossover Rack :: T5! DIY Audio Software & Hardware

Run and let install required components by PIP.
 
I have some recommendations regarding the problem with sinks getting out of sync here:

I just enabled real time scheduling for the pulseaudio daemon. The problem seems to have gotten way better (In fact up to now it didn't occur again, even with heavy IO, network loads or computational load).

To do this add a line to /etc/security/limits.conf:

Code:
<username> - rtprio 95

obviously you should replace <username> with the actual username you want to use pulseaudio with.

and add two lines to /etc/pulse/daemon.conf:

Code:
realtime-scheduling = yes
realtime-priority = 5

Worth a try!