[PATCH v2] Behringer UFX1604 / UFX1204: get rid of unneeded implicit feedback and pops and clicks while on 96000hz

Geraldo Nascimento geraldogabriel at gmail.com
Tue Apr 13 01:09:07 CEST 2021


Sorry, Dr. Iwai, the truth is that I refuse to install PulseAudio in my
production systems, so I can't comment. To be sure you'd have to ask in
bugzilla #199327

Always a pleasure to work and learn with you, splitting the commits seems
like the ideal choice.

I do hope the fixes work out for others as I put a lot of time in tracking
the problem. Let's hope for the best.

Thank you,
Geraldo

Em Seg, 12 de abr de 2021 07:14, Takashi Iwai <tiwai at suse.de> escreveu:

> On Sat, 10 Apr 2021 22:27:15 +0200,
> Geraldo Nascimento wrote:
> >
> > OK, Dr. Iwai, only briefly tested but at least on my setup, JACK starts
> at
> > 96000hz and I am able to record my voice in Ardour 6, with no pops and
> clicks
> > detected.
> >
> > I'll record a full acapella just to be sure, but these 96000Hz pops and
> clicks
> > I used to experience - with that implicit feedback hack on by the way -
> tended
> > to be evident within seconds, not intermittent and very annoying.
> >
> > Now I turned the implicit feedback hack off for both the UFX1604 and the
> > UFX1204 on my tree and with your two lines of code I have crystal clear
> sound.
> >
> > I took the liberty to comment your clever hack inside clock.c and the
> pops /
> > clicks problem reappears on 96000Hz. PulseAudio users (see
> > https://bugzilla.kernel.org/show_bug.cgi?id=199327 ) will generally run
> at
> > 44100Hz and won't be affected so much by noise because the clock
> selector will
> > be "tied" to the standard 48000Hz of these mixer desks DAC, in that
> invalid
> > state but close enough to the main clock rate.
> >
> > Henceforth the general confusion where people complain the forced
> implicit
> > feedback made PulseAudio break for their UFX1604 / UFX1204, but they do
> not
> > experience noise. This approach should solve both problems by disabling
> > implicit feedback on the synchronous endpoints but making sure the sound
> is
> > crystal clear even at 96000Hz.
>
> Is the PA breakage still seen in the very latest kernel?  There have
> been a few issues due to the changes but they should have been already
> covered.
>
> Apart from that, the choice of implicit feedback was taken at the
> commit 5e35dc0338d8 in a few years ago for UFX1024.  I don't remember
> the details, but judging from the lsusb output, the devices don't look
> like a typical device that requires the implicit feedback (that has
> usually ASYNC for both directions).  So, as long as it's confirmed
> that the proper clock selector setup fixes the problem, we can drop
> the implicit feedback quirks.
>
> However, it's better to split the patches; one for the fix for the
> missing clock selector setup, another is the drop of the implciit fb
> quirk for Behringer devices.
>
> In anyway, let's see whether the fix works for others.  Then we can go
> forward and apply the fixes to the upstream.
>
>
> thanks,
>
> Takashi
>
> >
> > Thank you,
> > Geraldo
> >
> > Em Sáb, 10 de abr de 2021 05:59, Takashi Iwai <tiwai at suse.de> escreveu:
> >
> >     On Sat, 10 Apr 2021 03:36:14 +0200,
> >     Geraldo Nascimento wrote:
> >     >
> >     > More complete patch disabling unneeded implicit feedback and
> setting
> >     > clock selector to default clock on rate change for UFX1604
> >     >
> >     > After re-reading
> https://bugzilla.kernel.org/show_bug.cgi?id=199327 it
> >     > is even more clear to me that implicit feedback for the
> >     > UFX1604/UFX1204 needs to be disabled.
> >     >
> >     > This is a more complete patch that disables that and for the
> UFX1604
> >     > only sets the clock selector to its pin 1 default clock synced to
> the
> >     > USB SOF upon rate change. This is needed because apparently the
> >     > endpoints are hardwired to the clock selector and after we change
> the
> >     > rate on the main USB SOF synced clock the clock selector is left
> in a
> >     > halfway state in regards to the sampling rate.
> >     >
> >     > That's why the pops and clicks aren't evident at stock 48000Hz,
> become
> >     > slightly audible at 44100Hz and detestable at 96000Hz. Seems the
> clock
> >     > selector needs a nudge or it will screw up the sync.
> >     >
> >     > Unfortunately I don't have access to the lsusb -v of the UFX1204
> soI'm
> >     > waiting for someone to share it here in the list or in the bugzilla
> >     > thread. This patch needs some more love from the community.
> >     >
> >     > ---
> >     >
> >     > This one has been bugging me for quite a while. I went deep hard in
> >     > the guts of ALSA to try to solve it, and it turned out to be a
> minor
> >     > thing apparently. The problem is old, and every UFX1604 Linux user
> can
> >     > attest that it's impossible to use 96000hz in DUPLEX mode without
> >     > annoying pops and clicks on the capture stream.
> >     >
> >     > The fix is simple: after we alter the CLOCK_SOURCE to match our
> sample
> >     > rate, let's tell the CLOCK_SELECTOR we want CLOCK_SOURCE 212
> (synced
> >     > to USB SOF) on pin 1. Solves the problem for me, no more pops and
> >     > clicks while on 96000hz.
> >     >
> >     > ---
> >     >
> >     > Signed-off-by: Geraldo Nascimento <geraldogabriel at gmail.com>
> >
> >     Thanks for the patch.
> >
> >     But we'd like to avoid the setup with a magic ID number.
> >     Judging from what it achieves, does the change like below give the
> >     similar effect?
> >
> >     We might need to apply it conditionally, so this is just meant for
> >     testing.
> >
> >     Takashi
> >
> >     --- a/sound/usb/clock.c
> >     +++ b/sound/usb/clock.c
> >     @@ -324,6 +324,8 @@ static int __uac_clock_find_source(struct
> >     snd_usb_audio *chip,
> >                     ret = __uac_clock_find_source(chip, fmt,
> >
> selector->baCSourceID[ret -
> >     1],
> >                                                   visited, validate);
> >     +               if (ret > 0)
> >     +                       uac_clock_selector_set_val(chip, entity_id,
> cur);
> >                     if (!validate || ret > 0 || !chip->autoclock)
> >                             return ret;
> >
> >
>


More information about the Alsa-devel mailing list