Jarkko's guides
You are here: Home » Raspberry Pi » My digital room correction set-up

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

%%{init: {'themeVariables': {'edgeLabelBackground':'white'}}}%% flowchart LR %% Custom styling classDef analog fill:#EACCB9 style subgraph_pi fill:#F3F6F6,stroke-width:1px,stroke:#C9C9C9 style subgraph_sub1 fill:#F3F6F6,stroke-width:1px,stroke:#C9C9C9 style subgraph_sub2 fill:#F3F6F6,stroke-width:1px,stroke:#C9C9C9 %% Blocks TV([fa:fa-tv TV]) hifime([Hifime
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
  • Raspotify
  • Custom script to handle FLIRC remote
  • Custom script to drive small display
  • Custom script to tie it all together

ALSA connections

%%{init: {'themeVariables': {'edgeLabelBackground':'white'}}}%% flowchart LR %% Custom styling classDef analog fill:#EACCB9 %% Blocks raspotify([Raspotify]) tv_in([TV sound
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:

  • https://github.com/mdsimon2/RPi-CamillaDSP
  • RPi + CamillaDSP Tutorial: Forum thread about that guide
  • Budget Standalone Toslink > DSP > Toslink with Camilladsp. Set up instructions for newbies.: Forum thread
Previous Next

ALL THE TOPICS ON THIS WEBSITE:

Linux

Raspberry Pi

Digital room correction

Web design

By Jarkko Huijts
Jarkko's guides

Table of Contents

Table of Contents

  • My digital room correction set-up
    • Schematic hardware overview
    • Volume control
    • Hardware components
    • Software components
    • ALSA connections
    • Used to create filters
    • Practical considerations
    • References / thanks

RASPBERRY PI HARDWARE

  • Intro
  • Pinning & interfaces
  • Audio components
  • FLIRC for IR remotes
  • Small displays
  • USB gadget
  • Linux groups

RASPBERRY PI SOFTWARE

  • SD card images
  • CamillaDSP
  • Raspotify

MY DRC SET-UP

  • Overview
  • Spectrum analyzer

AVAILABLE TOPICS

  • Linux
  • Raspberry Pi
  • Digital room correction
  • Web design