Linux: Audio from Fiio USB DAC stutters

  • Which OS?
    Linux, Pop OS

  • Which release of your OS?
    Pop OS 22.04

  • Which Framework laptop?
    Framework 13, AMD Ryzen 7840U

I’ve have my Framework for nearly two months now, and since I got it I’ve been having a problem with my Fiio E10K USB DAC. When I’m listening to music or watching videos, I sometimes get stutters in the audio every 5-10 seconds.

What’s weird is I’ve had this DAC for over 10 years, it worked great on my previous machines (HP Spectre x360 many years ago, then a Dell XPS 13, also with multiple Windows desktop PCs), but only now it’s an issue with this laptop.

I’m decently Linux savvy, but I have no idea where to start to debug this kind of problem.

I thought it might be a USB bandwidth issue; normally I had it plugged into a dumb USB hub plugged into my Dell 34" ultrawide USB-C monitor (passthrough to my laptop over USB-C thunderbolt – my monitors acts as my KVM), but plugging it directly into a USB-A expansion card on the laptop didn’t improve the situation.

It shows up in lsusb like this:

Bus 001 Device 016: ID 1852:7022 GYROCOM C&C Co., LTD Fiio E10

What commands can I run to provide more debugging info about this?

You could try lsusb -t that’ll show you the connection speed.

I do find it a little hard to belie you can saturate even usb2 with audio. Even the ridiculous (for playback, for studio recording it makes some sense) 24bit 192khz advertised comes you to just 4.6Mbit x2 for stereo is 9.2Mbit, usb2 has a bandwidth of 480Mbit, even with 1000% overhead you aren’t scratching bandwidth limitations. However those 480mbit are shared between all usb2 devices connected to that port but since directly connecting it didn’t solve it that’s also not it.

Are the stutters only audio or the whole system? I did have tpm stutter issues on my amd desktop a while ago but that made everything stutter.

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/5p, 480M
    |__ Port 1: Dev 16, If 3, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 1: Dev 16, If 1, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 1: Dev 16, If 2, Class=Audio, Driver=snd-usb-audio, 12M
    |__ Port 1: Dev 16, If 0, Class=Human Interface Device, Driver=usbhid, 12M

12M does seem kinda low :thinking: but maybe that’s just normal.

I just plugged it into my old laptop (Dell XPS 13) to compare (which doesn’t stutter), and it reports the same 12M so that’s probably not the issue.

Yeah, I don’t seriously think that’s the issue, it was just my only hunch :man_shrugging: I don’t know where to look.

Only audio. The system is buttery smooth. Watching videos or streams (youtube, twitch) doesn’t show any dropped frames when the audio stutters happen (with the video stats/stats for nerds open).

That would mean it connected in usb1.1 mode. Still more than the theoretical 8.6Mbit it would need though.

Then it’s probably not tpm stutter, though tpm stutter also doesn’t drop frames as the whole system just kind of pauses.

Are you using the same audio settings on the dell as on the fw (like sample rate and depth and stuff)?

I’m just using it plug-and-play. I’m not sure how to change those. Gnome doesn’t really give me any obvious settings for that. Where should I look?

Good question, not sure how gnome handles audio.

The xps was running the same version of the same distro? If not could you try it with a live system of the same distro just to check if that is the issue?

Yes, both PopOS latest versions.

Well I am running out of ideas, I assume there is nothing suspicious in dmesg when the stutters happen?

I get stuff like this in dmesg -W, steady stream of it, one message every 10 seconds or so. I have no idea what this means, Google wasn’t too helpful (just found some stuff about raspberry pis, doesn’t seem exactly relevant)

[3019850.384126] retire_capture_urb: 4 callbacks suppressed
[3019880.901146] retire_capture_urb: 5 callbacks suppressed
[3019887.119153] retire_capture_urb: 5 callbacks suppressed
[3019922.251192] retire_capture_urb: 6 callbacks suppressed
[3019934.893216] retire_capture_urb: 6 callbacks suppressed
[3019945.674223] retire_capture_urb: 3 callbacks suppressed
[3019951.025223] retire_capture_urb: 1 callbacks suppressed
[3019956.683237] retire_capture_urb: 3 callbacks suppressed
[3019986.784259] retire_capture_urb: 3 callbacks suppressed