FreeBSD pcm(4) latency (From write() to audible output)
Peter Wood
peter at alastria.net
Fri Aug 13 06:28:21 PDT 2004
Moved from freebsd-chat:
Quick addition: Had a look through the questions archive, nothing jumped
out and answered this, but it's possible I missed something.
Good Morning,
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.
Many thanks,
Pete.
--
Peter Wood BSc (Hons) :: <peter at alastria.net> :: Tel +44 7974 799440
More information about the freebsd-questions
mailing list