[alsa-devel] Distorted jackd output on Macbooks
Takashi Iwai
tiwai at suse.de
Tue May 8 17:04:07 CEST 2012
At Tue, 8 May 2012 16:45:30 +0200,
Adrian Knoth wrote:
>
> On Tue, May 08, 2012 at 01:01:32PM +0200, Takashi Iwai wrote:
>
> > > JFTR, we've seen users that report distorted sound on their macbooks
> > > when using jackd.
> > >
> > > The workaround is to force 16-bit output:
> > >
> > > http://jackaudio.org/macbook_distortion
> > >
> > > Chip in question was the Cirrus Logic CS4206. We don't know yet which of
> > > the formats (32/24) is broken, maybe only one, maybe both.
> >
> > Distrotion means noisy outputs or complete noise?
>
> Noisy output, like clipping. As if the MSB would be wrong.
>
> Here's an example:
>
> http://www.youtube.com/watch?v=QD23mC_Dbek
>
>
> > And does this happen only with JACK? That is, if you run "aplay -Dhw"
> > with 32bit PCM, does it play normally?
>
> I've installed Linux on my spare MacBookPro and can report that JACKD is
> not to blame. aplay and jackd behave the same:
>
> FLOAT_LE is distorted
> S32LE is fine
>
>
> So only FLOAT_LE is broken, S32LE and S24_3LE are fine.
OK, that's good to know. I didn't know that the codec supports the
float.
Maybe the whole support of the float format might be broken.
Looking through my collections of alsa-info.sh outputs, cs4206 is the
only one supporting the float format. If the support of float is
fundamentally broken, it's the reason only a few users of Mac faced
the problem with JACK.
I guess we can disable the support code for now like the patch below.
Could you check whether it works for you?
thanks,
Takashi
---
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 882bb3a..48c50dd 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3781,11 +3781,13 @@ int snd_hda_query_supported_pcm(struct hda_codec *codec, hda_nid_t nid,
bps = 20;
}
}
+#if 0 /* FIXME: CS4206 doesn't work, which is the only codec supporting float */
if (streams & AC_SUPFMT_FLOAT32) {
formats |= SNDRV_PCM_FMTBIT_FLOAT_LE;
if (!bps)
bps = 32;
}
+#endif
if (streams == AC_SUPFMT_AC3) {
/* should be exclusive */
/* temporary hack: we have still no proper support
More information about the Alsa-devel
mailing list