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

Hi Henrik, I'm currently building from source and I'm on the next100 branch. Pulled all changes there (can see you commit about also timeouts in my history) and rebuilt, no changes in the generic (non lowlatency) kernel. xruns every 1-2min and the occasional alsa snd_pcm_iwrite error, which might even exit the program. Sorry, I cleared my logs after restarting to the lowlatency kernel, if you need the logs, drop me a notice and I will restart with the generic kernel once more.
Ok, that's somewhat disappointing. Could you try increasing the timeout even more? Maybe a factor 10 to start with, and if that helps, try to go down a bit.
 
MRamone: IIUC the scout vs. direct modes are just some DSP for noise removal on playback in the scoute mode. What effect does it have on input selection?

Please post output of 'amixer -c G6 contents' for the capture from spdif and capture from mic input.

The choice of input selection is independent of the playback mode (i think). What i observe is that direct mode brings a few controls in alsamixer active, while the other modes make all the controls in alsamixer inactive.

this is amixer -c G6 contents with spdif input selected:

marcosch@raspcamilla:~$ amixer -c G6 contents
numid=3,iface=MIXER,name='PCM Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=4,iface=MIXER,name='PCM Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=20,iface=MIXER,name='PCM Capture Source'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Line In'
; Item #1 'External Mic'
; Item #2 'S/PDIF In'
; Item #3 'What U Hear'
: values=0
numid=16,iface=MIXER,name='Line In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=5,iface=MIXER,name='Line In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=6,iface=MIXER,name='Line In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=7,iface=MIXER,name='Line In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=17,iface=MIXER,name='External Mic Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=8,iface=MIXER,name='External Mic Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=9,iface=MIXER,name='External Mic Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=10,iface=MIXER,name='External Mic Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=18,iface=MIXER,name='S/PDIF In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=11,iface=MIXER,name='S/PDIF In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=12,iface=MIXER,name='S/PDIF In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=13,iface=MIXER,name='S/PDIF In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=15,iface=MIXER,name='Speaker Clock Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'DSP Clock'
; Item #1 'Stereo Direct'
: values=0
numid=14,iface=MIXER,name='Speaker Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=19,iface=MIXER,name='What U Hear Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=2,iface=PCM,name='Capture Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR
numid=1,iface=PCM,name='Playback Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR

this is the output of amixer -c G6 contents with mic in selected as input:

marcosch@raspcamilla:~$ amixer -c G6 contents
numid=3,iface=MIXER,name='PCM Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=4,iface=MIXER,name='PCM Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=20,iface=MIXER,name='PCM Capture Source'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Line In'
; Item #1 'External Mic'
; Item #2 'S/PDIF In'
; Item #3 'What U Hear'
: values=0
numid=16,iface=MIXER,name='Line In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=5,iface=MIXER,name='Line In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=6,iface=MIXER,name='Line In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=7,iface=MIXER,name='Line In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=17,iface=MIXER,name='External Mic Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=8,iface=MIXER,name='External Mic Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=9,iface=MIXER,name='External Mic Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=10,iface=MIXER,name='External Mic Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=18,iface=MIXER,name='S/PDIF In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=11,iface=MIXER,name='S/PDIF In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=12,iface=MIXER,name='S/PDIF In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=13,iface=MIXER,name='S/PDIF In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=15,iface=MIXER,name='Speaker Clock Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'DSP Clock'
; Item #1 'Stereo Direct'
: values=0
numid=14,iface=MIXER,name='Speaker Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=19,iface=MIXER,name='What U Hear Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=2,iface=PCM,name='Capture Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR
numid=1,iface=PCM,name='Playback Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR
 
you didnt ask for it, but wanted to show you also the output when i select direct mode pressing the side button (more controls become active in alsamixer):

marcosch@raspcamilla:~$ amixer -c G6 contents
numid=3,iface=MIXER,name='PCM Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=4,iface=MIXER,name='PCM Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=29,iface=MIXER,name='PCM Capture Source'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Line In'
; Item #1 'External Mic'
; Item #2 'S/PDIF In'
; Item #3 'What U Hear'
: values=2
numid=20,iface=MIXER,name='Line In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=21,iface=MIXER,name='Line In Capture Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=57,step=0
: values=48,48
| dBminmax-min=-48.00dB,max=9.00dB
numid=5,iface=MIXER,name='Line In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=6,iface=MIXER,name='Line In Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=146,step=0
: values=128,128
| dBminmax-min=-64.00dB,max=9.00dB
numid=7,iface=MIXER,name='Line In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=8,iface=MIXER,name='Line In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=22,iface=MIXER,name='External Mic Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=23,iface=MIXER,name='External Mic Capture Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=57,step=0
: values=48,48
| dBminmax-min=-48.00dB,max=9.00dB
numid=9,iface=MIXER,name='External Mic Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=10,iface=MIXER,name='External Mic Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=146,step=0
: values=128,128
| dBminmax-min=-64.00dB,max=9.00dB
numid=11,iface=MIXER,name='External Mic Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=12,iface=MIXER,name='External Mic Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=24,iface=MIXER,name='Input Gain Control'
; type=INTEGER,access=rw------,values=1,min=0,max=3,step=0
: values=2
numid=25,iface=MIXER,name='S/PDIF In Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=26,iface=MIXER,name='S/PDIF In Capture Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=57,step=0
: values=48,48
| dBminmax-min=-48.00dB,max=9.00dB
numid=13,iface=MIXER,name='S/PDIF In Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=14,iface=MIXER,name='S/PDIF In Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=146,step=0
: values=128,128
| dBminmax-min=-64.00dB,max=9.00dB
numid=15,iface=MIXER,name='S/PDIF In Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=16,iface=MIXER,name='S/PDIF In Volume',index=1
; type=INTEGER,access=rw------,values=1,min=0,max=0,step=0
: values=0
numid=19,iface=MIXER,name='Speaker Clock Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'DSP Clock'
; Item #1 'Stereo Direct'
: values=1
numid=17,iface=MIXER,name='Speaker Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=18,iface=MIXER,name='Speaker Playback Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=128,step=0
: values=122,122
| dBminmax-min=-64.00dB,max=0.00dB
numid=27,iface=MIXER,name='What U Hear Capture Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=28,iface=MIXER,name='What U Hear Capture Volume'
; type=INTEGER,access=rw---R--,values=2,min=0,max=57,step=0
: values=48,48
| dBminmax-min=-48.00dB,max=9.00dB
numid=2,iface=PCM,name='Capture Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR
numid=1,iface=PCM,name='Playback Channel Map'
; type=INTEGER,access=r----R--,values=2,min=0,max=36,step=0
: values=0,0
| container
| chmap-fixed=FL,FR
 
I doubled the timeout for the Alsa I/O now, and released rc3.
@ChrisPatlach and @Tfive can you see if this works better for you with the standard kernel?

Tried rc3, still getting the same error. I also completely disabled pipewire and pulseaudio, same results.

I have raspi os 64 bit bullseye which has kernel 5.10, have not tried using a more recent kernel yet.
 
I am lost as well... I have set up and used several DSP/Eq/crossover/room correction software and hardware systems including DBX PA 2 (amazing value for money), the DEQX (expensive but good sound) several Mini DSP, Dirac and Smaart from Rational Acoustics. So I am am not a newbie and not dumb, but the Camilla is a long way short of being user friendly and consumer ready.... When it is it will be great!

Where did you get lost?
 
ChrisPatlach: Thanks.


Code:
2022-03-01 15:17:59.781977 WARN  [src/alsadevice.rs:183] Retrying playback, error: ALSA function 'snd_pcm_writei' failed with error 'EAGAIN: Try again'
2022-03-01 15:17:59.782343 ERROR [src/bin.rs:344] Playback error: ALSA function 'snd_pcm_prepare' failed with error 'EBUSY: Device or resource busy'

The code will need to handle EAGAIN specifically, it's not a real error, it just means zero bytes were written by the non-blocking code. I will take a look at it, for 1.1 (next11)

But the second error from the subsequent write attempt is ugly - the card was being used by a different process at the moment. The systemd log shows that pipewire was running. Have you disabled all soundcards used by camilla in pipewire?
 
Here are my logs with trace loglevel and generic (non lowlatency) kernel:
https://t-5.eu/nextcloud/index.php/s/EpnBSNro5gRxq5L
First one is really long though I filtered out the websocket stuff. Error occurred while starting a waydroid container. So I thought that it might be related to either CPU scheduling or IO scheduling. CPU stress did not matter at all. Second one was forced pretty quickly while doing a dd from /dev/zero to an encrypted partition of an SSD, BTRFS filesystem.

I have one more question, I see wildly varying measured sample rates:
Code:
2022-03-03 23:20:00.953341 TRACE [src/alsadevice.rs:673] Measured sample rate is 192511.89796869404 Hz
2022-03-03 23:20:00.953356 TRACE [src/alsadevice.rs:703] Measured sample rate is 192511.87101704645 Hz
2022-03-03 23:20:01.957356 TRACE [src/alsadevice.rs:673] Measured sample rate is 191742.17224349568 Hz
2022-03-03 23:20:01.957370 TRACE [src/alsadevice.rs:703] Measured sample rate is 191742.38842791817 Hz
2022-03-03 23:20:02.961482 TRACE [src/alsadevice.rs:673] Measured sample rate is 191721.54090603528 Hz
2022-03-03 23:20:02.961496 TRACE [src/alsadevice.rs:703] Measured sample rate is 191721.00915540816 Hz
2022-03-03 23:20:03.985449 TRACE [src/alsadevice.rs:673] Measured sample rate is 192006.2235142233 Hz
2022-03-03 23:20:03.985463 TRACE [src/alsadevice.rs:703] Measured sample rate is 192006.1710108341 Hz
2022-03-03 23:20:04.985472 TRACE [src/alsadevice.rs:673] Measured sample rate is 192507.41158584488 Hz
2022-03-03 23:20:04.985486 TRACE [src/alsadevice.rs:703] Measured sample rate is 192507.56597323294 Hz
2022-03-03 23:20:05.990260 TRACE [src/alsadevice.rs:673] Measured sample rate is 191594.84391236465 Hz
2022-03-03 23:20:05.990273 TRACE [src/alsadevice.rs:703] Measured sample rate is 191594.51727455735 Hz
2022-03-03 23:20:06.993457 TRACE [src/alsadevice.rs:673] Measured sample rate is 191898.24550874726 Hz
2022-03-03 23:20:06.993472 TRACE [src/alsadevice.rs:703] Measured sample rate is 191898.49284244297 Hz
2022-03-03 23:20:07.993521 TRACE [src/alsadevice.rs:673] Measured sample rate is 192500.06384104147 Hz
2022-03-03 23:20:07.993534 TRACE [src/alsadevice.rs:703] Measured sample rate is 192499.7127433356 Hz
2022-03-03 23:20:09.001502 TRACE [src/alsadevice.rs:673] Measured sample rate is 190986.874694104 Hz
2022-03-03 23:20:09.001512 TRACE [src/alsadevice.rs:703] Measured sample rate is 190987.96436432764 Hz

My chain is "pulseaudio > alsa loopback device > camilladsp > ASUS Xonar U5". Who is the clocking master here? If the rate of the sound card changes, do these changes "propagate" back through the alsa loopback devices to pulseaudio? At least it seems so, because there's no resampler active in camilladsp.
 
But the second error from the subsequent write attempt is ugly - the card was being used by a different process at the moment. The systemd log shows that pipewire was running. Have you disabled all soundcards used by camilla in pipewire?
"ugly" don't like the sound of that... It does not seem to make a difference if pipewire is disabled or not. Not sure why but pipewire is enabled by default in the raspios bullseye 64bit. I have never used it. I took another log with both pipewire and pulseaudio disabled with

systemctl --user stop pulseaudio.socket && systemctl --user stop pulseaudio.service
systemctl --user stop pipewire.socket && systemctl --user stop pipewire.service

with these command, I did not see any pipewire or pulseaudio processes using htop.

Cant think of what could be talking to the DAC8Pro other than roon but it is configured with only the alsa loop as enabled.

Anyhow, log is attached but looks the same to me.
 

Attachments

  • lognopipewirepulseaudio.txt.7z
    779 KB · Views: 33
Tried bumping up the wait time in line 164 of branch next100 to:

match pcmdevice.wait(Some(40 * millis_per_chunk as u32)) {

still got wait error and now capture wait time out.

2022-03-04 18:30:31.854336 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/mod.rs:381] Frames still in queue: 0
2022-03-04 18:30:31.873967 WARN [src/alsadevice.rs:169] Wait timed out, playback device takes too long to drain buffer
2022-03-04 18:30:31.874072 WARN [src/alsadevice.rs:183] Retrying playback, error: ALSA function 'snd_pcm_writei' failed with error 'EAGAIN: Try again'
2022-03-04 18:30:31.874202 ERROR [src/bin.rs:344] Playback error: ALSA function 'snd_pcm_prepare' failed with error 'EBUSY: Device or resource busy'
2022-03-04 18:30:31.874298 DEBUG [src/bin.rs:352] Wait for capture thread to exit..
2022-03-04 18:30:31.874295 WARN [src/alsadevice.rs:203] Prepare capture device
2022-03-04 18:30:32.042652 WARN [src/alsadevice.rs:228] Wait timed out, capture device takes too long to capture frames
2022-03-04 18:30:32.042742 DEBUG [src/alsadevice.rs:687] Capture device is inactive, processing is stalled
2022-03-04 18:30:32.095013 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/frame.rs:139] Parsed headers [129, 138]
2022-03-04 18:30:32.095107 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/frame.rs:143] First: 10000001
2022-03-04 18:30:32.095163 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/frame.rs:144] Second: 10001010
2022-03-04 18:30:32.095222 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/frame.rs:153] Opcode: Data(Text)
2022-03-04 18:30:32.095315 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/frame.rs:156] Masked: true
2022-03-04 18:30:32.095378 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/mod.rs:164] received frame
<FRAME>
final: true
reserved: false false false
opcode: TEXT
length: 16
payload length: 10
payload: 0x7a8076a4bb372a43de5

2022-03-04 18:30:32.095455 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/mod.rs:311] Received message "GetState"
2022-03-04 18:30:32.095514 TRACE [src/socketserver.rs:340] received: Text("\"GetState\"")
2022-03-04 18:30:32.095582 DEBUG [src/socketserver.rs:340] parsed command: Ok(GetState)
2022-03-04 18:30:32.095651 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/mod.rs:381] Frames still in queue: 1
2022-03-04 18:30:32.095708 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/mod.rs:604] Sending frame: Frame { header: FrameHeader { is_final: true, rsv1: false, rsv2: false, rsv3: false, opcode: Data(Text), mask: None }, payload: [123, 34, 71, 101, 116, 83, 116, 97, 116, 101, 34, 58, 123, 34, 114, 101, 115, 117, 108, 116, 34, 58, 34, 79, 107, 34, 44, 34, 118, 97, 108, 117, 101, 34, 58, 34, 83, 116, 97, 108, 108, 101, 100, 34, 125, 125] }
2022-03-04 18:30:32.095778 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/frame/mod.rs:173] writing frame
<FRAME>
final: true
reserved: false false false
opcode: TEXT
length: 48
payload length: 46
payload: 0x7b224765745374617465223a7b22726573756c74223a224f6b222c2276616c7565223a225374616c6c6564227d7d

2022-03-04 18:30:32.095927 TRACE [/home/pi/.cargo/registry/src/github.com-1ecc6299db9ec823/tungstenite-0.16.0/src/protocol/mod.rs:381] Frames still in queue: 0
2022-03-04 18:30:32.203874 TRACE [src/alsadevice.rs:166] Playback waited, ready
2022-03-04 18:30:32.204042 TRACE [src/alsadevice.rs:189] Wrote 4096 frames to playback device
2022-03-04 18:30:32.204217 DEBUG [src/alsadevice.rs:579] Exit message received, sending EndOfStream
2022-03-04 18:30:32.205716 DEBUG [src/audiodevice.rs:613] Current buffer level: 4879.6, corrected capture rate: 99.9592%
2022-03-04 18:30:32.206055 DEBUG [src/alsadevice.rs:474] Playback buffer level: 4879.6, signal rms: [-222.38304, -227.40755, -221.76314, -222.56918, -197.66098, -199.71426, -41.23649, -40.488907]
2022-03-04 18:30:32.246472 TRACE [src/alsadevice.rs:166] Playback waited, ready

Planning to try ubuntu 64 bit instead of raspi os next.
 
My chain is "pulseaudio > alsa loopback device > camilladsp > ASUS Xonar U5". Who is the clocking master here? If the rate of the sound card changes, do these changes "propagate" back through the alsa loopback devices to pulseaudio? At least it seems so, because there's no resampler active in camilladsp.
I assume you have rate adjust enabled? Then the Xonar is the clock master. Camilladsp keeps the loopback in sync with the Xonar by adjusting the "PCM Rate Shift 100000" control of the loopback. And pulse follows the loopback.
 
Progress is made but still no output.
I followed the setup and all seemed to go well..
https://github.com/HEnquist/camilladsp-config
Code:
● camilladsp.service - CamillaDSP Daemon
     Loaded: loaded (/etc/systemd/system/camilladsp.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2022-03-05 13:59:05 NZDT; 3min 52s ago
   Main PID: 545 (camilladsp)
      Tasks: 6 (limit: 13028)
     Memory: 7.0M
     CGroup: /system.slice/camilladsp.service
             └─545 /usr/local/bin/camilladsp /home/bob/akg-test.yml

Mar 05 13:59:05 audacity systemd[1]: Started CamillaDSP Daemon.
Mar 05 13:59:06 audacity camilladsp[545]: 2022-03-05 00:59:06.029399 INFO [src/bin.rs:711] CamillaDSP version 1.0.0-rc3
Mar 05 13:59:06 audacity camilladsp[545]: 2022-03-05 00:59:06.029482 INFO [src/bin.rs:712] Running on linux, x86_64
Mar 05 13:59:06 audacity camilladsp[545]: 2022-03-05 00:59:06.079451 INFO [src/alsadevice.rs:547] Capture device supports rate adjust
Mar 05 13:59:06 audacity camilladsp[545]: 2022-03-05 00:59:06.181647 INFO [src/alsadevice.rs:155] Starting playback from Prepared state

Pulse audio now shows Camilladsp as the output device but testing gives no sound.

Code:
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 7/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 0: ALC255 Analog [ALC255 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

here is a snippet from the .yml
Code:
devices:
  samplerate: 44100
  chunksize: 4096
  queuelimit: 1
  capture:
    type: Alsa
    channels: 2
    device: "hw:Loopback,0"
    format: S32LE
  playback:
    type: Alsa
    channels: 2
    device: "hw:2,0"
    format: S16LE

I expect from the aplay output that hw:2,0 would be the headphone output from the onboard card. I have tried plughw:2,0.

I have even tried using just the above snippet as the .yml and still no sound.

What am I missing ? eye of newt ? wing of bat?