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

Comparing 96k/float32le/soxr against 44k1/s16le/speex.

Is there a benefit for paxor processing at the higher rate, eg digital headroom, noise etc.

Processing power, does it increase more with resampling, or with processing at the higher rate.

If I know these things I can decide whether 44/48/96/192 is better.


Processing demands will increase with both resampling and with using higher sampling rates. The former can be quite processor-intensive, while the latter obviously increases the density of bits/time that must be operated upon by any DSP.


New information cannot be created by upsampling. In fact, one is likely to lose information and add noise by this process. However, a good resampler (eg: soxr) will minimize information loss and noise addition such that they're inaudible.
 
Higher sampling rates provide slight benefits for filters operating near the nyqist frequency, i.e. half the sampling frequency. Resampling usually only has to happen once at the beginning of the pulseaudio chain.

What I would always prefer over anything else is the sample format float32le. It's the internal format that ladspa uses, so conversions are avoided and I also think that 16bits are to little resolution for multiple filters in a chain.

My recommendations:
- always use float32le with PaXoverRack
- set "avoid_resampling” to false
- choose sampling rate for performance, if possible I would choose 96k or 192k, if CPU time is limited, chose 48k or 44k.
 
Every filter has gain adjustment. Just use for example the delay set to 0 or a parametric eq with all band gains set to 0 to adjust gain. both of them use no extra cpu power if no filters are actually engaged, just the cpu power to adjust gain, which is neglible.

PS: (I had to post this) if you need to shave off 20dB of gain then your gain structure is not quite right ;)

My system is about 102db at 1w sensitivity in a 10' square room. The gain structure will never be quite right. :D

The amp on my supertweeter has very low gain so I cut about 20db off the input but then run up that tweeters amp another 12 to 15fb so it balances with the rest and I still have about 6db headroom until 0db max.

I was actually playing with using linkwitz transform block to knock off about 10db with an approximation of the b&k room curve. Some low and high shelf blocks would be really useful in the future. Or a way to just roll in your own biquad vals.
 
Last edited:
I have re-installed Raspbian on a faster microSD card (I had a very early Buster running, which had some bugs). I also overclocked the RPI 4. It's fun and effective. The OS is more stabile now, before overclocking the system was also more responsive. Probably the faster card. And overclocking to 2.175Ghz is a shocking improvement in speed. I have a large passive "heatsink case" and overclocking has not made it run noticeably hotter. It's a very useable little computer now, very silent, very small and fine for office productivity.

I have installed pulseaudio crossover rack just now. Before it would not install the two python modules by itself, now it did.

The Hifiberry Amp2 does not fit on the heatsink case, nor does the GPIO extension cable fit in the gap left over the GPIO pins. I will try to modify the cable/plug a bit, otherwise keep the Amp2 on a RPI 3. Maybe do the mediaplaying and DSP on the RPI 4, and have a pulseaudio network connection to the RPI 3 with Amp2.

The tragedy with the raspberry pi and hifiberry experiments in my house is that, while they are tiny, the required loudspeakers are always the problem. No room for floorstanding ones, my desk is too small for desktop loudspeakers, all bookshelves are behind doors.... So I have made open baffle loudspeakers this time, will screw them to the desk at the very edge. :D
 
I just ordered and received a RPI Zero WH and a Hifiberry Miniamp. After following the Hifiberry instructions for config.txt and asound.conf, aplay -l shows the Hifiberry is the soundcard. In raspbian audio preferences, no ALSA soundcard is found. PAXOR installs fine, making and saving a file with modules works fine, but the log shows an error for loading the EQ-module I used.

I moved the Miniamp and microSD card to a RPI 3, with the same results, except in this case the EQ module loads without error. I hooked up a loudspeaker and there is sound. Changing parameters in the EQ module worked as well.

I will look into this some more, see if there is some known limitation of the RPI zero in combination with pulseaudio or ladspa. It's late and I'm too tired to continue. It's a beautiful and small little combination (RPI zero and Miniamp).
 
I have not worked on the pi zero yet, but did connect the pi3 with miniamp to my big loudspeakers. I tried PAXOR on little desktop setups before, but this is the critical test.

The rpi 3 is powered by a simple USB power supply, loudspeakers are backloaded horns with Fane 15-300TC 15 inch fullrange drive units. 100+dB/watt efficiency, untfiltered response is -1dB at 20Hz, response past 20kHz is feasible with careful EQ. I controlled it through VNC connection, audioplayer is Audacious for now.

PAXOR works GREAT on the rpi3. On the fly modifications just work, you hear the sound change but there is no stutter or other indication. The interface is working well, it is easy to see what I am doing, to make small and great adjustments, etc.

Sound is surprising. No hum, no hiss, and overall very clean sound. A lot of fine detail and no sound character of the music player itself. The atmosphere, the dynamics, the reproduced sound changes character completely from recording to recording. I am amazed.

I believe the rated power of the Hifiberry Miniamp states 3 watt at 4 ohm, so maybe 1.5 watt into 8ohm? It gets crazy loud with these speakers.

In terms of simply DSP experience, I find PAXOR better than minidisp (my experience is with the 2x4 generation). The miniamp is a good little addition to a rpi to make a self-amplified music player.

Thank you!
 
Yeah, a fixed intersample delay is likely. The devices run in sync, but with fixed delay.

I wonder - can you change intersample delay in your filters? It may not be difficult to measure the current delay between devices by a stereo input, but fixing the delay requires resampling.
 
There's a petty crude implementation of a sub sample delay in there, yes. I would recommend to only use it at 96k or higher due to it's phase shift above 1/2 Nyquist though.

But regarding the delay between two USB soundcards this would require measuring and adjusting the delay each time you power on the USB devices though. Not very practical. Instead I suggest to use a single higher channel count USB soundcard wherever possible or to sync them by the sample clock (also known as word clock in the studio realm).
 
Tfive: you are right, it would be impractical. Plus a stereo input could cover only two cards, while this setup would often involve three stereo-output cards.

But an interesting problem as an exercise, posing a few obstacles to solve. I wonder if someone has tackled it before...