[Openal] OpenAL/DirectSound3D issue on Realtek/Intel HD
Garin Hiebert
garinh at cheesetoast.net
Thu Mar 24 08:54:09 PST 2005
> I've encountered an issue which appears to show up on Intel/Realtek HD
> Audio
> Boards when using "DirectSound3D" as the OpenAL "Device". If we exceed
> a set
> threshold (I narrowed it down to 15) of buffers then any of those
> buffers over
> that limit seem to have a different volume calculation to those under
> this
> threshold. When I say different volume calc, I mean that the final
> output vol
> is considerably louder on these buffers over this threshold than those
> below.
>
> I'm not sure whether this is a driver issue for these cards or a
> possible
> problem with how OpenAL allocates buffers, The hope is that someone
> will
> provide some explanation.
This pretty much _has_ to be a driver issue, since AL creates and makes
use of DS3D buffers in a consistent way -- there is no special handling
of a subset of the DS3D buffers. The only magic number used when
running the DS3D backend is a check to make sure that DS3D can provide
at least 16 DS3D buffers -- if not the implementation falls back to DS.
Hopefully when you are referring to a "set threshold of buffers" you
actually mean OpenAL sources -- because if the behavior is changing
based on how many OpenAL buffers are being created, then all bets are
off... (That certainly shouldn't happen -- you can have up to 65535 AL
buffers, and your system should be getting awfully slow before you hit
that limit.)
> It would be helpful to identify the underlying device being used by
> DirectSound3D. Is that possible with the OpenAL API?
Not within the API -- you'll have to build a debug version of AL and
track this down. The code you want is in alcOpenDevice --
openal/win/Alc/ALc.c. The device being opened is the default device
(whatever is the preferred audio device on the system's audio control
panel).
> It also would be helpful to know what this threshold is, a guestimate
> would be the number of hardware channels. If that is correct, is it
> possible to
> get the number of hardware channels using the OpenAL API?
Sort of -- you just create sources until AL stops giving you sources.
With the DS3D implementation, that number will be the same as DS3D's
GetMaxNum3DMonoBuffers.
Garin
More information about the Openal
mailing list