apparent non bit perfect playback with USB device
Hello, I am currently investigating a peculiar issue with my setup. Recently I bought a Scarlett 2i2 to use as my main audio interface; however, it seems that getting bit perfect playback out of it is rather tricky.
I checked the pw-top output and it all seems fine here:
65 256 44100 31.8µs 11.5µs 0.01 0.00 0 alsa_output.usb-Focusrite_Scarlett_2i2_USB_Y8KYW5Y1C173EF-00.pro-output-0
101 3969 44100 19.3µs 6.2µs 0.00 0.00 0 + strawberry
127 2048 192000 0.1µs 0.1µs 0.00 0.00 0 alsa_input.usb-Focusrite_Scarlett_2i2_USB_Y8KYW5Y1C173EF-00.pro-input-0
However, when I checked the card through procfs, things didn't quite align
% cat /proc/asound/card2/stream0
Focusrite Scarlett 2i2 USB at usb-0000:0f:00.3-2, high speed : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 200
Momentary freq = 192000 Hz (0x18.0000)
Interface 1
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x01 (1 OUT) (SYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR
Capture:
Status: Stop
Interface 2
Altset 1
Format: S32_LE
Channels: 2
Endpoint: 0x81 (1 IN) (SYNC)
Rates: 44100, 48000, 88200, 96000, 176400, 192000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR
I am not really sure about what's happening here. I will attach my configuration here (everything else let's assume it's default values)
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
default.clock.rate = 192000
default.clock.allowed-rates = [ 44100 48000 88200 96000 176400 192000 ]
#default.clock.quantum = 1024
default.clock.min-quantum = 16
#default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
#settings.check-quantum = false
#settings.check-rate = false
#
# These overrides are only applied when running in a vm.
vm.overrides = {
default.clock.min-quantum = 1024
}
}
My system runs Artix Linux, on PipeWire 0.3.48 and WirePlumber 0.4.9