Date: Fri, 13 Aug 2004 11:12:30 -0400 From: Mathew Kanner <mat@cnd.mcgill.ca> To: Peter Wood <peter@alastria.net> Cc: freebsd-chat@freebsd.org Subject: Re: FreeBSD pcm(4) latency (From write() to audible output) Message-ID: <20040813151230.GB280@cnd.mcgill.ca> In-Reply-To: <411C9FE9.3000905@alastria.net> References: <411C9FE9.3000905@alastria.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 13, Peter Wood wrote: > I'm currently in the middle of writing an automated radio playout system > for a northern student radio station in the UK (post SBN liquidation). > > I have the requirement of it running on a *nix system. I'm a large BSD > advocate between our friends, so would prefer not to use Linux. > > The system design consists of a daemon for each soundcard used in the > studio. I'm currently in the process of writing this daemon. > > I've found that there is about a 800ms delay between the output data > being written to /dev/dsp and being able to hear the output from the > soundcard on FreeBSD. I'm working to a 200ms deadline. > > I'm opening the soundcard with: > > audio_fd = open((char *) device, O_WRONLY | O_FSYNC | O_DIRECT); > > I've used O_DIRECT and O_FSYNC to try and get rid of this delay, but > alas that didn't work, device is cast as it's coming from a void * > (thanks to pthread_create ;). > > The daemon outputs blocks of 0 when there is no actual audio to output > so the sound card is always fed. > > While this isn't a problem for mpg123, it is for this application. I've > tried to find where the delay is, however I haven't had any luck. > > Could anyone knowledgable let me know if there's any hope for getting > rid of it (hacking the kernel is fine ;) or if I should "give up" and go > to linux? > > I suppose Linux does have ALSA which claims 2.6ms latency but I was > hoping to just use OSS. Oh well. > > For reference the test machine is a 2.2Ghz machine with a AC97 chip > (yeah crap I know, studio playout machines will probably have a Creative > card) running 4.10-STABLE (Yeasturday's cvsup). > > My appologies if this isn't the right place, I'm happy to go pester else > where. Heh. Freebsd-multimedia would be the right place. I think what you want is a smaller block size. The SNDCTL_DSP_SETBLKSIZE should be the right IOCTL to use, check out the oss programmers manual, I don't have a link right now but google should find it pretty quick. --Mat -- Applicants must also have extensive knowledge of UNIX, although they should have sufficiently good programming taste to not consider this an achievement. - MIT AI Lab job ad in the /Boston Globe/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040813151230.GB280>