I experience the same drift of lipsync after some minutes. I also use Kodi. In V2 it was stable. In V3 it drifts away the more the longer it runs. Restarting the cdsp service on raspi brings synchronisation back until it again drifts away.
I've got a fixed sample rate in Kodi. My Hat is hifiberry digi IO. No filtering involved.
CDs setting like here:
I've got a fixed sample rate in Kodi. My Hat is hifiberry digi IO. No filtering involved.
CDs setting like here:
Enabling multithreading doesn't prevent this drifts.
Kodi runs on a second device and is connected to CDSP Hifiberry Hat with optical cable, see here:
Out to Pre is HDMI.
Kodi runs on a second device and is connected to CDSP Hifiberry Hat with optical cable, see here:
Out to Pre is HDMI.
Interesting. I guess if you try https://github.com/HEnquist/camilladsp/releases/tag/v3.0.0-beta.2 it would be stable again.I experience the same drift of lipsync after some minutes. I also use Kodi. In V2 it was stable.
Changes from 3b2 to 3.0: https://github.com/HEnquist/camilladsp/compare/v3.0.0-beta.2...v3.0.0
Honestly, it would be better to post the config file instead of a part of the GUI screen. The screenshot does not show e.g. devices which are important in this case.CDs setting like here:
Yes you are right phofman.
Beta fixed the problem. Thanks for the hint McGraw
Beta fixed the problem. Thanks for the hint McGraw
@taotao: Then please post the whole config as you are reporting some important issue.
I do not know your actual config, but from the two incomplete image fragments : no resampler when very likely two async soundcards? Target level at half of chunksize? E.g. it's possible the latency increase is somehow due to undetected xruns.
I do not know your actual config, but from the two incomplete image fragments : no resampler when very likely two async soundcards? Target level at half of chunksize? E.g. it's possible the latency increase is somehow due to undetected xruns.
Here is my config:
I'll send the trace in some minutes (different PC neccessary for uploading log)
YAML:
description: None
devices:
adjust_period: 2
capture:
channels: 2
device: hw:CARD=sndrpihifiberry,DEV=0
format: S24LE
labels: null
link_mute_control: null
link_volume_control: null
stop_on_inactive: null
type: Alsa
capture_samplerate: 44100
chunksize: 2048
enable_rate_adjust: true
multithreaded: false
playback:
channels: 8
device: hw:b1,0,0
format: S24LE3
type: Alsa
queuelimit: 24
rate_measure_interval: 2
resampler: null
samplerate: 44100
silence_threshold: -99
silence_timeout: 2
stop_on_rate_change: false
target_level: 1024
volume_limit: null
volume_ramp_time: 20
worker_threads: null
filters:
10k:
description: null
parameters:
bandwidth: 1
freq: 12000
gain: 2
type: Peaking
type: Biquad
200hz:
description: null
parameters:
bandwidth: 0.5
freq: 200
gain: 3.5
type: Peaking
type: Biquad
Bass:
description: null
parameters:
freq: 85
gain: 0
q: 0.9
type: Lowshelf
type: Biquad
HP125:
description: null
parameters:
freq: 125
order: 4
type: LinkwitzRileyHighpass
type: BiquadCombo
LP125:
description: null
parameters:
freq: 125
order: 8
type: LinkwitzRileyLowpass
type: BiquadCombo
Tilt down:
description: null
parameters:
gain: 0
type: Tilt
type: BiquadCombo
Treble:
description: null
parameters:
freq: 6500
gain: 0
q: 0.7
type: Highshelf
type: Biquad
Volume:
description: null
parameters:
fader: Aux1
limit: null
ramp_time: 200
type: Volume
delay:
description: null
parameters:
delay: 0.33
subsample: false
unit: ms
type: Delay
gain-3.5:
description: null
parameters:
gain: -3.5
inverted: false
mute: false
scale: dB
type: Gain
hp800:
description: null
parameters:
freq: 800
order: 4
type: LinkwitzRileyHighpass
type: BiquadCombo
lp800:
description: null
parameters:
freq: 800
order: 4
type: LinkwitzRileyLowpass
type: BiquadCombo
mixers:
2in_8out:
channels:
in: 2
out: 8
description: null
labels:
- null
mapping:
- dest: 0
mute: false
sources:
- channel: 0
gain: 0
inverted: false
mute: false
scale: dB
- dest: 1
mute: false
sources:
- channel: 1
gain: 0
inverted: false
mute: false
scale: dB
- dest: 2
mute: false
sources:
- channel: 0
gain: 0
inverted: false
mute: true
scale: dB
- dest: 3
mute: false
sources:
- channel: 1
gain: 0
inverted: false
mute: true
scale: dB
- dest: 4
mute: false
sources:
- channel: 0
gain: 0
inverted: false
mute: true
scale: dB
- dest: 5
mute: false
sources:
- channel: 1
gain: 0
inverted: false
mute: true
scale: dB
- dest: 6
mute: false
sources:
- channel: 0
gain: 0
inverted: false
mute: true
scale: dB
- dest: 7
mute: false
sources:
- channel: 1
gain: 0
inverted: false
mute: true
scale: dB
pipeline:
- bypassed: null
description: null
name: 2in_8out
type: Mixer
- bypassed: null
channels:
- 0
description: null
names:
- Volume
- Treble
- Bass
type: Filter
- bypassed: null
channels:
- 1
description: null
names:
- Volume
- Treble
- Bass
type: Filter
- bypassed: null
channels:
- 2
description: null
names: []
type: Filter
- bypassed: null
channels:
- 3
description: null
names: []
type: Filter
- bypassed: null
channels:
- 4
description: null
names: []
type: Filter
- bypassed: null
channels:
- 5
description: null
names: []
type: Filter
- bypassed: null
channels:
- 6
description: null
names: []
type: Filter
- bypassed: null
channels:
- 7
description: null
names: []
type: Filter
processors:
Compressor:
description: null
parameters:
attack: 0.025
channels: 2
clip_limit: null
factor: 5
makeup_gain: 15
monitor_channels: []
process_channels: []
release: 1
soft_clip: false
threshold: -25
type: Compressor
title: Acoustat One+One
I'll send the trace in some minutes (different PC neccessary for uploading log)
@taotao that config can not give stable latency in any version. The capture and playback devices have independent clocks that are not adjustable, and you don't use the asynchronous resampler. Try enabling the resampler, that really should help. You can also set queue_limit to null, the default of 4 should be fine.
Thank you. I'll give it a try.@taotao that config can not give stable latency in any version. The capture and playback devices have independent clocks that are not adjustable, and you don't use the asynchronous resampler. Try enabling the resampler, that really should help. You can also set queue_limit to null, the default of 4 should be fine.
What target level should be more appropiate? Full Chunksize? Or in my case 1536?
Thanks phofman.
Thanks phofman.
OK, resampling activated (synchronous), queue limit to default and target level in rate adjust to 1536 adjusted.
Runs smooth.
Thanks a lot.
Runs smooth.
Thanks a lot.
Yes that's a good start. Then if you never see buffer underruns and want to try reducing latency, you can try reducing. Or if you have some underruns you can try increasing.What target level should be more appropiate? Full Chunksize?
Change it to asynchronous, otherwise it won't help.OK, resampling activated (synchronous)
@HenrikEnquist Hi, do I have a similar problem with config?
Code:
description: Optimized for sitting at the computer keyboard
devices:
adjust_period: 6
capture:
channels: 6
device: hw:Loopback,1,0
format: null
labels:
- FL
- FR
- RL
- RR
- FC
- LFE
link_mute_control: null
link_volume_control: null
stop_on_inactive: null
type: Alsa
capture_samplerate: null
chunksize: 2048
enable_rate_adjust: true
multithreaded: null
playback:
channels: 6
device: pipewire
format: null
type: Alsa
queuelimit: 16
rate_measure_interval: null
resampler: null
samplerate: 48000
silence_threshold: -80
silence_timeout: 5
stop_on_rate_change: null
target_level: 6143
volume_limit: null
volume_ramp_time: null
worker_threads: null
filters:
cllpgain:
description: null
parameters:
gain: -3.1
inverted: false
mute: false
scale: dB
type: Gain
delay_c:
description: null
parameters:
delay: 4.6697
subsample: false
unit: ms
type: Delay
delay_ds:
description: null
parameters:
delay: 18
subsample: false
unit: ms
type: Delay
delay_l:
description: null
parameters:
delay: 2.5404
subsample: false
unit: ms
type: Delay
delay_lfe:
description: null
parameters:
delay: 3.9843
subsample: false
unit: ms
type: Delay
delay_r:
description: null
parameters:
delay: 0
subsample: false
unit: ms
type: Delay
delay_rl:
description: null
parameters:
delay: 7.5467
subsample: false
unit: ms
type: Delay
delay_rr:
description: null
parameters:
delay: 1.5527
subsample: false
unit: ms
type: Delay
fir_fl:
description: null
parameters:
channel: 0
filename: ../../../rewfiles/D1/FLg inv-MP_FRg inv-MP-$samplerate$.wav
type: Wav
type: Conv
fir_fr:
description: null
parameters:
channel: 1
filename: ../../../rewfiles/D1/FLg inv-MP_FRg inv-MP-$samplerate$.wav
type: Wav
type: Conv
fir_lfe:
description: null
parameters:
channel: 0
filename: ../../../rewfiles/D1/FLEg Inv-MP-$samplerate$.wav
type: Wav
type: Conv
fir_rl:
description: null
parameters:
channel: 0
filename: ../../../rewfiles/D1/SLg Inv-MP_SRg Inv-MP-$samplerate$.wav
type: Wav
type: Conv
fir_rr:
description: null
parameters:
channel: 1
filename: ../../../rewfiles/D1/SLg Inv-MP_SRg Inv-MP-$samplerate$.wav
type: Wav
type: Conv
highpass:
description: null
parameters:
freq: 95
q: 0.707
type: Highpass
type: Biquad
limiter:
description: null
parameters:
clip_limit: -3
soft_clip: false
type: Limiter
loudness:
description: null
parameters:
attenuate_mid: null
fader: null
high_boost: 10
low_boost: 10
reference_level: -20
type: Loudness
lowpass:
description: null
parameters:
freq: 80
q: 0.707
type: Lowpass
type: Biquad
mixers:
stereo:
channels:
in: 6
out: 6
labels:
- FR
- RR
- FL
- RL
- FC
- LFE
mapping:
- dest: 0
mute: false
sources:
- channel: 1
gain: 7
inverted: false
mute: null
scale: dB
- channel: 4
gain: 7
inverted: false
mute: false
scale: dB
- dest: 2
mute: false
sources:
- channel: 0
gain: 0
inverted: false
mute: false
scale: dB
- channel: 4
gain: 0
inverted: false
mute: false
scale: dB
- dest: 5
mute: false
sources:
- channel: 1
gain: 7
inverted: false
mute: null
scale: dB
- channel: 0
gain: 7
inverted: false
mute: false
scale: dB
- channel: 5
gain: 10
inverted: false
mute: null
scale: dB
- dest: 1
mute: false
sources:
- channel: 3
gain: 12
inverted: false
mute: null
scale: dB
- dest: 3
mute: false
sources:
- channel: 2
gain: 9
inverted: false
mute: null
scale: dB
pipeline:
- bypassed: false
description: null
name: stereo
type: Mixer
- bypassed: null
channels:
- 0
description: null
names:
- delay_l
- fir_fl
- loudness
- cllpgain
type: Filter
- bypassed: null
channels:
- 2
description: null
names:
- delay_rl
- fir_rl
- loudness
- cllpgain
type: Filter
- bypassed: null
channels:
- 1
description: null
names:
- delay_r
- fir_fr
- cllpgain
type: Filter
- bypassed: null
channels:
- 3
description: null
names:
- delay_rr
- fir_rr
- cllpgain
type: Filter
- bypassed: null
channels:
- 5
description: null
names:
- delay_lfe
- fir_lfe
- loudness
- cllpgain
type: Filter
processors: null
title: ATK
@QuickDraw McGraw no you are capturing from the loopback, which has an adjustable clock. No need for any async resampler. I would suggest reducing target_level to 2048 to see what happens.
Another method could be reducing the chunksize while keeping the target level at one chunk at least. IMHO it's what alsa maintainers would recommend - more of smaller periods.Then if you never see buffer underruns and want to try reducing latency, you can try reducing.
OK 🙂Change it to asynchronous, otherwise it won't help.
One of the arguments can be that many drivers update the delay (or avail) only at period boundaries. The shorter the periods, the more precise the delay/avail information is.Another method could be reducing the chunksize while keeping the target level at one chunk at least. IMHO it's what alsa maintainers would recommend - more of smaller periods.
- Home
- Source & Line
- PC Based
- CamillaDSP - Cross-platform IIR and FIR engine for crossovers, room correction etc