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

I have not transferred everything from the Pulseudio Crossover Rack yet, so it is very simple:

Code:
devices:
  adjust_period: 10
  capture:
    channels: 2
    device: hw:Loopback,1
    format: S32LE
    type: Alsa
  capture_samplerate: 0
  chunksize: 1024
  enable_rate_adjust: true
  enable_resampling: false
  playback:
    channels: 8
    device: hw:1,10,0
    format: S32LE
    type: Alsa
  silence_threshold: -90
  silence_timeout: 3
  queuelimit: 100
  resampler_type: BalancedAsync
  samplerate: 192000
  target_level: 0
filters:
  ARN226.LP:
    parameters:
      freq: 286
      order: 4
      type: ButterworthLowpass
    type: BiquadCombo
  ARX150.HP:
    parameters:
      freq: 412
      order: 4
      type: LinkwitzRileyHighpass
    type: BiquadCombo
  ARX150.LP:
    parameters:
      freq: 2590
      order: 4
      type: LinkwitzRileyLowpass
    type: BiquadCombo
  ND25FW.HP:
    parameters:
      freq: 2590
      order: 4
      type: LinkwitzRileyHighpass
    type: BiquadCombo
mixers:
  2in8out:
    channels:
      in: 2
      out: 8
    mapping:
    - dest: 0
      sources:
      - channel: 0
        gain: -1
        inverted: false
    - dest: 1
      sources:
      - channel: 1
        gain: -1
        inverted: false
    - dest: 2
      sources:
      - channel: 0
        gain: -10
        inverted: false
    - dest: 3
      sources:
      - channel: 1
        gain: -10
        inverted: false
    - dest: 6
      sources:
      - channel: 0
        gain: -7
        inverted: false
    - dest: 7
      sources:
      - channel: 1
        gain: -7
        inverted: false
pipeline:
- name: 2in8out
  type: Mixer
- channel: 0
  names:
  - ARN226.LP
  type: Filter
- channel: 1
  names:
  - ARN226.LP
  type: Filter
- channel: 6
  names:
  - ARX150.LP
  - ARX150.HP
  type: Filter
- channel: 7
  names:
  - ARX150.LP
  - ARX150.HP
  type: Filter
- channel: 2
  names:
  - ND25FW.HP
  type: Filter
- channel: 3
  names:
  - ND25FW.HP
  type: Filter
 
With 4096 it is just repeating:
Oct 24 23:41:56 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:41:56Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:41:57 dtk camilladsp[14838]: [2020-10-24T21:41:57Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:41:57 dtk camilladsp[14838]: message repeated 10 times: [ [2020-10-24T21:41:57Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:41:58 dtk camilladsp[14838]: [2020-10-24T21:41:58Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:41:58 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:41:58Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:41:59 dtk camilladsp[14838]: [2020-10-24T21:41:59Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:41:59 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:41:59Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:42:00 dtk camilladsp[14838]: [2020-10-24T21:42:00Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:42:00 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:42:00Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:42:01 dtk camilladsp[14838]: [2020-10-24T21:42:01Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:42:01 dtk camilladsp[14838]: message repeated 10 times: [ [2020-10-24T21:42:01Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:42:02 dtk camilladsp[14838]: [2020-10-24T21:42:02Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:42:02 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:42:02Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:42:03 dtk camilladsp[14838]: [2020-10-24T21:42:03Z WARN camillalib::alsadevice] Prepare playback after buffer underrun
Oct 24 23:42:03 dtk camilladsp[14838]: message repeated 9 times: [ [2020-10-24T21:42:03Z WARN camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 24 23:42:04 dtk camilladsp[14838]: [2020-10-24T21:42:04Z WARN camillalib::alsadevice] Prepare playback after buffer underrun



and the receiver display flashes between 7.1 and stereo mode.
 
Trying to educate myself:
Isn't setting "target_level" to zero, more or less the same as turn off "enable_rate_adjust"? Causing the underrun for xorcz?

A target level of 0 would not work, there would be constant underruns. But setting it to zero is the same as leaving out the setting. Then there is a check so that if the value is 0 it's replaced by the value of chunksize.
 
Start of the CamillaDSP
Code:
Oct 25 11:16:41 dtk systemd[1]: Started CamillaDSP Daemon.
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Read config file Some("/opt/camilladsp/configs/config.yml")
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Config is valid
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::socketserver] Start websocket server on 127.0.0.1:1234
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Wait for config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Config ready
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build new pipeline
Oct 25 11:16:41 dtk camilladsp[4616]: Buffer frames 8192
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.99277506546254 a2=0.9928623492296514 b0=0.00002182094177779448 b1=0.00004364188355558896 b2=0.00002182094177779448
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.982767874875442 a2=0.9828547203265044 b0=0.00002171136276561948 b1=0.00004342272553123896 b2=0.00002171136276561948
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.99277506546254 a2=0.9928623492296514 b0=0.00002182094177779448 b1=0.00004364188355558896 b2=0.00002182094177779448
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.982767874875442 a2=0.9828547203265044 b0=0.00002171136276561948 b1=0.00004342272553123896 b2=0.00002171136276561948
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.0016935106607580248 b1=0.0033870213215160495 b2=0.0016935106607580248
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.0016935106607580248 b1=0.0033870213215160495 b2=0.0016935106607580248
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.9809331968875066 a2=0.981113259870915 b0=0.9905116141896054 b1=-1.9810232283792109 b2=0.9905116141896054
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.9809331968875066 a2=0.981113259870915 b0=0.9905116141896054 b1=-1.9810232283792109 b2=0.9905116141896054
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.0016935106607580248 b1=0.0033870213215160495 b2=0.0016935106607580248
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.0016935106607580248 b1=0.0033870213215160495 b2=0.0016935106607580248
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.9809331968875066 a2=0.981113259870915 b0=0.9905116141896054 b1=-1.9810232283792109 b2=0.9905116141896054
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.9809331968875066 a2=0.981113259870915 b0=0.9905116141896054 b1=-1.9810232283792109 b2=0.9905116141896054
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.9418265237143423 b1=-1.8836530474286846 b2=0.9418265237143423
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.9418265237143423 b1=-1.8836530474286846 b2=0.9418265237143423
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::filters] Build from config
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.9418265237143423 b1=-1.8836530474286846 b2=0.9418265237143423
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::biquad] a1=-1.8802660261071684 a2=0.8870400687502007 b0=0.9418265237143423 b1=-1.8836530474286846 b2=0.9418265237143423
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::processing] build filters, waiting to start processing loop
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::alsadevice] Opened audio device "hw:Loopback,1" with parameters: HwParams { channels: Ok(2), rate: "Ok(192000) Hz", format: Ok(S32LE), access: Ok(RWInterleaved), period_size: "Ok(2048) frames", buffer_size: "Ok(16384) frames" }, SwParams(avail_min: Ok(2048) frames, start_threshold: Ok(0) frames, stop_threshold: Ok(16384) frames)
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Capture thread ready to start
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::alsadevice] Opened audio device "hw:1,10,0" with parameters: HwParams { channels: Ok(8), rate: "Ok(192000) Hz", format: Ok(S32LE), access: Ok(RWInterleaved), period_size: "Ok(1024) frames", buffer_size: "Ok(2048) frames" }, SwParams(avail_min: Ok(1024) frames, start_threshold: Ok(0) frames, stop_threshold: Ok(2048) frames)
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Playback thread ready to start
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camilladsp] Both capture and playback ready, release barrier
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::alsadevice] Starting playback loop
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z DEBUG camillalib::alsadevice] Starting captureloop
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z INFO  camillalib::alsadevice] Capture device supports rate adjust
Oct 25 11:16:41 dtk camilladsp[4616]: [2020-10-25T10:16:41Z INFO  camillalib::alsadevice] Starting playback from Prepared state
Oct 25 11:16:42 dtk camilladsp[4616]: [2020-10-25T10:16:42Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:16:42 dtk camilladsp[4616]: message repeated 9 times: [ [2020-10-25T10:16:42Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 25 11:16:43 dtk camilladsp[4616]: [2020-10-25T10:16:43Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:16:43 dtk camilladsp[4616]: message repeated 9 times: [ [2020-10-25T10:16:43Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 25 11:16:44 dtk camilladsp[4616]: [2020-10-25T10:16:44Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:16:44 dtk camilladsp[4616]: message repeated 9 times: [ [2020-10-25T10:16:44Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 25 11:16:44 dtk camilladsp[4616]: [2020-10-25T10:16:44Z DEBUG camillalib::countertimer] Pausing processing
Oct 25 11:16:45 dtk camilladsp[4616]: [2020-10-25T10:16:45Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:16:45 dtk camilladsp[4616]: message repeated 3 times: [ [2020-10-25T10:16:45Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]


Play
Code:
Code:
[SIZE=4]Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z DEBUG camillalib::countertimer] Resuming processing
Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z DEBUG camillalib::audiodevice] Current buffer level 1357.1654676258993, set capture rate to 100.071328125%
Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z DEBUG camilladsp] SetSpeed message received
Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:19:54 dtk camilladsp[4616]: message repeated 6 times: [ [2020-10-25T10:19:54Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]
Oct 25 11:19:55 dtk camilladsp[4616]: [2020-10-25T10:19:55Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun
Oct 25 11:19:55 dtk camilladsp[4616]: message repeated 9 times: [ [2020-10-25T10:19:55Z WARN  camillalib::alsadevice] Prepare playback after buffer underrun]
[/SIZE]
+maybe usefull
Code:
root@dtk:/etc# cat /proc/asound/card1/pcm10p/sub0/hw_params 
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 8
rate: 192000 (192000/1)
period_size: 1024
buffer_size: 2048
root@dtk:/etc# cat /proc/asound/card1/pcm10p/sub0/sw_params 
tstamp_mode: NONE
period_step: 1
avail_min: 1024
start_threshold: 0
stop_threshold: 2048
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904
root@dtk:/etc# cat /proc/asound/card1/pcm10p/sub0/status 
state: RUNNING
owner_pid   : 5558
trigger_time: 2172.346173563
tstamp      : 0.000000000
delay       : 1362
avail       : 686
avail_max   : 686
-----
hw_ptr      : 11164
appl_ptr    : 12526
root@dtk:/etc# cat /proc/asound/card1/pcm10p/sub0/info 
card: 1
device: 10
subdevice: 0
stream: PLAYBACK
id: HDMI 4
name: HDMI 4
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
 
Last edited:
@Henrik
I am now using the named pipe method of sample rate changing. I can't seem to work out why plotting is no longer working though. pip3 list shows :

Package Version
----------------- ---------
aiohttp 3.7.1
async-timeout 3.0.1
attrs 20.2.0
camilladsp 0.4.1
camilladsp-plot 0.3.0
certifi 2020.6.20
chardet 3.0.4
cycler 0.10.0
gevent 20.9.0
greenlet 0.4.17
idna 2.10
kiwisolver 1.2.0
matplotlib 3.3.2
multidict 5.0.0
numpy 1.19.2
Pillow 8.0.1
pip 18.1
pyparsing 2.4.7
python-dateutil 2.8.1
PyYAML 5.3.1
setuptools 50.3.2
six 1.15.0
typing-extensions 3.7.4.3
websocket 0.2.1
websocket-client 0.57.0
wheel 0.35.1
yarl 1.6.2
zope.event 4.5.0
zope.interface 5.1.2

I get a no plotting! message why I start the server and of course a plotting unavailable message from the GUI when I try to plot a filter. I can see from looking at views.py how the relevant imports from camilladsp-plot can fail in the try block. Does plotting still work with the named pipe method?
 
This is quite strange. This message:
Code:
[SIZE=4]Oct 25 11:19:54 dtk camilladsp[4616]: [2020-10-25T10:19:54Z DEBUG camillalib::audiodevice] Current buffer level 1357.1654676258993, set capture rate to 100.071328125%[/SIZE]
means that everything is fine. Then there is a buffer underrun right after. It's as if it's running slowly and can't keep up. Do you see very high cpu usage? With the filters you have the load should be quite low.

You did compile with the --release flag, right?
Could you also try running with -vv to get even mode? It prints a lot then, just dump 10 seconds or so to a file and attach it here.
 
I get a no plotting! message why I start the server and of course a plotting unavailable message from the GUI when I try to plot a filter. I can see from looking at views.py how the relevant imports from camilladsp-plot can fail in the try block. Does plotting still work with the named pipe method?
Could you run this line in ipython (or just a plain python prompt) and post the output?
Code:
from camilladsp_plot import plot_pipeline, plot_filter, plot_filterstep
 
I wonder how complicated it would be to keep the web server in rust. It seems to me the crate support is more advanced and reliable than installation of python libraries with pip. Coding web pages in rust is doubtlessly more complicated, but the reliability and assurance of correct function compared to python...
 
The thing I got stuck on is how to resample the IR. It would of course be easy to use the resampler and just resample, but there are some drawbacks. The resampling adds a lowpass filter just below the Nyquist frequency. Not too bad when going down in sample rate, but does anyone want their 192kHz music limited to 20-ish kHz?
I use mostly impulse response filters that are derived from room and driver measurements and for me these start out with a 48 or 96 k measurements. I assumed these are band limited and the resulting filter could be converted without to much issue. I have a basic understanding of these things but unfortunately lack in depth knowledge, just enough to get in trouble...

Here is another idea for your consideration. Maybe a better alternative is to use a file naming scheme where the file name would end with the sample rate. You could still use a frequency parameter as suggested earlier leaving the door open to impulse response sample rate conversion in the future. Something like "multi" entered for this parameter could mean that the FIR file name would be the string provided for file name with the sample rate appended at the end. I think this would make it easier to work with FIR filters at different sampling rates.

Any how, there is always the option of converting the audio stream to match the FIR sampling frequency as this is well implemented in your program. I just thought it would be nice to go the other way around.
 
..It's as if it's running slowly and can't keep up. Do you see very high cpu usage? With the filters you have the load should be quite low.

You did compile with the --release flag, right?
Could you also try running with -vv to get even mode? It prints a lot then, just dump 10 seconds or so to a file and attach it here.


Yes, like this:
RUSTFLAGS='-C target-cpu=native' cargo build --release --no-default-features --features alsa-backend --features websocket



Load with chunksize: 2048 while playing youtube in the FF:
Code:
Tasks: 365 total,   1 running, 250 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1,4 us,  0,8 sy,  0,0 ni, 97,7 id,  0,0 wa,  0,0 hi,  0,1 si,  0,0 st
KiB Mem : 16322188 total, 12386256 free,  2019408 used,  1916524 buff/cache
KiB Swap:  1003516 total,  1003516 free,        0 used. 13737448 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                        
 1261 root     -11   0  342948   8708   7576 S  13,9  0,1   0:23.60 camilladsp                                                                                                                                     
 1957 osho       9 -11 1097404  20216  18376 S   6,3  0,1   0:08.08 pulseaudio                                                                                                                                     
 3082 osho      20   0 3126512 368328 191004 S   5,0  2,3   0:22.10 Web Content                                                                                                                                    
  2409 osho      20   0 3457344 440012 182352 S   1,3  2,7   0:33.53 firefox
Here is the -vv output for the 4096 chunksize:
Oct 25 18:19:55 dtk systemd[1]: Started CamillaDSP Daemon.Oct 25 18:19:55 dtk - Pastebin.com
 
I have two problems, which are probably unrelated.

1. CamillaDSP does not work with 4096 chunksize on my computer.

2. There are pops in the sound, but not always because of the underrun. To do a quick test I use Online Tone Generator - generate pure tones of any frequency
If I set 20Hz I have pops with the CamillaDSP at least every minute even there are no underruns. I do not have such pops with the PulseAudio Crossover Rack (the same computer, just changed configuration and restarted PA).
 
Yes there will be a delay. The lowpass interpolation filter is linear phase (a windowed sinc in the time domain) so there is a little pre-ringing. The delay is needed to make space for this. It's not a big delay, just 128 samples or so.

I just did some generation of filters i RePhase to see if combining FIR and LP gives any disadvantages.
Can't se much deviation between FIR filter with LP filter and without.
But some deviation on the LP filter near the noise floor when adding FIR filter.
See pictures.
This is the reason i think the two filtes can somehow be combined without extra delay, but it is maybe not worth it to save 128 samples. (1-3ms delay)
 

Attachments

  • RephaseLP.JPG
    RephaseLP.JPG
    166.6 KB · Views: 161
  • RephaseLPandFIR2.JPG
    RephaseLPandFIR2.JPG
    174.5 KB · Views: 161
  • RephaseLPandFIR2zoom.JPG
    RephaseLPandFIR2zoom.JPG
    178.8 KB · Views: 155
  • RephasenoLPonlyFIR2zoom.JPG
    RephasenoLPonlyFIR2zoom.JPG
    179.4 KB · Views: 163
I have two problems, which are probably unrelated.

1. CamillaDSP does not work with 4096 chunksize on my computer.

2. There are pops in the sound, but not always because of the underrun. To do a quick test I use Online Tone Generator - generate pure tones of any frequency
If I set 20Hz I have pops with the CamillaDSP at least every minute even there are no underruns. I do not have such pops with the PulseAudio Crossover Rack (the same computer, just changed configuration and restarted PA).

I am also getting them on a 20Hz test tone with the new named pipe rate switching setup. If I revert to Jespers rate switching setup its gone.
 
I tried installing Camilladsp on my old pi (b+ rev 1.2) and when i run "cargo build --release" it goes thru the entire process and gave me this error

error: failed to write / home/camilladsp/Cargo.lock
caused by: failed to open: / home/camilladsp/cargo.lock
caused by: Permission denied (os error 13)

is this because i have an old pi or something else. thanks
 
also tried installing on another SBC (RK3288 running Armbian Ubuntu bionic desktop)..got this error

cargo:warning=`"pkg-config" "--libs" "--cflags" "libpulse" "libpulse >= 13.0"` did not exit successfully: exit code: 1
--- stderr
Requested 'libpulse >= 13.0' but version of libpulse is 11.1

i checked and it has the latest version of pulse 11.1 on Ubuntu

Thanks for all the help