Skip to content

Sound card: no feedback, so host and codec clocks drift (a tiny click about once a second at 44.1 kHz) #40

Description

@bdbarnett

The sound card advertises an explicit feedback endpoint and never sends anything on it (AUDIO_FEEDBACK_METHOD_DISABLED, see the comment in src/usbif_uac.c). So the host sends at its own nominal rate, and the board plays at its codec's. Nothing reconciles the two clocks.

Measured on the P4 panel from Windows over WASAPI exclusive, 2026-09-24 (the #37 work):

host rate host actually sent board's I2S consumed what happens
48 kHz 48,012–48,014 frames/s 24,012 Hz × 2 = 48,024 board slightly faster: now and then it runs dry and plays a short silence
44.1 kHz 44,129 frames/s 22,050 Hz × 2 ≈ 44,100 host faster: the pump's I2S write times out 7–8 times per 10 s, and each timeout drops samples

The ratio is a few hundredths of a percent, so it doesn't change pitch. You'd hear it as an occasional tiny click, at 44.1 kHz about once a second.

The comment in usbif_uac.c records why FIFO-count feedback was switched off: the pump drains the FIFO the instant a packet lands, so the level it regulates is meaningless. What's left is feedback computed from the I2S side, from DMA bytes consumed against the SOF clock, averaged slowly. uac_pump_clock() now counts the DMA bytes this would need.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions