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

Henrik,
Is it possibble, to build a shelving filter in camilladsp according attached REW screenshot (the falling part starting at 1kHz)?
To make a filter like that you can use a number of shelving filters spaced an octave apart in frequency with a Q of 0.7 and the gain set to the slope you want e.g. -1db. So if you start at 1.5K and go up from there it should look similar.
 
Dear all,

I planning setting up a 8 channel DSP by using a M-Audio Delta 1010lt sound card and an Intel Atom Mainboard. Before buying the sound card I tried to get CamillaDSP running with the integrated onboard sound of the mainboard (an Intel HD Audio). However, I am not able to get any sound out of the system despite the fact that CamillaDSP starts with no errors. Therefore, I assume an error in my config file or setup error.

My config file:

Code:
---
devices:
  samplerate: 44100
  chunksize: 1024
  silence_threshold: -60
  silence_timeout: 3.0
  capture:
    type: Alsa
    channels: 2
    device: "hw:Loopback,0,0"
    format: S32LE
  playback:
    type: Alsa
    channels: 2
    device: "hw:Intel,1,0"
    format: S32LE

filters:
  volumemaster:
    type: Volume
    parameters:
      ramp_time: 200
  FIR1:
    type: Conv
    parameters:
      type: Raw
      filename: filter.txt
      format: TEXT
  FIR2:
    type: Conv
    parameters:
      type: Raw
      filename: filter.txt
      format: TEXT

mixers:
  to2:
    channels:
      in: 2
      out: 2
    mapping:
      - dest: 0
        sources:
          - channel: 0
            gain: 0
            inverted: false
      - dest: 1
        sources:
          - channel: 1
            gain: 0
            inverted: false


pipeline:
  - type: Mixer
    name: to2
  - type: Filter
    channel: 0
    names:
      - volumemaster 
  - type: Filter
    channel: 1
    names:
      - volumemaster 
  - type: Filter
    channel: 0
    names:
      - FIR1 
  - type: Filter
    channel: 1
    names:
      - FIR2



My aplay devices:
Code:
sudo aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: Loopback [Loopback], Gerät 0: Loopback PCM [Loopback PCM]
  Sub-Geräte: 8/8
  Sub-Gerät #0: subdevice #0
  Sub-Gerät #1: subdevice #1
  Sub-Gerät #2: subdevice #2
  Sub-Gerät #3: subdevice #3
  Sub-Gerät #4: subdevice #4
  Sub-Gerät #5: subdevice #5
  Sub-Gerät #6: subdevice #6
  Sub-Gerät #7: subdevice #7
Karte 0: Loopback [Loopback], Gerät 1: Loopback PCM [Loopback PCM]
  Sub-Geräte: 8/8
  Sub-Gerät #0: subdevice #0
  Sub-Gerät #1: subdevice #1
  Sub-Gerät #2: subdevice #2
  Sub-Gerät #3: subdevice #3
  Sub-Gerät #4: subdevice #4
  Sub-Gerät #5: subdevice #5
  Sub-Gerät #6: subdevice #6
  Sub-Gerät #7: subdevice #7
Karte 1: Intel [HDA Intel], Gerät 0: 92HD73C1X5 Analog [92HD73C1X5 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 1: Intel [HDA Intel], Gerät 1: 92HD73C1X5 Digital [92HD73C1X5 Digital]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0


My arecord devices:

Code:
sudo arecord -l
**** Liste der Hardware-Geräte (CAPTURE) ****
Karte 0: Loopback [Loopback], Gerät 0: Loopback PCM [Loopback PCM]
  Sub-Geräte: 7/8
  Sub-Gerät #0: subdevice #0
  Sub-Gerät #1: subdevice #1
  Sub-Gerät #2: subdevice #2
  Sub-Gerät #3: subdevice #3
  Sub-Gerät #4: subdevice #4
  Sub-Gerät #5: subdevice #5
  Sub-Gerät #6: subdevice #6
  Sub-Gerät #7: subdevice #7
Karte 0: Loopback [Loopback], Gerät 1: Loopback PCM [Loopback PCM]
  Sub-Geräte: 8/8
  Sub-Gerät #0: subdevice #0
  Sub-Gerät #1: subdevice #1
  Sub-Gerät #2: subdevice #2
  Sub-Gerät #3: subdevice #3
  Sub-Gerät #4: subdevice #4
  Sub-Gerät #5: subdevice #5
  Sub-Gerät #6: subdevice #6
  Sub-Gerät #7: subdevice #7
Karte 1: Intel [HDA Intel], Gerät 0: 92HD73C1X5 Analog [92HD73C1X5 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
 
As far as I understand it the definition for the playback device "hw:Intel,1,0" refers to Card No. 1 and Device No. 0, therefore the digital port of the Intel HDA:

"Karte 1: Intel [HDA Intel], Gerät 0: 92HD73C1X5 Analog [92HD73C1X5 Analog]"

Is my assumption right? Is the first digit of "1,0" referring to the "card" and the second digit to the "device"?
 
Subdevice corresponds to a substream. Typically a device has only one subdevice - it supports only only one substream and does no support hardware mixing. Devices with HW mixing (and snd-aloop loopbacks) allow multiple substreams and define several subdevices.

Normally you do not need to specify the subdevice and subdevice ID 0 is used by default.
 
Follow-up on my RasPi4B + USBStreamer stereo EQ setup:

The USBStreamer seems to be... less than ideal for this. 192kHz and 176.4kHz don't really work properly with Linux ALSA configurations. Working on an ideal setup for stereo DSP, I have a question up over on the I2S sound thread on the Raspberry Pi forums. I'd like to eliminate the USBStreamer if possible and have a fully self-contained DSP system with just a RasPi4B and hat. It seems like the guys over at Cirrus were halfway on the path with the Cirrus audio card for the RPi1 versions, but didn't bother continuing development.

If I can get this project to the point where it is solid, I'll create a github project with a known-working setup for anyone that wants an all-digital, sample-rate independent/preserving DSP chain. 384kHz is do not care, the concern is making the system basically transparent/plug-and-play for 99.99% of all current and common formats like HD audio streaming = no surprises unless you know what you've gotten yourself into. Right now, it's not 99.99%, and that bugs me. :rolleyes:

To be fair, 44.1, 48, and 96 work fine.
 
Last edited:
Hello!!

I've been trying to do some active crossover with a Pi and Camilladsp. I'm using a DIYinHK usb DAC.

It has been a fresh installation of both the Pi and the CamillaDSP. I confronted this when I try to start the system:

Code:
pi@raspberrypi:~/Documents $ camilladsp xover.yml
Jun 26 17:23:24.428 INFO Capture device supports rate adjust, module: camillalib::alsadevice
Jun 26 17:23:24.488 INFO Starting playback from Prepared state, module: camillalib::alsadevice
thread 'AlsaPlayback' panicked at 'called `Result::unwrap()` on an `Err` value: Error("snd_pcm_state", UnsupportedOperation)', /home/pi/.cargo/registry/src/github.com-1285ae84e5963aae/alsa-0.5.0/src/pcm.rs:159:75
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: SendError { .. }', src/processing.rs:27:37
thread 'AlsaCapture' panicked at 'called `Result::unwrap()` on an `Err` value: SendError { .. }', src/alsadevice.rs:534:38

May I have some advice?
 
@ttf97: I have looked a bit and the error you get comes from ALSA. When reading the card state it returns something invalid, instead of one of the allowed states.
Can you give the details of your system? I need distribution, kernel version, what DIYinHK interface it is, and which Pi model.
We may end up sending a bug report to the ALSA team.