winealsa.drv patch to enum all software devices from .asoundrc

Joerg-Cyril.Hoehle at t-systems.com Joerg-Cyril.Hoehle at t-systems.com
Wed Feb 22 04:42:13 CST 2012


Hi,

Chris Robinson wrote:
>> You forgot AUDCLNT_STREAMFLAGS_RATEADJUST since w7.
>Interestingly, this flag seems to only have an effect for already-initialized 
>streams. ALSA would need a way to adjust the rate of an opened device for this 
>to work.

My view on it is this: given that it's said to work in shared mode only, I believe
it gives limited access to MS' internal resampler device.  Output is still driven at
the mixer's nomimal rate, there's no need to adjust the rate of an open ALSA back-end.

IOW, if you were to implement winmm on top of mmdevapi in w7, here's what you'd do:
. Call Activate
. Call GetMixFormat
. If rate is different from requested, add AUDCLNT_STREAMFLAGS_RATEADJUST
. call Initialize
. If rate is different, call SetSampleRate

The native resampler adjusts the rates, the mixer adjusts bit width and whatever entity adjusts
the channel mapping (formerly the NT kernel mixer was said to do that).

I suppose MS' mmdevapi behaves like gstreamer as a sequence of audio filters and
converters. If you ask for a rate resampler, it'll plug one into the chain.  Plugging can
only be performed at initialization time, there's no further dynamic reconfiguration.

That's why I'll repeat once more and say that DSound's resampler should become that one.

My little knowledge about DSound's 3 initialisation modes (WRITE_PRIMARY etc.)
tells me it's compatible with such a scheme: there are restriction on when you're allowed to
invoke SetFormat on the Primary buffer.

Regards,
 Jörg Höhle



More information about the wine-devel mailing list