[alsa-devel] Some functionality of ice1724 broken between 1.0.14.RC1 and 1.0.14.RC3
Takashi Iwai
tiwai at suse.de
Fri Jul 13 15:33:28 CEST 2007
At Fri, 13 Jul 2007 06:23:26 -0700,
stan wrote:
>
> Hi,
>
> This is going to be fairly long because of the explanations needed, but
> there are three problems I've found on my Revolution 5.1 between Alsa
> 1.0.14.RC1 and 1.0.14.RC3.
Could you check whether the same problem still exists on 1.0.14 final?
There are tons of changes since rc3, so debugging rc3 is just a waste
of time.
> 1. Support for high sample rates 96000 and 192000 was lost.
> 2. Sound distortion at high sound frequencies was introduced.
> 3. The maximum buffer size seems too small for high sample rates (not
> related to release candidate).
>
> Overview
> On Fedora 6 the alsa version is 1.0.14.RC1. Using that version,
> my application can use the high frequencies and there is no distortion
> introduced at high frequencies. On Fedora 7 the alsa version is
> 1.0.14.RC3. I can't use the high frequencies on the Revolution 5.1
> and there is distortion introduced into the sound at high frequencies.
> In investigating this I noticed that the maximum buffer sizes seem
> small.
>
> 1.
>
> Here is the output from my app on Fedora 6 at 192000. (1.0.14.RC1)
> This works great!
>
> Minimum channels (1)
> Maximum channels (10000)
> Minimum rate (4000) Direction = 0
> Maximum rate (4294967295) Direction = -1
> Minimum period_time (10) Direction = 1
> Maximum period_time (2048000) Direction = 0
> Minimum period_size (0) Direction = 1
> Maximum period_size (4294967295) Direction = -1
> Minimum periods (0) Direction = 1
> Maximum periods (4294967295) Direction = 0
> Minimum buffer_time (1) Direction = 0
> Maximum buffer_time (4294967295) Direction = 0
> Minimum buffer_size (1)
> Maximum buffer_size (4294967294)
> Minimum tick_time (1000) Direction = 0
> Maximum tick_time (1000) Direction = 0
> Actual rate (192000) Direction = 0
> Actual channels (2)
> Actual period_size (8) Direction = 0
> Actual buffer_size (8192) <--- notice that this is reasonable
>
> Here is the output from my app on Fedora 7 at 192000. (1.0.14.RC3)
> This aborts while setting the hardware parameters with invalid argument.
>
> Minimum channels (1)
> Maximum channels (10000)
> Minimum rate (4000) Direction = 0
> Maximum rate (4294967295) Direction = -1
> Rate (48000) Direction = -1 Result = 0 <-- from test rate
> Rate (96000) Direction = -1 Result = 0
> Rate (192000) Direction = -1 Result = 0 <-- maximum for card hw
> Rate (384000) Direction = -1 Result = 0 <-- accepts invalid 384000
> Minimum period_time (21333) Direction = 1 <-- seems strange the same
> Maximum period_time (21334) Direction = -1
> Minimum period_size (85) Direction = 1
> Maximum period_size (91628833) Direction = -1
> Minimum periods (0) Direction = 1
> Maximum periods (17247242) Direction = -1
> Minimum buffer_time (1) Direction = 0
> Maximum buffer_time (4294967295) Direction = 0
> Minimum buffer_size (170)
> Maximum buffer_size (1466015503)
> Minimum tick_time (0) Direction = 0
> Maximum tick_time (4294967295) Direction = 0
> Actual rate (192000) Direction = 0
> Actual channels (2)
> Actual buffer_time (341333) Direction = 1
> Actual buffer_size (65536)
> Actual buffer_size (65536)
> Actual period_time (21333) Direction = 1
> Actual period_size (807872295) Direction = 1 <--- Note invalid period
> size
> Actual periods (21333) Direction = 1
> cannot set parameters (Invalid argument)
> Could not open the sound device
>
> The two are on the same hardware, just different OS versions. While
> investigating I switched from using size to time as the allocation
> mechanism without any effect (using the sample from pcm.c on alsa site).
>
> I did a diff on the ice1724.c driver (attached below) and noticed that
> there was a lot of cleanup done by making the structs and arrays of
> structs const. Could that possibly cause this problem by not allowing
> calculated values to be set? Don't know. 44100 and 48000 work.
No, consts shouldn't matter. (BTW, please use diff -up option at the
next time. That'll make it way easier to read a patch.)
> 2.
>
> I ran a frequency loudness test that is part of the app. It drops the
> frequency at 5 seconds intervals from 20 KHz to 5 Hz alternating. On
> Fedora 6 with 1.0.14.RC1 it works as expected. When above my hearing
> range I hear silence. When it gets to frequencies I can hear the sound
> is pure. On Fedora 7, this same app produces noise at frequencies I
> can't hear. This behavior is the same as the behavior I noticed with
> my emu10k1, ca0106 and CK8S sound cards on 1.0.14.RC1 as well as
> 1.0.14.RC3. I previously had ascribed this to bad/low quality sound
> chips; now I'm not so sure. In terms of sound quality the Rev 5.1
> ranks well. See the link
>
> http://compreviews.about.com/od/multimedia/tp/SoundCards.htm
>
> Exact same hardware produces different sound. Can't explain it.
> Can you? Can you fix it?
Might be alsa-lib dmix issue now used as default PCM? Which PCM
configuration are you using? Does the problem exist even if you use
"hw" (or "plughw") PCM explicitly?
> 3.
>
> While looking at the ice1724.c code I noticed that the maximum buffer
> size is 2**18. This seems small for an application today. I'm
> producing sound at 192000 frames per second (admittedly overkill
> though I like very smooth sound) using stereo doubles (16 bytes per
> frame). The maximum buffer size is only a fraction of my per second
> byte rate.
>
> Could you increase this?
Ditto.
thanks,
Takashi
More information about the Alsa-devel
mailing list