On 2014-10-22 18:21, Alexander E. Patrakov wrote: > Of course, this only applies to ALSA devices that can't use tsched, as > well as to OSS on more exotic platforms. > > This is needed for compatibility with Wine games that use DirectSound8 > on distributions such as Arch Linux who don't accept the unofficial > winepulse patch. The reason is that Wine DirectSound8 emulation requests > a period of 10 ms and expects it to work for the purposes of timing. And > in fact, it cannot know (via ALSA API) that it is not going to work! > > A known malware-free test application is Foobar2000 version 1.2. Later > versions no longer use DirectSound. > > This issue is not going to be fixed on the Wine side, because the audio > subsystem in Wine is not really maintained, and the maintainer has > already privately expressed some negative thoughts about the state of > the linux audio ecosystem in general. > > The correct solution (at least from the "isolate the clients from > hardware limitations as thoroughly as possible" viewpoint) would be to > consume audio from sink inputs using a timer if the actual sink does not > provide sufficiently small minreq. In other words, adapt tsched to BATCH > cards and drop non-tsched. But that's a whole project. So, as a stopgap > solution for running Wine games on e.g. USB audio (which is a topic that > pops up regularly on #pulseaudio IRC channel), let's reduce the default > fragment size to a value suitable for unpatched Wine. > > Regarding the value: on my system, for mp3 playback through Foobar2000, > 8ms fragments work, 9ms fragments result in constant underruns. > > Wine wiki recommends 5ms. > > On devices that can use tsched, there is no problem. On Ubuntu, since before my time, this has been the default: default-fragments = 8 default-fragment-size-msec = 10 ...so 8 x 10 = 80 ms. If you end up with 5 x 4 = 20 ms, I think that's a bit too short/sensitive, we should then increase the number of periods to 16 or at least 8 in the same go, so you'll end up with something above 50 ms in total. I think this could help against underruns caused by inoptimal scheduling. I discussed this with Alexander briefly on Linuxcon, and I'm not opposed to lowering the fragment-size parameter. I have not looked into the wine DirectSound driver, but if it requires a period size of 10 ms, why does not 10 ms work? Also, how well does wine work with non-ALSA sinks, such as bluetooth, tunnel sinks, etc? > > Signed-off-by: Alexander E. Patrakov <patrakov at gmail.com> > --- > man/pulse-daemon.conf.5.xml.in | 4 ++-- > src/daemon/daemon-conf.c | 2 +- > src/daemon/daemon.conf.in | 2 +- > 3 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/man/pulse-daemon.conf.5.xml.in b/man/pulse-daemon.conf.5.xml.in > index 8bd076d..ff54435 100644 > --- a/man/pulse-daemon.conf.5.xml.in > +++ b/man/pulse-daemon.conf.5.xml.in > @@ -463,8 +463,8 @@ USA. > </option> > <option> > <p><opt>default-fragment-size-msec=</opt>The duration of a > - single fragment. Defaults to 25ms (i.e. the total buffer is thus > - 100ms long).</p> > + single fragment. Defaults to 5ms (i.e. the total buffer is thus > + 20ms long).</p> > </option> > > </section> > diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c > index b7a85aa..6dc15cf 100644 > --- a/src/daemon/daemon-conf.c > +++ b/src/daemon/daemon-conf.c > @@ -96,7 +96,7 @@ static const pa_daemon_conf default_conf = { > .lock_memory = false, > .deferred_volume = true, > .default_n_fragments = 4, > - .default_fragment_size_msec = 25, > + .default_fragment_size_msec = 5, > .deferred_volume_safety_margin_usec = 8000, > .deferred_volume_extra_delay_usec = 0, > .default_sample_spec = { .format = PA_SAMPLE_S16NE, .rate = 44100, .channels = 2 }, > diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in > index 5b20130..3d758cd 100644 > --- a/src/daemon/daemon.conf.in > +++ b/src/daemon/daemon.conf.in > @@ -85,7 +85,7 @@ ifelse(@HAVE_SYS_RESOURCE_H@, 1, [dnl > ; default-channel-map = front-left,front-right > > ; default-fragments = 4 > -; default-fragment-size-msec = 25 > +; default-fragment-size-msec = 5 > > ; enable-deferred-volume = yes > ; deferred-volume-safety-margin-usec = 8000 > -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic