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

Is it possible to include the gui into the macos build? I'm not lazy and probably don't really know what I'm asking for but this would of course make life easier for us software half-illiterates... :)

//
Once all dependencies are there the gui part is quite easy. You just have to download and install the pycamilladsp and pycamilladsp-plot libraries, then download the backend and start it. I started making a script to automatize the installation on a Raspberry, I could do something for mac as well.
 
OK thanks - can you please give same advice on folder structure - where to place things and how to structure it in a good way?

//
The libraries pycamilladsp and pycamilladsp-plot you can put anywhere since the downloaded files aren't needed any more after installing them. You can delete them when you are done if you want.



You just need to keep two things: the camilladsp binary, and the folder with the backend. I would suggest to make a "camilladsp" dir in your home folder, inside that one make a "bin" dir where you place the binary, a "configs" dir for storing your configs and coefficents and a "gui" folder where you unpack the camilladsp.backend.zip.
 

TNT

Member
Joined 2003
Paid Member
Thanks!!

//

The libraries pycamilladsp and pycamilladsp-plot you can put anywhere since the downloaded files aren't needed any more after installing them. You can delete them when you are done if you want.



You just need to keep two things: the camilladsp binary, and the folder with the backend. I would suggest to make a "camilladsp" dir in your home folder, inside that one make a "bin" dir where you place the binary, a "configs" dir for storing your configs and coefficents and a "gui" folder where you unpack the camilladsp.backend.zip.
 
(base) MBPr-2:Camilla MBPr$ ls
camilladsp camilladsp-macos-amd64.tar.gz
(base) MBPr-2:Camilla MBPr$ camilladsp
-bash: camilladsp: command not found
(base) MBPr-2:Camilla MBPr$

?? (ignorant..!) :-D

//
The unix terminal has one quite annoying "feature".. The current directory is not considered when you type a command, like "camilladsp" in this case. It will only look in the folders in a defined list (usually kept in the environment variable PATH), like /usr/bin etc.
To make it run a binary or script that is in your current folder, you have to add "./" in front. Try: "./camilladsp -w -p 1234" or just "./camilladsp --help".
 

TNT

Member
Joined 2003
Paid Member
Thinking a bit about this as I was searching in the thread for how to list for Camilla available ports and streams...

One should resort to the very last step to do attenuation so to let all EQ/phase computation have the most available no-of-bits at hand to do it's magic on. Then introduce, as last action, inter-over avoiding defence (-3,1 dB I believe it is).

When it comes to attenuation, there could be other reason in a specific sustem to add none-destructive attenuation. This can be made by shifting out the LSB (sucking in a 0 in MSB), corresponding to -6 dB. This together with dither should be the best way to attenuate a PCM stream. So a feature request: Att_shift=1,2,3...15) to do -6, -12, -18 ... -90 dB attenuation with no bit effect than losing the 16th (24th) bit into devNull.

So a Att_shift:1 + dither on the 15th bit, positioned in the end of the processing pipe, should be SOTA attenuation!?

//

PS: terminal command to list streams? :)

I can't understand that you could have a life without :confused:....:D

I created an test.txt in REW (Generec EQ). The "filter" is BiQuad as can be seen in the attached file for LEFT channel...

My flow should be like this in the camilladsp pipeline...
1) PreEQ as BiQuad (flat target proberly)
2) FIR filter
3) Some -2dB gain to avoid clipping

My workflow should be as this for creating the final result :
1) Measure at sweetspot (excatly in the middle).
2) Create flat target BiQuad with thoose measurements
3) Apply the BiQuads to Camilladsp, and start camilladsp.
3a) Maybee apply -2dB gain now???
4) Measure again same spot with BiQuads in place
5) Create FIR's with thoose measurements
6) Apply the FIR's in camilladsp pipeline

Done!

Jesper.
 
Last edited:
Thinking a bit about this as I was searching in the thread for how to list for Camilla available ports and streams...

One should resort to the very last step to do attenuation so to let all EQ/phase computation have the most available no-of-bits at hand to do it's magic on. Then introduce, as last action, inter-over avoiding defence (-3,1 dB I believe it is).

When it comes to attenuation, there could be other reason in a specific sustem to add none-destructive attenuation. This can be made by shifting out the LSB (sucking in a 0 in MSB), corresponding to -6 dB. This together with dither should be the best way to attenuate a PCM stream. So a feature request: Att_shift=1,2,3...15) to do -6, -12, -18 ... -90 dB attenuation with no bit effect than losing the 16th (24th) bit into devNull.

So a Att_shift:1 + dither on the 15th bit, positioned in the end of the processing pipe, should be SOTA attenuation!?

//

PS: terminal command to list streams? :)
All internal calculations are done with 64-bit floats: Double-precision floating-point format - Wikipedia
This means that dividing by 2, 4, 8 etc doesn't lose any bits, just the exponent changes. It doesn't matter where in the chain you put attenuation, the final result will be the same in any case.



I have planned to add a linear gain option, where you just specify a multiplication factor like 0.5 instead of a gain in dB. For now, if you want a factor 0.5, put -6.020599913279624 dB which is so close that the difference will be lost in the rounding.


Then again, if you are actually going to do any filtering, then the whole bit-perfect idea just vanishes.


I forgot about the terminal app to list streams, sorry!
You can use the "enumerate" example from CPAL: GitHub - RustAudio/cpal: Cross-platform audio I/O library in pure Rust
It's easy to compile, but you need rustc and Cargo installed. You run it simply with "cargo run --example enumerate"

My stream-listing-app will be just a slightly modified version of that example.
 

TNT

Member
Joined 2003
Paid Member
U - wizard! :)


(base) MBPr-2:bin MBPr$ ./listdevices
Available hosts:
[CoreAudio]
CoreAudio
Default Input Device:
Ok("Built-in Microphone")
Default Output Device:
Ok("Digiface USB (24007543)")
Devices:


Device: "Built-in Microphone"
============================================================

Capture
------------------------------------------------------------
Default input stream config:
channels: 2, samplerate: 44100, format: FLOAT32LE
All supported input stream configs:
channels: 2, samplerate min: 32000 max: 32000, format: FLOAT32LE
channels: 2, samplerate min: 44100 max: 44100, format: FLOAT32LE
channels: 2, samplerate min: 48000 max: 48000, format: FLOAT32LE
channels: 2, samplerate min: 88200 max: 88200, format: FLOAT32LE
channels: 2, samplerate min: 96000 max: 96000, format: FLOAT32LE

Playback
------------------------------------------------------------


Device: "Built-in Output"
============================================================

Capture
------------------------------------------------------------

Playback
------------------------------------------------------------
Error: BackendSpecific { err: BackendSpecificError { description: "AudioUnit(InvalidPropertyValue)" } }


Device: "Digiface USB (24007543)"
============================================================

Capture
------------------------------------------------------------
Default input stream config:
channels: 8, samplerate: 44100, format: FLOAT32LE
All supported input stream configs:
channels: 32, samplerate min: 32000 max: 32000, format: FLOAT32LE
channels: 32, samplerate min: 44100 max: 44100, format: FLOAT32LE
channels: 32, samplerate min: 48000 max: 48000, format: FLOAT32LE
channels: 32, samplerate min: 64000 max: 64000, format: FLOAT32LE
channels: 32, samplerate min: 88200 max: 88200, format: FLOAT32LE
channels: 32, samplerate min: 96000 max: 96000, format: FLOAT32LE
channels: 32, samplerate min: 128000 max: 128000, format: FLOAT32LE
channels: 32, samplerate min: 176400 max: 176400, format: FLOAT32LE
channels: 32, samplerate min: 192000 max: 192000, format: FLOAT32LE

Playback
------------------------------------------------------------
Default output stream config:
channels: 8, samplerate: 44100, format: FLOAT32LE
All supported output stream configs:
channels: 34, samplerate min: 32000 max: 32000, format: FLOAT32LE
channels: 34, samplerate min: 44100 max: 44100, format: FLOAT32LE
channels: 34, samplerate min: 48000 max: 48000, format: FLOAT32LE
channels: 34, samplerate min: 64000 max: 64000, format: FLOAT32LE
channels: 34, samplerate min: 88200 max: 88200, format: FLOAT32LE
channels: 34, samplerate min: 96000 max: 96000, format: FLOAT32LE
channels: 34, samplerate min: 128000 max: 128000, format: FLOAT32LE
channels: 34, samplerate min: 176400 max: 176400, format: FLOAT32LE
channels: 34, samplerate min: 192000 max: 192000, format: FLOAT32LE
(base) MBPr-2:bin MBPr$
 

TNT

Member
Joined 2003
Paid Member
OK! And the individual streams and channels... (?)

Like Amadeus Pro lists them...

874900d1599743419-camilladsp-cross-platform-iir-fir-engine-crossovers-correction-etc-chs-png


??

//
 
All devices I have present just a single stream, like this one (in Audio MIDI setup):
Screen Shot 2020-09-12 at 09.27.12.png

Could you post the same picture for the Digiface?

This is a config I have been running:
Code:
---
devices:
  samplerate: 44100
  chunksize: 4096
  target_level: 2048
  adjust_period: 10
  enable_rate_adjust: true
  resampler_type: BalancedAsync
  enable_resampling: true
  capture:
    type: CoreAudio
    channels: 2
    device: "Soundflower (2ch)"
    format: FLOAT32LE
  playback:
    type: CoreAudio
    channels: 2
    device: "Built-in Output"
    format: FLOAT32LE

filters:
  lowpass:
    type: Biquad
    parameters:
      type: Lowpass 
      freq: 20000
      q: 0.5 

pipeline:
  - type: Filter
    channel: 0
    names:
      - lowpass
  - type: Filter
    channel: 1
    names:
      - lowpass
 

TNT

Member
Joined 2003
Paid Member
Hi!

The whole list don't fit but you get the hang of it...

Wonder what corresponds to channel in:

pipeline:
- type: Filter
channel: 0
names:
- lowpass

"ADAT 1-8 ADAT 1" ?

This is why I asked for your program to list the channels so that one could get a view of how the system sees them...

//
 

Attachments

  • amidi.png
    amidi.png
    254.9 KB · Views: 195
Last edited: