[pulseaudio-discuss] Google ChromeOS reinventing the wheel, ignoring PulseAudio
pierre-louis.bossart at linux.intel.com
Fri Oct 7 14:31:20 PDT 2011
> Makes sense, I'll take a look at what pacat is actually filling the
> buffer attributes with and see if I can track this down.
here are some additional explanations. Hang on to your hat, this isn't
pacat has this 'process-time-msec' parameter which defines the min_req
value (not a very good parameter name I agree). I just tried on my
fedora15 box and I can get a latency below 20ms without any issues:
paplay -v --latency-msec=20 --process-time-msec=1 viol-1mn.wav
Time: 3.703 sec; Latency: 15173 usec.
The log also shows:
Final latency 20.00 ms = 9.00 ms + 2*1.00 ms + 9.00 ms
Indeed if you don't specify a value for minreq this parameter will be
set to 20ms, and then there's some logic in protocol-native.c to make
sure the latency is 2x the minreq buffer, hence the results you saw. Not
a bug but a feature I'd say...
If you want to control the audio latency in a meaningful way for speech
processing integration, and I guess this is what you are after, you
should start with the desired interval between audio wakes, say 5ms.
This means that a buffering of 10ms in the ALSA ring buffer, and there
will be an additional 10ms buffer in the server. Then you add 2* minreq
to find the total latency.
If you take the reverse path, if you set minreq to 1ms and tlength to
10ms, this means you will have an audio event every 2ms (10-2*1)/2/2.
Note that this logic doesn't apply for larger buffers, this only works
when the latency is below the default watermark level.
Will try to look into cpu usage. One good pointer is to look at
pytimechart (http://gitorious.org/pytimechart), it's a very useful tool
to see graphically what goes on in the system. You can capture a frace
and look at it on your development system. Everyone I know at Intel uses
it to find spurious wakes and silly system behavior. I actually verified
the interval between audio wakes with this tool.
> Also in default.pa you load the alsa-sink/source by hand yet
> module-detect. This looks odd, it's either one or the other?
> hand loading was just a quick hack to avoid using the alsa "default"
> interface which was going through dmix and wasting cycles. It's weird
> but I don't think it should hurt performance once it's up and running.
Yes there are issues when using the alsa-lib devices. You will face the
same problem with the 'front' device. If you are using alsa mixer
profiles, I suggest you remove the 'front' device and hard-coded to
hw:0, this will remove the need for changes in init files.
More information about the pulseaudio-discuss