Yes! I finally got full duplex flawlessly working on my SB Live. It
appears that it was the full duplex test program I've been using. There
were 2 problems:

1. I decided to modify what Jaroslav had sent me by polling separately
on the input and output descriptors in the order that was expected. This
caused missed overruns and things to just generally be wrong.

2. For some reason enforcing the order in which read/writes are done
from the input/output (accomplished by an integer that toggled between 0
and 1) caused the input stream available size to slowly increase.

I'm not sure why #2 is the case, but by processing the input and output
when they are available (rather than ensuring the processing order)
everything stays synced. The results are a vast improvement over the
previous tests I did. Some stress testing still causes some buzzing and
clicks to be heard though. Since I'm running both streams in NONBLOCK
mode I'm curious when the initial write of 2 fragments of data to the
output returns. Does it return immediately, after 1 fragment is written
or after 2 fragments? This would determine where the playback and record
pointers are in reference to each other (if they share the same buffer).

I'll attach the current code for the full duplex test program I used.
Its not very general at the moment perhaps a real full-duplex test
program should be written for distributing with ALSA?
For detailed information uncomment the "#define HISTORY 1" which fills
up a history buffer until it gets to a certain size and then exits and
displays the results, piping through "less" is a good idea :)

-- 
    Josh Green
    Smurf Sound Font Editor (http://smurf.sourceforge.net)



_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to