Clemens Ladisch wrote:
Carlo Florendo wrote:
Clemens Ladisch wrote:
However, I wish to be able to make the sequencer or player work without the use of the ALSA queue nor the workaround in (2).
Why?
Because the queue output and draining, AFAICS, is implemented in a blocking manner.
When non-blocking mode is set (see snd_seq_nonblock()), snd_seq_drain_output() does not block but writes only as many events to the kernel buffer as fit inside (or returns -EAGAIN if the kernel buffer is completely full).
Bingo! My recent tests show that snd_seq_nonblock() is indeed a useful function and enables me to have control of the sequencer every time it outputs an event :)
Gee, I've read the ALSA lib doc for months and never came across this function. Up to now, I've not seen the part of the doc that describes snd_seq_nonblock so I went straight to the source code of alsa-lib under src/seq/seq.c and grepped for snd_seq_block().
The alsa-lib docs have to be improved :)
Thank you for the pointers!
Regards, Clemens
Best Regards,
Carlo