DirectSound and i810 soundcards

Francois Gouget fgouget at codeweavers.com
Tue Jan 7 14:25:43 CST 2003


Ove Kaaven wrote:
> On Mon, 6 Jan 2003, Francois Gouget wrote:
[...]
> Note that test results from Windows XP won't be very useful for this;
> under XP, dsound primary buffers doesn't map directly to the sound
> hardware any more, according to MSDN. If you create and use a dsound
> primary buffer under XP, it will just become another stream sent to XP's
> kernel-mode sound mixer, before it gets to the hardware.

Ah that probably explains some results I've seen then. Thanks.


>>I don't know why the mmap fails. I would tend to think this is a 
>>limitation or bug of the Alsa driver since it works with the OSS driver. 
> 
> ALSA has resampling features. If you open the sound device at e.g. 11kHz,
> then ALSA's OSS emulation will, instead of telling you that the chip is
> 48kHz, install a resampling filter to convert from 11kHz to the hardware's
> required 48kHz. Unfortunately, that filter gets in the way of direct
> access, making an mmap fail. (In WineX we test mmap on a range of common
> frequencies to work around this.)

Ok. That makes sense. That's sort of the opposite direction of the 
DirectSound patch I sent to wine-patches (and which just got applied). 
The annoying thing is that the mmap, the device format bubbling up and 
the CreateThread are all in different places :-(
Oh well, I'll try to come up with something. It seems hacking things to 
make mmap succeeds is the simplest approach. But what's the best approach?

  1. if we tweak things so that the mmap call succeeds then Wine will be 
making the resampling. And Wine is not really good at that and tends to 
introduce audible distortion. It probably doesn't matter if you start 
from an 8kHz signal but if you're playing a 44kHz sound...

  2. if we tweak things so that the CreateThread is done, then the 
resampling will be done by Alsa (or whichever back-end) which will 
presumably do it much better than us. howeve rin that case we have to 
make the almost never used case work and I'm not sure how well it would 
work anyway (I'm concerned about skips/cracks/pops).

To make 1. cleaner maybe we should have a Wine-specific message that 
asks the backend to return the formats supported by the device, i.e. for 
OSS returning an exact translation of the value returned by 
SNDCTL_DSP_GETFMTS.
Then if our msacm gets improved to the Jack sound format conversion 
library we're golden... (what's the status of this btw?)


-- 
Francois Gouget
fgouget at codeweavers.com





More information about the wine-devel mailing list