[Openal-devel] Creative Labs and OpenAL

Daniel PEACOCK dpeacock at creativelabs.com
Thu Aug 23 15:45:19 PDT 2007





Hi Ed,

> So a game that uses OpenAL (OpenAL-Windows), which presents the DS3D
> ("Generic Hardware") device as the default, will fail to work on Vista,
> I'm guessing. Does the new Creative "OpenAL SDK" wrap_oal.dll or
> openal32.dll deal with this known problem or is the app/game expected to
> deal with it?

We've thought about this and tried to make everything work smoothly.   If
an application uses the Device Enumeration extension (recommended) then on
Vista the "Generic Hardware" device won't show up in the list of available
devices.  If you open the NULL device (or request the name of the default
device (ALC_DEFAULT_DEVICE_SPECIFIER) and open that) you will get a native
device if there is one (assuming the name matches Windows' preferred audio
output device), otherwise you will get "Generic Software" device.   (If you
have an application that is hardcoded to open the "Generic Hardware"
device, there is code in the wrap_oal.dll to automatically fallback to the
"Generic Software" device if the "Generic Hardware" device can't be used.

> It sounded like the IP is not the same code as the DS3D bits (which
should
> be pretty generic I'd guess), but rather, the EFX extension code, the
> reverb code, etc.

Yes, the IP is in the EAX and EFX extensions.

> Given what you said about DS3D not working on Vista due to the missing DS

> HAL, it would seem the router or the game needs to know to choose a
> "native" OpenAL device on Vista (if available) or fall back to "Generic
> Software" because "Generic Hardware", although presented by wrap_oal.dll,

> won't really work on Vista.  Conversely on XP, the normal wrap_oal.dll
> behavior of defaulting to "Generic Hardware" works for most sound cards,
> so there's no need to fall back to "Generic Software" unless there's some

> glitch in the drivers that the user encounters and they need to manually
> change to software mixing.  On XP, the router might see a "native"
device,
> but won't normally use it if wrap_oal.dll is available (i.e. it's the
only
> implementation on the system) and the game/app either opens the NULL
> device or the actual device name implemented in the DLL.
>
> Does the string name of the device (ALC_DEVICE_SPECIFIER I'm guessing)
> presented by ct_oal.dll et. al. show up as the literal string "native",
or
> some kind of product name like you'd see in the audio control panel?

It normally includes the name of the soundcard.  Ideally it should match
the name as it is displayed in the Microsoft Audio Control panel - but that
doesn't always happen ... esp. on Vista where the Windows audio device
names now include the output in the name, e.g "Speakers (Creative SB
X-Fi)".

> (I've never actually used a ct_oal.dll or other native driver yet - since

> my SBLive! 24-bit doesn't have one, and I don't think my old "SBLive!
> Value Edition" card has one either even though it's Emu10k1 based and
> actually does hardware 3D sound).

The Live! Value Edition may have a native ct_oal.dll component if you have
the most recent drivers.   However, I don't think it would include features
like OpenAL 1.1 or the EFX Extension for example.

> If there is more than one sound card in the system, what will the OpenAL
> router see and how could the user or game select between them?  For
> example, if I have an Audigy 4 PCI card, but also have my on-board AC97
> sound enabled too...

On Windows XP using the ALC_ENUMERATION_EXT you would see three devices - a
native Audigy device (e.g. "SB Audigy 4 [E000]"), "Generic Hardware" and
"Generic Software".   The "GH" and "GS" devices would output using whatever
you have selected as the preferred audio output device.  If your on-board
AC97 didn't support at least 16 hardware DS3D Buffers - then the "GH"
device will not be available.

In the most recent OpenAL SDK we added an alternative (not a replacement)
enumeration extension called ALC_ENUMERATE_ALL_EXT which is useful if you
want your application to control which AL device is used *and* on what
audio card.  This extension would give you 5 options - the native Audigy
device, "GH on Audigy 4", "GS on Audigy 4", "GH on AC-97", and "GS on
AC-97".

Vista would be the same but without the "GH" options.

Dan
Creative Labs, Inc.



More information about the Openal-devel mailing list