CamillaDSP - Cross-platform IIR and FIR engine for crossovers, room correction etc

The AES67/Ravenna driver would be another option, keeping GST out of it.

I have a (maybe now misguided) fondness for AVB/Milan and was excited to see PW AVB support emerging, but seems to have stalled.

I have no interest in Dante, but appreciate its success.

My previous exploration was with BBB + CTAG's, as the BBB's ethernet supported PTP. The Pi CM4 does as well (albeit with more volatility). I think the Pi5 does (?), so maybe I should buy set of PI5's and DAC8x rather than wait for the CM5.
 
In the Pipeline tab there is a heading "Capture: 2 channels in" but there is no e.g. Playback: 4 channels out

2chIn.jpg


For the sake of symmetry and completeness 😉 I suppose it should be placed just above the mixer that feeds the playback device.

Also, an arrow pointing downwards would help to understand how the pipeline page shall be interpreted i.e. indicating the process direction.

//
 
Camilla newby

Hello gents,....i'm new to camilla and new to DSP in general. I've read a couple on things including some camilla documentation. I'm running 2 raspberry pi4 8gb music servers. One I've more or less build myself using dietpi, upmpdcli with Linn Kazoo as controlpoint and one with moOde installed. My source is ony Qobuz for both setups.
The other hardware is a USB DAC (smsl sanskrit 10 eidtions MK-III) which drives the wolverine amp (from this forum) which in turn drives my Kef Reference Model III's.
Been busy optimising the sound chain as much as I can and know. I was wandering where to start with Camilla. In moOde its a n integrated featue so I switched "on" de Camilla DSP. When I played a song just rubbish came out of the speaker🙂. I want to get aquainted a bit and see / experience what Camilla can do.

Looking forward in getting some direction....

thx in advance

reg

willem
 
Hi Willem,
here is my diagram, i use bubble-upnp as controlpoint ---> [ upmpdcli -out-->alsa loopback -in-> CamillaDSP FIR-Filter --out-> ] --USB/DAC
cdsp capture is alsa-loopback, cdsp playback is your DAC
that's it. What functions will CDSP make for you (crossover, room correction)?

reg Roland
 
What functions will CDSP make for you (crossover, room correction)?
I was indeed thinking about exactly that. I reckom I'll be needing something like rew and an umik mic to generate the room correction data....or does that work differently?
As for the x-over. How does that work actually? In the end it's still 2 channels receving all the frequencies in the signal......Well..I basically do not understand how it works...thats clear🙂

w.
 
@willem
You need a software for room correction and xover generation. I use ((acourate convolver)) from audiovero 495€ (worth every cent), a calibrated mic, an mic stand and a audio interface (depends on your outputchannels), focusrite 4i4 (four channels) 249@. Some cable, rpi5, hifiberrydac8x.

Here is one of my Camilladsp. I still use older Version 1.03 (but it is only a sample for a 2 to 4 channel with FIR Filter as xover incl correction.
Code:
# stereo to 4 ch
devices:
  samplerate: 44100
  chunksize: 6144
#  queuelimit: 128 (*)
#  silence_threshold: -100
#  silence_timeout: 3.0
#  target_level: 2048
#  adjust_period: 2

  capture:
    type: Alsa
    channels: 2
    device: "hw:Loopback,0"
    format: S24LE
#    retry_on_error: true

  playback:
    type: Alsa
    channels: 8
    device: "hw:sndrpihifiberry,0"
    format: S32LE

mixers:
  2to4:
    channels:
      in: 2
      out: 8
    mapping:
      - dest: 0
        sources:
          - channel: 0
            gain: -5
            inverted: false
      - dest: 1
        sources:
          - channel: 1
            gain: -5
            inverted: false
      - dest: 2
        sources:
          - channel: 0
            gain: -5
            inverted: false
      - dest: 3
        sources:
          - channel: 1
            gain: -5
            inverted: false

filters:
  vol:
   type: Loudness
   parameters:
      ramp_time: 200.0
      reference_level: -30.0
      high_boost: 0.0
      low_boost: 15.0

  left_low:
    type: Conv
    parameters:
      type: File
      filename: /home/pi5/camilladsp/coeffs/pi5buero/Cor1L44.dbl
      format: FLOAT64LE

  left_high:
    type: Conv
    parameters:
      type: File
      filename: /home/pi5/camilladsp/coeffs/pi5buero/Cor2L44.dbl
      format: FLOAT64LE

  right_low:
    type: Conv
    parameters:
      type: File
      filename: /home/pi5/camilladsp/coeffs/pi5buero/Cor1R44.dbl
      format: FLOAT64LE

  right_high:
    type: Conv
    parameters:
      type: File
      filename: /home/pi5/camilladsp/coeffs/pi5buero/Cor2R44.dbl
      format: FLOAT64LE

  gainL:
    type: Gain
    parameters:
      gain: +9
      inverted: false

  gainR:
    type: Gain
    parameters:
      gain: +9
      inverted: false


pipeline:
  - type: Mixer
    name: 2to4

  - type: Filter
    channel: 0
    names:
      - left_low
      - gainL
      - vol
 
  - type: Filter
    channel: 1
    names:
      - right_low
      - gainR
      - vol
 
  - type: Filter
    channel: 2
    names:
      - left_high
      - gainL
      - vol
 
  - type: Filter
    channel: 3
    names:
      - right_high
      - gainR
      - vol
 
All independent/non-synchronous clocks always run at a slightly different pace. Rate adjust aligns capture and playback clocks, even if running at the same nominal samplerate. If both clocks are fixed, asynchronous resampler is required (even if running at 1:1 nominal ratio). If one of the clocks is adjustable (which is the case of the loopback alsa device), CDSP can fine-tune its rate/pitch and no async resampler is required. But this fine-tuning must be enabled in the configuration - the enable_rate_adjust parameter.

Please read the rate-adjust description at https://github.com/HEnquist/camilladsp/?tab=readme-ov-file.
 
Hi!
I want to make moode audio work with a raspberry pi 5 and dac8x.
as i am a total noob on linux this is quite a challange Big Grin

when i run aplay -l
i get this result.

card 0: sndrpihifiberry [snd_rpi_hifiberry_dac8x], device 0: HifiBerry DAC8x HiFi pcm5102a-hifi-0 [HifiBerry DAC8x HiFi pcm5102a-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0


Then i have tried to copy the example crossover to make a 2-way speaker (this is exactly what i cant to make, i just need to configure all the values later)

---
title: Example crossover
description: An example of a simple 2-way crossover
devices:
samplerate: 44100
chunksize: 1024
capture:
type: File
channels: 2
filename: /dev/stdin
format: S32LE
playback:
type: Alsa
channels: 2
device: hw:0,0
format: S32LE
volume_ramp_time: 150
mixers:
to4chan:
description: Expand 2 channels to 4
channels:
in: 2
out: 4
mapping:
- dest: 0
sources:
- channel: 0
gain: 0
inverted: false
- dest: 1
sources:
- channel: 1
gain: 0
inverted: false
- dest: 2
sources:
- channel: 0
gain: -5
inverted: false
- dest: 3
sources:
- channel: 1
gain: -5
inverted: false


filters:
highpass2k:
type: Biquad
description: 2nd order highpass crossover
parameters:
type: Highpass
freq: 2000
q: 0.707
lowpass2k:
type: Biquad
description: 2nd order lowpass crossover
parameters:
type: Lowpass
freq: 2000
q: 0.707
bafflestep:
type: Biquad
description: Baffle step compensation
parameters:
type: Highshelf
freq: 500
slope: 6
gain: -4
tweeterdelay:
type: Delay
description: Time alignment for tweeters
parameters:
delay: 0.5
unit: ms
pipeline:
- type: Filter
description: Pre-mixer filters left
channel: 0
names:
- bafflestep
- type: Filter
description: Pre-mixer filters right
channel: 1
names:
- bafflestep
- type: Mixer
name: to4chan
- type: Filter
description: Highpass for left tweeter
channel: 2
names:
- highpass2k
- tweeterdelay
- type: Filter
description: Highpass for right tweeter
channel: 3
names:
- highpass2k
- tweeterdelay
- type: Filter
description: Lowpass for left woofer
channel: 0
names:
- lowpass2k
- type: Filter
description: Lowpass for right woofer
channel: 1
names:
- lowpass2k


For some reason the playback channel section alters the number of channels from four to two. And i get a error message. I have got it to work on 2 channels, but as soon as i enter 4 channel playback, then it breaks. What am i doing wrong?
Thanks/Andreas from Sweden
 
@ Henrik
Just a question to quench my thirst-for-interest: I saw that you are working on ringbuffers in the latest development branches for CamillaDSP. What will be the benefit of this modification? Was there an inherent limitation in the so-far and actual implementation of buffers? Or are ringbuffers simply a more elegant and/or lean approach, but without other benefit?
 
Was there an inherent limitation in the so-far and actual implementation of buffers? Or are ringbuffers simply a more elegant and/or lean approach, but without other benefit?
This is for the buffers between the inner and outer threads in the wasapi and coreaudio backends. Those are already similar to ringbuffers, but implemented in way that is more complicated than needed.
The changes avoid some allocations so should give slight stability improvement, and simplifies the code a bit.
 
  • Like
Reactions: siraaris
I'm not really happy with the UI for defining mixers. It's very difficult to see what goes where. It's quite common to use a matrix layout for this kind of thing, and I made a prototype of how that could look in CamillaGUI:

Screenshot 2024-11-23 at 11.10.13.png
It needs some colours to make active cells more visible etc. What do you think, could be better than the existing UI?