My digital room correction set-up
This page is not finished yet.
This describes my set-up. I can switch between stereo music from my TV and Spotify. Digital room correction and bass management are done with CamillaDSP on a Raspberry Pi 5. I use a 2.2 speaker system (2 main speakers, 2 subwoofers).
Schematic hardware overview
S2 Digi]) remote([remote]) pi([Pi 5]) pi_dac([HiFIBerry
DAC8x]):::analog pi_display([small
display]) amp([amplifier]):::analog mainsL([fa:fa-volume-high L]):::analog mainsR([fa:fa-volume-high R]):::analog %% sub1([fa:fa-volume-high subwoofer]):::analog %% sub2([fa:fa-volume-high subwoofer]):::analog sub1_adc([ADC]) sub1_dsp([DSP]) sub1_dac([DAC]):::analog sub1_sp([fa:fa-volume-high]):::analog sub2_adc([ADC]) sub2_dsp([DSP]) sub2_dac([DAC]):::analog sub2_sp([fa:fa-volume-high]):::analog %% arrows TV -- TOSLINK --> hifime hifime -- USB --> pi remote -- IR --> pi amp --> mainsL amp --> mainsR pi_dac --> amp pi_dac --> sub1_adc pi_dac --> sub2_adc subgraph subgraph_pi ["Raspberry Pi 5"] pi --> pi_dac pi --> pi_display end subgraph subgraph_sub1 ["subwoofer"] sub1_adc --> sub1_dsp --> sub1_dac --> sub1_sp end subgraph subgraph_sub2 ["subwoofer"] sub2_adc --> sub2_dsp --> sub2_dac --> sub2_sp end
I'm getting stereo audio from the TV, not multichannel. The blue components show where the audio is digital. Red indicates analog audio. You could connect any speakers you like to this. I have connected it to a stereo amplifier to drive my (passive) bookshelf speakers + two active subwoofers.
Not all subwoofers contain a DSP, but it is common. If one is present, there will an extra conversion step to make the signal digital again (as shown above). SVS is an example of a brand that always includes a DSP chip.
Volume control
The Raspberry Pi with CamillaDSP is my volume control, which I can adjust with the IR remote. I don't touch the volume on the amplifier and subwoofers. They are permanently set loud enough for the loudest I ever want to listen. That is way below their max volume, which also keeps this method safe enough.
Hardware components
Brand | Component | € | Notes |
---|---|---|---|
Raspberry | Pi 5 (4GB RAM) | 66 | Has 8 audio channels in and 8 channels out via I2S |
Raspberry | Power adapter | 13 | |
Transcend | SD card | 10 | 32 GB, of which I'm using 5 GB |
EDATEC | ED-PI5CASE-OS + ED-PI5CASE-HA-S | 9+22 | Passive heatsink |
HiFiBerry | DAC8x | 71+6 | Pi HAT with DACs for 8 output channels |
HifiMe | S2 Digi | 55+9 | For TOSLINK to USB |
FLIRC | USB dongle | 70+20 | IR remote receiver |
FLIRC | Skip 1s | Programmable remote. Any other IR remote would also work. | |
Unknown | OLED display + jumper wires | 33+7 | See small display |
Playwood | Wooden box | 10 | As case. I cut out holes with a knife and drill. |
Total | 401 |
The indicated cost was for getting it delivered to the Netherlands in early 2025. Shipping and import costs are mentioned separately with a plus.
It is possible to stack the compatible HiFiBerry ADC8x on top of the DAC8x HAT to add 8 analog audio input channels.
Software components
- Raspberry Pi OS Lite
- CamillaDSP: 1st instance to do parametric EQ + bass management
- CamillaDSP: 2nd instance to do spectrum analysis
- Custom script to handle FLIRC remote
- Custom script to tie it all together
ALSA connections
dsnoop:CARD=Audio]) alsa_loop_in([ALSA loopback
hw:Loopback,0,0]) alsa_loop_out([ALSA loopback
dsnoop:Loopback,1,0]) dac_out([DAC8x
hw:CARD=sndrpihifiberry]) spectrum_data([file /dev/null]) %%spectrum_data2([scripts]) camilla([CamillaDSP
for PEQ/more]) camilla2([CamillaDSP
for spectrum]) %% arrows tv_in --> camilla raspotify --> alsa_loop_in --> alsa_loop_out --> camilla camilla --> dac_out tv_in --> camilla2 alsa_loop_out --> camilla2 camilla2 --> spectrum_data %%camilla2 --> spectrum_data2
See also: page about ALSA
Used to create filters
- Windows laptop
- Measurement microphone: miniDSP UMIK-1
- Long HDMI and USB cables
- Software: REW
Practical considerations
- I keep the Pi powered on all the time. Booting from an SD card takes about a minute (which could be sped up by using an SSD) and the power consumption is quite low. It only costs a few tens of euro/year.
- My stereo amplifier has a trigger output. I've connected that to the trigger input of both subwoofers. When I power the amplifier on/off that conveniently powers on/off all speakers.
- I use parametric EQ in CamillaDSP, because the delay is so low that it suitable for watching TV/movies and occasionally playing video games. I don't notice any problems with lip sync.
- CamillaDSP can also do convolution (FIR). I'm not using that, but it would be usable when listening to Spotify. The longer delay doesn't matter then.
- The aluminium passive heatsink listed above kept the Pi 5 about 55°C (Pi documentation: showing temperature). During summer (room temperature 28°C) and in an enclosure the Pi was 65°C.
- A steel case around the Pi would at least degrade the signal for the on-board WiFi and Bluetooth. Anecdotally both will still work in practice. You could always connect USB dongles for WiFi and Bluetooth that stick out of the case and use that instead of the onboard support.
- My stereo amplifier also has a pretty good headphone amplifier. I can listen on headphones by connecting them to the amplifier and loading a configuration for CamillaDSP (via the remote) that routes everything to the main speakers and applies no filtering (because those are only applicable when using the speakers).
Note that I'm using ALSA directly with no sound server like PulseAudio or PipeWire on top. I'm using a Raspberry Pi OS Lite installation as a basis, which has that as the default set-up. I'm also not using any music player like Volumio, Moode audio or piCorePlayer, which all have an architecture of their own which changes the situation.
References / thanks
These are the guides that got me started:
- RPi + CamillaDSP Tutorial: Forum thread about that guide