[alsa-devel] alsaloop problems; ALSA streaming tutorial (resend)

frederik at ofb.net frederik at ofb.net
Wed Oct 24 10:01:20 CEST 2018


Dear Mark (cc'ing ALSA-user, ALSA-devel)

Thank you for your tutorial

http://www.pogo.org.uk/~mark/trx/streaming-desktop-audio.html

I found it helpful and clearly-written (although missing a "}" brace
and I think it should be "-P" instead of "-p"...).

I got as far as trying the 'alsaloop' example. It seems very finicky,
sometimes I am able to play a test.wav cleanly through the loopback
device, and sometimes there are a lot of crackles and I get errors
like

    playback hw:0: change avail_min=2968
    playback hw:0: change avail_min=2972
    playback hw:0: change avail_min=2976
    underrun for playback hw:0
      last write before 9.8370ms, queued 10.0000ms/0.0000ms -> missing -0.1630ms
      expected 10.0000ms, processing 0.1910ms, max missing 0.0443ms
      last wake 0.0350ms, last check 0.0350ms, avail_min 32.0000ms
      max buf 40.0000ms, pfilled 0.0000ms, cfilled 10.0000ms
      job started before 0.0110ms

For 'aplay' invocations where there are errors, it generally never
recovers; the whole (10 second) wav file is played with crackles and
errors being printed. I tried to figure out if this is due to some
different rate settings being chosen at random with each 'aplay'
invocation, but all the alsaloop debugging output looks the same
between working and non-working runs of aplay (except for the above
underrun errors). I also tried various settings for -A and -S in
'alsaloop', but nothing would alleviate this problem. The only thing
that fixes it is to change the latency '-t' setting to a higher value
than the default 10ms. However this seems like a bad solution, given
that it is able (50% of the time) to play a whole sound file at the
lower latency with no errors; I would rather have it recover from the
underruns when they happen, than increase the latency for every
invocation. Enabling realtime via the Arch Wiki info (a bit tricky as
I had to edit some of the files by hand) didn't change this behavior.

I also encountered a problem when trying to make alsaloop output to a
dmix device. I wanted to have it output to dmix so that I could use my
audio normally while experimenting with alsaloop. I got a "Poll FD
initialization failed." error:

    playback plug:hw0mix/capture hubcap sync type: CAPTRATESHIFT
    New pitch for playback plug:hw0mix/capture hubcap: 1.00000000 (min/max samples = 0/0)
    underrun for playback plug:hw0mix
      last write before 19.7440ms, queued -1.0000ms/-1.0000ms -> missing -1.0000ms
      expected 10.0000ms, processing 0.0290ms, max missing 0.0000ms
      last wake 1539883911239.1819ms, last check 19.6460ms, avail_min 2.5000ms
      max buf 250.0000ms, pfilled 0.0000ms, cfilled 0.0000ms
      job started before 0.0310ms
    Poll FD initialization failed.

Is this error understood? I would have thought that enough others
would also have been wanting to use alsaloop in such a simple
configuration, to warrant a better error message.

I'm somewhat confused by the alsaloop manual page, my version says it
is from "5 Aug 2010" but it has glaring errors, it says "-B" is a
synonym for "--buffer" but alsaloop tells me "alsaloop: invalid option
-- 'B'". Also it says that I can use "-c" to set both channels and
rate. Are these typos really unfixed for eight years?

Here are the commands I used:

$ alsaloop -C hubcap -P hw:0 -v -v -U |& tee alsaloloop.out
...
$ aplay -v test.wav |& tee aplay.out
...
$ cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version k4.14.71-1-lts.

The earlier version of this email had output files attached, but they
caused the message to be held for "moderator approval". Here are some
HTTP versions of the same files:

alsaloop.out: http://ix.io/1pUj
aplay.out: http://ix.io/1pUk
asound-remote (the config): http://ix.io/1pUl

I think I'll investigate network audio with JACK next but I wanted to
share my experiences in case there is something I'm doing wrong here,
or in case there are bugs that can be fixed in ALSA.

Thank you,

Frederick


More information about the Alsa-devel mailing list