A digital crossover for an active-speaker-system:

With LADSPA plugins applied to virtual sinks you can have a configurable active setup. You can separate the sound for each of the speaker and apply equalisation and delay too.

Summary

This is a rather static setup so you do have to reload the virtual sinks if you change the LADSPA-filter parameters.

These are IIR filters, not FIR.

I would use a passive crossover (bipolar capacitors) for the tweeter so when PA would shut down for some reason and your tweeter got the full audio spectrum, it would not get fried.

I have an AMDX2 3800+ CPU and this setup is quite stable (since PA 0.9.16 CPU load has been about 2%). A kernel with high resolution timers (1000Hz) and realtime scheduling mode of PA is needed to keep the sinks in sync (under high system load) though.

Software

I tried two soundcards, a multichannel onboard soundchip (Realtek RC888) and an X-Fi Extreme Music. You need a channel for each speaker-driver so for four-way stereo speakers you need a 7.1 card.

The current pulse plugin for Mplayer and SDL seem broken, but the ESD-types are good alternatives. The Xine backend for Phonon in KDE4 doesn't support PA well either.

1. default.pa for a Realtek integrated audio with one surround device in ALSA:

I left out automatic hardware detection and loaded a custom four-channel alsa-module instead (card number 0 and its device surround40 - if you have two cards and 7.1 it may look like device=surround71:1 instead). The aux channels let PA override whatever the card "naturally" would want to do with them. Then I create LADPSA sinks for the crossover. Note that I have a mono setup so I use extra remap-sinks too (You have to set the combined sink to about 73% volume so the mono remapping doesn't generate clipping. Also descriptions for the sinks are changed because they get quite long by default.

Here I left automatic hardware detection enabled (I use hw:0,0 for standard headphone output). Additionally loaded custom modules for hw:0,1 and hw:0,2. As above I create LADPSA sinks for the filters and combine them in the end.

daemon.conf:

I change the default resampler in ~/.pulse/daemon.conf as well. You may need to omit this if your CPU is too slow. My X-Fi sound-card wants 48KHz (I hear clicks on initialization when using 44.1kHz), so I put in a line for that too.