[Openal-devel] Openal Driver Issue on windows xp
slytron
slytron at gmail.com
Mon Nov 10 04:28:17 PST 2008
Please help,
I cannot seem to get openal 3d effect to work.
When I enumerate the devices using "ALC_ENUMERATION_EXT" and
ALC_DEVICE_SPECIFIER etc only
2 devices are listed .. Generic Hardware and Generic Software.
I have a gigabit motherboard with the Realtek audio driver.
The sounds play but with no position or distance effect.
Even with listen position 0,0,0 and orientation 0,1,0,0,0,1 and source
postion 100,0,0 or 0,0,100 and AL_REFERENCE_DISTANCE 1.0 and AL_MAX_DISTANCE
2.0 and AL_ROLLOFF_FACTOR 1.0
there is no attenuation of sound.
Thinking that it might be some kind of driver issue I bought a Sound Blaster
X-FiXtreme Audio Card
I removed the realtek drivers and disabled the on board audio then install
the sound blaster card
and drivers. still same result. I downloaded the Aug 2008 directx SDK and
installed it with same result
I played with the 3d sound example app in the directx SDK and it seams to
work fine.
Please help .. here is the code
RCODE SelectSndDevice( VxIrrBase * poMgr )
{
char deviceName[256] = {0};
char *defaultDevice=NULL;
char *deviceList=NULL;
if( alcIsExtensionPresent(NULL, (ALCchar*)"AL_EXT_MP3") == AL_TRUE )
{
log_msg( 0, "SelectSndDevice: openal MP3 extention available\n" );
}
else
{
log_msg( 0, "SelectSndDevice: openal MP3 extention is NOT available\n" );
}
char * devList[50];
int iDeviceCnt = 0;
int iDefaultDeviceIdx = 0;
if( alcIsExtensionPresent(NULL, (ALCchar*)"ALC_ENUMERATION_EXT") == AL_TRUE
)
{ // try out enumeration extension
ALCchar * deviceList = (char *)alcGetString(NULL, ALC_DEVICE_SPECIFIER);
//devList.numDevices = 0;
if( strlen(deviceList) )
{
//devList.numDevices=1;
defaultDevice = (char *)alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER);
//devList.numDefaultDevice = 0;
for( U16 numDevices = 0; numDevices < 16; numDevices++ )
{
devList[numDevices] = deviceList;
log_msg( 0, "SelectSndDevice: device found %s ", deviceList );
if (defaultDevice && strcmp(devList[numDevices], defaultDevice) == 0)
{
iDefaultDeviceIdx = numDevices;
}
deviceList += strlen(deviceList);
if (deviceList[0] == 0)
{
if (deviceList[1] == 0)
{
break;
}
else
{
iDeviceCnt++;
deviceList++;
}
}
}
}
}
return 0;
}
//---------------------------------------------------------------------------
//! initialize sound manager
RCODE VxSoundMgr::StartupSoundMgr( VxIrrBase * poMgr )
{
//RegisterWithSquirrelScripting();
m_poGameMgr = poMgr;
//=== setup audiere ===//
//m_poAudiereDevice = audiere::OpenDevice();
//if( ! m_poAudiereDevice )
//{
// log_msg( 0, "Could not open Audiere sound device" );
// vx_assert( false );
//}
//=== setup openal ===//
SelectSndDevice( m_poGameMgr );
m_poSndDevice = alcOpenDevice((ALchar*)"DirectSound3D");
if( m_poSndDevice == NULL )
{
log_msg( 0, "VxSoundMgr::StartupSoundMgr: Could not create DirectSound3D
Device\n" );
vx_assert( FALSE );
}
CheckForSndErrors();
int result[2];
//alcGetIntegerv( m_poSndDevice, ALC_MAJOR_VERSION, 4, &result[0]);
//alcGetIntegerv( m_poSndDevice, ALC_MINOR_VERSION, 4, &result[1]);
//log_msg( 0, "VxSoundMgr::StartupSoundMgr: OpenAl Version Major %d Minor
%d\n", result[0], result[1] );
//Create context(s)
m_poSndContext = alcCreateContext( m_poSndDevice, NULL );
if( m_poSndContext == NULL )
{
log_msg( 0, "VxSoundMgr::StartupSoundMgr: Could not create DirectSound3D
Context\n" );
vx_assert( FALSE );
}
CheckForSndErrors();
//Set active context
alcMakeContextCurrent( m_poSndContext );
CheckForSndErrors();
//alListenerfv( AL_ORIENTATION, (ALfloat*)&m_oSndListenOri);
CheckForSndErrors();
irr::core::vector3df v3fSrcPos( 0.0f, 0.0f, 100.0f );
irr::core::vector3df v3fListenPos( 0.0f, 0.0f, 0.0f );
ALfloat ori[6];
ori[0] = 0.0f;
ori[1] = 1.0f;
ori[2] = 0.0f;
ori[3] = 0.0f;
ori[4] = 0.0f;
ori[5] = 1.0f;
PlayTestSound( v3fSrcPos, v3fListenPos, ori,
"media/soundsnap/animal/Lion_growl_low_soft_01_SFXBible_ss00230.wav" );
// Clear Error Code
alGetError();
return 0;
}
//---------------------------------------------------------------------------
//! play test sound
void VxSoundMgr::PlayTestSound( irr::core::vector3df v3fSrcPos,
irr::core::vector3df v3fListenPos,
float * pf32Ori,
char * pFileName )
{
alListenerfv(AL_POSITION, (ALfloat*)&v3fListenPos);
alListenerfv(AL_ORIENTATION, (ALfloat*)pf32Ori);
VxSndSource oSndSrc;
oSndSrc.m_poMgr = m_poGameMgr;
oSndSrc.m_bAlLoop = true;
ALboolean loop;
loop = oSndSrc.m_bAlLoop;
alutLoadWAVFile( (ALbyte *)pFileName,
&oSndSrc.m_eAlFormatBuffer,
(void **) &oSndSrc.m_pAlBuffer,
(unsigned int *)&oSndSrc.m_iAlBufferLen,
&oSndSrc.m_iAlFreqBuffer,
&loop );
alGenSources(1, &oSndSrc.m_uiAlSource);
alGenBuffers(1, &oSndSrc.m_uiAlSampleSet);
alBufferData( oSndSrc.m_uiAlSampleSet,
oSndSrc.m_eAlFormatBuffer,
oSndSrc.m_pAlBuffer,
oSndSrc.m_iAlBufferLen,
oSndSrc.m_iAlFreqBuffer );
alSourcei(oSndSrc.m_uiAlSource, AL_BUFFER, oSndSrc.m_uiAlSampleSet);
alutUnloadWAV( oSndSrc.m_eAlFormatBuffer,
oSndSrc.m_pAlBuffer,
oSndSrc.m_iAlBufferLen,
oSndSrc.m_iAlFreqBuffer);
//oSndSrc.SetPosition( v3fSrcPos );
alSource3f(oSndSrc.m_uiAlSource, AL_POSITION, v3fSrcPos.X, v3fSrcPos.Y,
v3fSrcPos.Z );
// set the pitch
alSourcef( oSndSrc.m_uiAlSource,AL_PITCH,1.0f);
// set the gain
alSourcef( oSndSrc.m_uiAlSource,AL_GAIN,1.0f);
// AL_REFERENCE_DISTANCE f, fv, i, iv the distance under which the volume
// for the source would normally drop by half (before being influenced
// by rolloff factor or AL_MAX_DISTANCE)
alSourcei( oSndSrc.m_uiAlSource, AL_SOURCE_RELATIVE, AL_FALSE );
alSourcef( oSndSrc.m_uiAlSource, AL_REFERENCE_DISTANCE, 1.0f );
alSourcef( oSndSrc.m_uiAlSource, AL_MAX_DISTANCE, 2.0f );
alSourcef( oSndSrc.m_uiAlSource, AL_ROLLOFF_FACTOR, 1.0f );
//oSndSrc.Enable3DEffect( TRUE );
// set looping
alSourcei( oSndSrc.m_uiAlSource, AL_LOOPING, AL_TRUE );
// play sound
alSourcePlay( oSndSrc.m_uiAlSource );
}
--
View this message in context: http://www.nabble.com/Openal-Driver-Issue-on-windows-xp-tp20405775p20405775.html
Sent from the OpenAL - Dev mailing list archive at Nabble.com.
More information about the Openal-devel
mailing list