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

why does the WINDOWS version have less precision than the Linux versions?
There is no difference!
The one issue on windows is that there is no loopback with fine-tunable sample rate, like the Alsa loopback on Linux, or Blackhole on macOS. This means that async resampling is required to sync the clock of the loopback and playback device.

There is VAC: https://vac.muzychenko.net/en/
It supposedly supports adjustment, but I haven't managed to get that to work. Not sure if I'm doing something wrong, or if it's just broken.
 
  • Like
Reactions: rickmcinnis
So if I just edit the config for each filename to the full path -
filename: /home/camilla/camilladsp/coeffs/XO-Bass-250202-LR96-HP330Hz-4096T.dbl

it should work.

I will try it tomorrow and report.
OK, changing the filename in the filter to the full path allowed the camilladsp-controller to work with REW on a PC outputting to the RPi in gadget mode.

However, it is not the smoothest process, load a config into the GUI, apply it, then fire camilladsp-controller up, run the REW sweep, rinse and repeat.
 
The wayward one is still trying to get camilladsp to work in WINDOWS.

Luckily the dante card is easy to install with WINDOWS. Will be another thing figuring out how to get camilladsp to work with it.

I have my camilladsp folder in C:\

When I start camillagui_backend (as administrator) I get the black terminal screen which after about 10 seconds a message will appear but goes away, I have no idea how to stop it. With the list devices command if you click on the screen it will stop. I see something saying error. But that is all I can catch.

I wondering how to you do something like this taken from mdsimons guide:

"Open CamillaDSP service in nano and update username to reflect your username.

sudo nano /lib/systemd/system/camilladsp.service"

Where do you add your user name in WINDOWS? No folder saying camilladsp.service. Do I make one?

Same with statefile.yml - do I make one of these and what would I put into it.

I promise I have looked everywhere and read everything numerous times but I must have missed something.

Guidance will be greatly appreciated.

THANKS

PS Is there any way to know camilladsp is running - other than being able to access the gui which I cannot. Would it show up in services?
 
"Open CamillaDSP service in nano and update username to reflect your username.

sudo nano /lib/systemd/system/camilladsp.service"
This applies to Linux only, on Windows you will need another way of running CamillaDSP. This can be just as simple as manually starting it every time you need it running. To have the equivalent setup as in mdsimon's guide you could try something like this: https://github.com/winsw/winsw.

However, for now you need to focus on just getting the basics running.

Have you been able to start camilladsp.exe from a Windows Command Prompt?
1741578017312.png


This is the equivalent for camillagui_backend:
1741577963116.png
 

Attachments

  • 1741577554613.png
    1741577554613.png
    56.9 KB · Views: 20
Last edited:
THANKS for your time and help, fb.

Yes, I knew those instructions from mdsimon were LINUX only. But I thought they signaled where I was going wrong.

I have two camilladsp installs - one for Ubuntu and the other in Win11. Trying to see if I can get one to work.

I can get UBUNTU to run camilladsp but not my sound card though the folks at DIGIGRAM sent me script they say will install the driver and that should settle it but until I see it working ... I would prefer the UBUNTU version to be the one I end up using.

I can get the sound card recognized in Win11 but cannot get the gui to work - I was guessing. What you show up there is likely what I am seeing when I start camilla_backend. I assumed it said there was an error. I cannot remember but I do not think putting "camiladsp" in the command line did anything but I probably confused myself trying to get this to work yesterday going back and forth between the two OSs. I was hoping one would show me where i was going wrong with the other.

I am pretty sure if I had seen those messages I would have still thought something was wrong!

Wish camilladsp and camillagui would show up as Services. It would be reassuring!

I find it very easy to make something Mr. Enquist has worked so hard to be simple complicated.

I greatly appreciate your help.
 
When I start camillagui_backend (as administrator)
You shouldn't need to run as admin. If you create a "camilladsp" directory in your home directory, and inside that create directories called "configs" and "coeffs", then the backend should start ok. You don't need to create a state file, CamillaDSP will create it if it doesn't exist (when you use the -s argument).

Services are nice for starting this ngs automatically after booting, but it's better to start without and then set up services once everything works. I have only added example service definitions for Linux so far. Windows and macOS are still on the to-do list.

Try starting the backend from a terminal instead of double-clicking it. That makes it much easier to see error messages. Once that works, then you can double-click instead.

camilladsp.exe needs to be started in a terminal, double-clicking will only open a terminal and close it again before you have time to read anything.
 
  • Thank You
Reactions: rickmcinnis
A mixer must always accept all the channels in the pipeline, so the middle mixer must be 6-in, 8-out. Just let the input channels 1-4 map 1:1 to output channels 1-4.
Could you consider support for where one mixer could take the input from more than one mixer as long as the sum of channels coming from the n+1 inputs is equal to the number of in-channels?

This would facilitate to build a structure that internally fan out in a local branch that could entail some common local filters that only effected the rest of the local branch. If not, the common filters would need to be repeated for every "local branch"...

I assume the import/translation functions is not trivial and maybe the train has left for these kind suggestion... all is of cource still doable...

local branch.jpeg


//
 
In v3 pipeline channel assignment via the triangle tab and the following array of possible channels names - the tooltip hoower info is nor "channels" - can it be the actual assigned channels name? As this is such a small item, longer names dont show clearly.

//
 
Would it be possible to draw a system estimate of the gain structure and headroom for an input channel. Perhaps also identify the frequency where the least input level (i.e. critical level and frequency combo) clips the output? Would be very handy when assessing once creation. 🙂

//
 
Could you consider support for where one mixer could take the input from more than one mixer as long as the sum of channels coming from the n+1 inputs is equal to the number of in-channels?
This would be very hard to configure, and complicate the pipeline. But you can do something that is pretty much equivalent, if the middle mixer has 6 inputs and 8 outputs. The upper four channels will then just be passing though the middle mixer instead of going around it.

In v3 pipeline channel assignment via the triangle tab and the following array of possible channels names - the tooltip hoower info is nor "channels" - can it be the actual assigned channels name?
Sorry, don't get where you mean. Screenshot?
Is this the only known compatability issue between cdsp and dac8x?
I'm not away of any other issues.
Would it be possible to draw a system estimate of the gain structure and headroom for an input channel
I would like to add something like this. The issue is just that it's quite hard to do right. Not too bad for simple pipelines with no more than one mixer, but with two or more mixers, then there can be multiple paths between a pair of input and output channels, and that's when things get really tricky. Maybe some day 🙂
 
  • Like
Reactions: fb and TNT
Re: peq Delay and sub ms. If I enter 1.234 (ms), what will I get? Will I get the 4 us?

When do I need to use this "sub-sample"... don't get that 🙂

edit: att 44,1 I should as 1 sample every 2,28us.. right!?

//
 
Last edited:
At 44.1 kHz you have 22.7 us per sample. That's the delay resolution you get without subsample. For let's say a crossover at 2 kHz, that corresponds to a phase adjustment in steps 16 degrees, so you can adjust to be within +-8 degrees of the ideal.

Subsample makes sense if this isn't good enough. The error scales with frequency so a crossover at 4kHz would get +-16 degrees, and 8 kHz ends up with +-32 degrees.
 
Thanks! So how do I interpret and use subsample. If I'd wanted a 5us change - how to express that in the PEQ config. Do I tick the box and set then what as value?

So without having the box ticked - entering 1,222 or 1.232 would not make any difference - if so, could you truncate the shown value so it represents what is actually processed - that would be a good help.

//
 
Thanks! So how do I interpret and use subsample. If I'd wanted a 5us change - how to express that in the PEQ config. Do I tick the box and set then what as value?
If you really need a 5us change, then I guess you have made some measurement showing this. So I would recommend ticking, the subsample box, redoing the measurement, and the starting to make the small adjustments.

So without having the box ticked - entering 1,222 or 1.232 would not make any difference - if so, could you truncate the shown value so it represents what is actually processed - that would be a good help.
I'll think about how it could be done. Just truncating won't work when the scale is in time or distance, the steps are not nice numbers. For example a 5 sample delay at 44.1 kHz is 113.38 us, 6 samples is 136.05 us. It would require a separate field telling what the actual delay will be.

Is it possible, if the input is without DC, that a certain combination of filters etc could generate DC on the output?
For any reasonable filter, you won't have any issues. But if you for example specify the biquad coefficients manually, then you can end up with filters with very large gain at low frequencies, or even that are borderline stable. Unstable filters aren't allowed, but things can get a bit ugly if you have very little margin. But I can't think of any useful filter that would get anywhere near this.
 
Thanks Henrik! But I still don't get how to use subsample. And I re-read the GitHub...Is it like if you tick Subsample you start to honor more decimals in the input? But as you do this you can't just "wait" any longer you need to start manipulation the phase to get to the precision? If so, Group Delay is not 0 any longer - this would show up in the filter graph I suppose. If you would display the actual delay and box ticked - at what frequency? Tricky...

//
 
Let's say you ask for a 220us delay at 44.1 kHz, without subsample. That is 9.70 samples. This gets rounded to the nearest integer, to 10 samples, and the resulting delay is 226.76 us.
If you tick subsample, then instead of rounding to the nearest, it rounds down to 9 samples. And it adds an IIR all pass filter to approximate a delay of 0.70 samples. The approximation works well up to say 5 kHz, but starts to deviate above that. The filter graph shows it properly.

The next release will have an improved subsample filter that does a better job at higher frequencies.
 
  • Like
Reactions: TerryForsythe