[pulseaudio-discuss] Uber-early glitch-free Testing Results
Sean McNamara
smcnam at gmail.com
Wed Apr 16 10:35:37 PDT 2008
Hello all,
I know glitch-free is still under heavy development, but I took a stab
at it today after reading some of the latest commits. I've had very good
results already and wanted to thank Lennart and co. for the progress on
glitch-free. I'll summarize my efforts in (1) building, (2) configuring
and (3) using, and the results of these efforts.
Ah, and my system is Ubuntu 8.04, x86_64, ALSA 1.0.16* with integrated
HDA Intel sound. It's an 82801H (ICH8 Family).
(1) Everything built fine out of SVN with all dependencies enabled
except LIRC.
*: Unfortunately, Ubuntu 8.04 is going to ship with only ALSA 1.0.15,
due to their freeze dates policy. I downloaded and installed
alsa-drivers, alsa-lib and alsa-plugins 1.0.16 from alsa-project.org,
which took about 10 minutes. It's an easy build...
(2) Configuration was pretty easy. I looked through default.pa,
daemon.conf and client.conf, but there were no new options since 0.9.10,
so I simply wiped out the default configurations with my customized
configuration files from PA 0.9.10. I use the system instance as 'pulse'
user, launching it as root (it quickly drops the privs, of course.)
(3)
a. One minor issue is that module-suspend-on-idle causes the PA daemon
to abort after a second or two of operation. I'm working on debugging
this to perhaps submit a patch, or at least isolate what's happening.
For now, I've disabled this module so I can forge ahead and test the
glitch-free functionality.
b. A moderate issue: On the server side, module-native-protocol-unix
aborts the server with an assertion failed if the name of a new stream
is NULL. So, whenever I went to play a stream, it would abort the
server. I tried giving it a forced name with paplay --stream-name, but
apparently the stream name isn't being passed to the
playback_stream_new() function in pulsecore/protocol-native.c.
Rather than remove the assertion (dangerous if other parts of the
program assume a valid stream name), I did a "quick hack" using GLib and
the uuidgen program: I fork off a uuidgen, trap its stdout, and wait for
it to terminate. Its stdout writes a uuid string, then the program
terminates. All of this was very easy because of the GLib function
g_spawn_command_line_sync. Definitely not production-quality hackage,
but it fixed the assertion so that the code path can continue! I just
wanted to get to the guts of the glitch-free core and put it through its
paces.
After re-building, it seems that the core really is working well. I
tested paplay, aplay (through the libasound2-pulse plugin), gstreamer
(pulsesink), and mpd, and all of them work as expected. Furthermore,
mixing of many sounds together works with very low dropout rates, even
with programs that infamously crackle/dropout, like Pidgin playing
during music playback. And my hardware only has a 371ms hardware buffer
size:
Apr 16 12:02:02 vk6rms pulseaudio[5246]: module-alsa-sink.c: Using 2
fragments of size 32768 bytes, buffer time is 371.52ms
In Lennart's blog, he said the ideal hardware could have a much larger
buffer size (1 or 2 seconds). So considering my buffer size is pretty
limited in hardware, it's nice that I've only heard a very rare
click/pop noise (about one out of 100 IM beeps during music playback).
By comparison, PA 0.9.10 and earlier clicked or popped almost every time.
Also, CPU load with normal-priority processes has zero impact on dropout
rates. I've pegged my CPU for 10 minutes with the 'apcalc' program
calculating a huge exponent, and it takes 99% CPU in top, but pulseaudio
continues to do what it needs to do during its realtime-scheduled time
slices.
Overall, I'm very impressed with the progress on glitch-free, and there
is a very noticeable reduction in glitches with programs that frequently
create and terminate PA streams (such as IM programs). I'll be happy to
help work out the bugs in the peripheral modules and protocols to help
make this branch ready for user testing.
Of course, it's not ready until the actual authors of PA say it is. I'm
just an outside developer taking a peek in, anticipating the changes
coming down the pipe, and hoping to lend a hand if possible. :)
Best Regards,
Sean
More information about the pulseaudio-discuss
mailing list