Mailing-List: contact cygwin-apps-help AT sourceware DOT cygnus DOT com; run by ezmlm Sender: cygwin-apps-owner AT sourceware DOT cygnus DOT com List-Subscribe: List-Archive: List-Post: List-Help: , Delivered-To: mailing list cygwin-apps AT sources DOT redhat DOT com From: "Ralf Habacker" To: Subject: RE: [ANNOUNCEMENT] cygwin patch for xfree game rocks & diamonts available Date: Tue, 16 Oct 2001 16:39:03 +0200 Message-ID: <001d01c15650$4cef2d00$651c440a@BRAMSCHE> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Importance: Normal In-Reply-To: <20011016090023.E6725@redhat.com> > > On Tue, Oct 16, 2001 at 08:27:43AM +0200, Ralf Habacker wrote: > >4. cygwin uses a fixed buffer size of 16384. r&d like to use a 512 > byte buffer, > >which cygwin does ignore. > > This causes delay in 1. > > That sounds fixable. How is the buffer size controlled on linux? > Below is a part from src/libgame/sound.c of the rocks&diamonds source distribution, which initialize the sound. The size is set with ioctl(SNDCTL_DSP_SETFRAGMENT...) and later recalled with ioctl(SNDCTL_DSP_GETBLKSIZE...) . Ralf unsigned long fragment_spec = 0; /* determine logarithm (log2) of the fragment size */ for (fragment_spec=0; (1 << fragment_spec) < fragment_size; fragment_spec++); /* use two fragments (play one fragment, prepare the other); one fragment would result in interrupted audio output, more than two fragments would raise audio output latency to much */ fragment_spec |= 0x00020000; /* Example for fragment specification: - 2 buffers / 512 bytes (giving 1/16 second resolution for 8 kHz) - (with stereo the effective buffer size will shrink to 256) => fragment_size = 0x00020009 */ if (ioctl(audio.device_fd,SNDCTL_DSP_SETFRAGMENT,&fragment_spec) < 0) Error(ERR_EXIT_SOUND_SERVER, "cannot set fragment size of /dev/dsp - no sounds"); /* try if we can use stereo sound */ if (ioctl(audio.device_fd, SNDCTL_DSP_STEREO, &stereo) < 0) { if (ioctl(audio.device_fd, SNDCTL_DSP_SPEED, &sample_rate) < 0) Error(ERR_EXIT_SOUND_SERVER, "cannot set sample rate of /dev/dsp - no sounds"); /* get the real fragmentation size; this should return 512 */ if (ioctl(audio.device_fd, SNDCTL_DSP_GETBLKSIZE,&fragment_size) < 0) Error(ERR_EXIT_SOUND_SERVER, "cannot get fragment size of /dev/dsp - no sounds"); max_sample_size = fragment_size / (stereo ? 2 : 1); }