I realize we are in softlock, but I am going to be quite dissapointed
if the general notion is that audio is broken in 4.2 when the problem
comes from this widely used audio daemon.
greke:/usr/ports$ grep esound INDEX | wc -l
33
greke:/usr/ports$
--
[EMAIL PROTECTED]
SDF Public Access UNIX System - http://sdf.lonestar.org
On Thu, Aug 02, 2007 at 08:04:13PM +0000, Jacob Meuser wrote:
> On Thu, Jul 26, 2007 at 04:08:57AM +0200, Gareth wrote:
> > recently I updated my main desktop to -current (base and packages) from
> > -release (via snapshots) and I noticed problem with esound 0.2.38 (which I
> > need to use XMMS since my audio device is auich(4), only supporting 48khz
> > output) where it scratches and stutters a whole lot making most audio
> > unbearable. I was wondering if anyone else has had similar problems?
> > Also, esound 0.2.38 doesn't appear to read /etc/esd.conf any longer
> > (reading only ~/.esd.conf). I managed in a fully-unsupported and hackish
> > way to get back to 0.2.34 and it works fine so it isn't the hardware or
> > (as I initially thought) the changes to the kernel audio code recently.
> > I'm wondering if this is an esound problem (since they presumably don't
> > test too much on auich with bsd/sun audio over there) or an
> > openbsd-specific problem. Open to suggestions to fix this in a better
> > way.
>
>
> this is at least the second report of problems with esound.
>
> http://marc.info/?l=openbsd-ports&m=118405592003119&w=2
>
> both these reports pretty much peg esound as the problem.
>
> unfortunately, we have audio devices that only support 48kHz sampling
> rate, and such audio daemons are a necessary evil to be able to play
> CDs and the release songs correctly.
>
> is this still a problem? anyone else having problems?
>
> I looked over esound, and the following patch is all I can see that
> could even remotely be a problem with the audio interface.
>
> esound uses blocking writes. none of the changes I have made to
> audio affect blocking writes. if they did, almost every audio program
> would show symptoms.
>
> --
> [EMAIL PROTECTED]
> SDF Public Access UNIX System - http://sdf.lonestar.org
>
>
> - open() never blocks
> - set the blocksize to the size of data chunks we will receive.
> not necessary, but nicer.
>
>
> Index: Makefile
> ===================================================================
> RCS file: /home/cvs/OpenBSD/ports/audio/esound/Makefile,v
> retrieving revision 1.40
> diff -u -r1.40 Makefile
> --- Makefile 26 Jun 2007 17:10:29 -0000 1.40
> +++ Makefile 2 Aug 2007 19:42:08 -0000
> @@ -4,6 +4,7 @@
> COMMENT= "sound library for Enlightenment"
>
> DISTNAME= esound-0.2.38
> +PKGNAME= ${DISTNAME}p0
> SHARED_LIBS += esd 2.38 # .2.38
> CATEGORIES= audio
> MASTER_SITES= ${MASTER_SITE_GNOME:=sources/esound/0.2/}
> Index: files/audio_sun.c
> ===================================================================
> RCS file: /home/cvs/OpenBSD/ports/audio/esound/files/audio_sun.c,v
> retrieving revision 1.3
> diff -u -r1.3 audio_sun.c
> --- files/audio_sun.c 25 Jan 2004 22:07:28 -0000 1.3
> +++ files/audio_sun.c 2 Aug 2007 19:42:08 -0000
> @@ -63,8 +63,6 @@
> info.mode = AUMODE_PLAY;
> }
>
> - mode |= O_NONBLOCK;
> -
> /* open the sound device */
> device = esd_audio_device ? esd_audio_device : "/dev/audio";
> if ((afd = open(device, mode, 0)) == -1) {
> @@ -72,10 +70,6 @@
> return( -2 );
> }
>
> - mode = fcntl(afd, F_GETFL);
> - mode &= ~O_NONBLOCK;
> - fcntl(afd, F_SETFL, mode);
> -
> /* set the requested mode */
> if(ioctl(afd, AUDIO_SETINFO, &info) < 0) {
> sun_panic(afd, "AUDIO_SETINFO");
> @@ -132,6 +126,20 @@
> if(ioctl(afd, AUDIO_SETINFO, &info) < 0 ||
> fabs(info.play.sample_rate - esd_audio_rate) > esd_audio_rate * 0.05) {
> fprintf(stderr, "Unsupported rate: %i Hz\n", esd_audio_rate);
> + sun_panic(afd, "SETINFO");
> + return(-1);
> + }
> +
> + /* OSS interface sets the blocksize to 256 bytes, but esound
> + * actually uses 8192 byte blocks for 16-bit encodings and 4096
> + * byte blocks for 8-bit encodings.
> + */
> + if (enc.precision == 16)
> + info.blocksize = 8192;
> + else
> + info.blocksize = 4096;
> + if(ioctl(afd, AUDIO_SETINFO, &info) == -1) {
> + fprintf(stderr, "Unsupported blocksize: %d\n", info.blocksize);
> sun_panic(afd, "SETINFO");
> return(-1);
> }
>