I am investigating several solutions to run crossover software on my Alix 3D2 board. The first one, involves running LADSP plugins in Alsa. See here for some examples:
https://www.sidtechtips.com/2016/03/13/raspberry-pi-music-server-built-crossover-dsp/
You can find a lot of information on the following threads on DIY Audio:
http://www.diyaudio.com/forums/pc-based/274331-ladspa-plugin-programming-linux-audio-crossovers.html
http://www.diyaudio.com/forums/twisted-pear/277564-ladspa-filters-digital-crossovers-bbb.html
The bible: http://audio.claub.net/software.html
Instructions
apt-get install ladspa-sdk
Download ACDf plugins from here and follow instructions in Readme file: http://audio.claub.net/LADSPA-plugins.html
My etc/asound.conf file with ACDf plugins (this is a first test and the filters and values have to be optimized):
pcm.!default {
type route
ttable.0.0 1
ttable.1.2 1
ttable.1.3 1
ttable.0.1 1
type plug
slave.pcm crossover
}
ctl.!default {
type hw
card D20
}
pcm.crossover {
type ladspa
slave.pcm speaker
path “/usr/lib/ladspa”
channels 4
plugins
{
0{
label ACDf
policy none
input.bindings.0 “Input”
output.bindings.0 “Output”
input { controls [1 1 0 3000] }
}
1 {
label ACDf
policy none
input.bindings.1 “Input”
output.bindings.1 “Output”
input { controls [2 1 0 3000] }
}
2 {
label ACDf
policy none
input.bindings.2 “Input”
output.bindings.2 “Output”
input { controls [1 1 0 3000] }
}
3 {
label ACDf
policy none
input.bindings.3 “Input”
output.bindings.3 “Output”
input { controls [2 1 0 3000] }
}
}
}
pcm.speaker {
type plug
slave.pcm “surround41:D20”
}
Another version with older plugins:
pcm.!default {
type route
ttable.0.0 1
ttable.1.2 1
ttable.1.3 1
ttable.0.1 1
type plug
slave.pcm crossover
}
ctl.!default {
type hw
card D20
}
pcm.crossover {
type ladspa
slave.pcm speaker
path “/usr/lib/ladspa”
channels 4
plugins
{
0{
label RTlr4lowpass
policy none
input.bindings.0 “Input”
output.bindings.0 “Output”
input { controls [2000] }
}
1 {
label RTlr4hipass
policy none
input.bindings.1 “Input”
output.bindings.1 “Output”
input { controls [2000] }
}
2 {
label RTlr4lowpass
policy none
input.bindings.2 “Input”
output.bindings.2 “Output”
input { controls [2000] }
}
3 {
label RTlr4hipass
policy none
input.bindings.3 “Input”
output.bindings.3 “Output”
input { controls [2000] }
}
}
}
pcm.speaker {
type plug
slave.pcm “surround41:D20
}
It works fine with squeelezite (crossover frequencies and filters to be fine-tuned).
Next step is to integrate it with Shairport-sync (airport emulation). For that, refer to this exchange: https://github.com/mikebrady/shairport-sync/issues/212