DirectSound (Buffer3d)

Started by
0 comments, last by johnnyBravo 19 years, 6 months ago
Hi, I have some problems with Buffer3D. A time ago I have used directsound with no problem then I become cruious about 3d support(and where the problems begin). But then I encounter with an exception, I look around but can t see the problem. here is the portion code portion responsible from this problem :)

Buffer m_soundBuffer;
Buffer3D m_3dSoundBuffer;
..
..

BufferDescription desc = new BufferDescription();
desc.Control3D   = true;
desc.GlobalFocus = true;

// Below line is the cause of exception which says "Value does not fall within the expected range"					
m_soundBuffer = new Buffer(i_name, desc, i_sound.Device);
m_3dSoundBuffer	= new Buffer3D(m_soundBuffer);
m_3dSoundBuffer.Mode = Mode3D.Normal;

I am using vs.net2003, dx9c and my sound card is SBLive 5.1. Thanks in advance...
To be programmer or not...
Advertisement
ive wrapped up the creation code so all you haev to do is call the interface.

h
class ADX_API Sound3D {private:	LPDIRECTSOUND3DBUFFER g_pDS3DBuffer;	DS3DBUFFER g_dsBufferParams;public:	Sound3D();		~Sound3D();	bool create(LPDIRECTSOUNDBUFFER sb);	LPDIRECTSOUND3DBUFFER getSound3DBuffer(){return g_pDS3DBuffer;}};class ADX_API Sound3DListener {private:	LPDIRECTSOUND3DLISTENER g_pDSListener;	DS3DLISTENER g_dsListenerParams;   public:	Sound3DListener();	~Sound3DListener();	bool create(LPDIRECTSOUND8 ds);	LPDIRECTSOUND3DLISTENER getSound3DListener(){return g_pDSListener;}};


cpp
bool Sound3DListener::create(LPDIRECTSOUND8 ds){	LPDIRECTSOUNDBUFFER pDSBPrimary = NULL;    DSBUFFERDESC        dsbdesc;    ZeroMemory( &dsbdesc, sizeof(DSBUFFERDESC) );    dsbdesc.dwSize = sizeof(DSBUFFERDESC);    dsbdesc.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_PRIMARYBUFFER;	if( FAILED( ds ->CreateSoundBuffer( &dsbdesc, &pDSBPrimary, NULL ) ) )	{		return false;	}  	if( FAILED(  pDSBPrimary->QueryInterface( IID_IDirectSound3DListener,                                                   (VOID**)&g_pDSListener ) ) )    {        SAFE_RELEASE( pDSBPrimary );		return false;	}		SAFE_RELEASE( pDSBPrimary );	if(FAILED(g_dsListenerParams.dwSize = sizeof(DS3DLISTENER)))		return false;	if(FAILED(g_pDSListener->GetAllParameters( &g_dsListenerParams )))		return false;	return true;}Sound3DListener::Sound3DListener(){	g_pDSListener = NULL;}Sound3DListener::~Sound3DListener(){	if(g_pDSListener)	{		g_pDSListener->Release();		g_pDSListener = NULL;	}}Sound3D::Sound3D(){	g_pDS3DBuffer=NULL; }Sound3D::~Sound3D(){	if(g_pDS3DBuffer) { 		g_pDS3DBuffer->Release(); 		g_pDS3DBuffer=NULL; 	}}bool Sound3D::create(LPDIRECTSOUNDBUFFER sb){	if(FAILED(sb->QueryInterface(IID_IDirectSound3DBuffer, 												(VOID**)&g_pDS3DBuffer )))		return false;			g_dsBufferParams.dwSize = sizeof(DS3DBUFFER);	if(FAILED(g_pDS3DBuffer->GetAllParameters( &g_dsBufferParams )))		return false;	g_dsBufferParams.dwMode = DS3DMODE_HEADRELATIVE;	if(FAILED(g_pDS3DBuffer->SetAllParameters( &g_dsBufferParams, DS3D_IMMEDIATE )))		return false;			DSBCAPS dsbcaps;	ZeroMemory( &dsbcaps, sizeof(DSBCAPS) );	dsbcaps.dwSize = sizeof(DSBCAPS);		if(FAILED(sb->GetCaps( &dsbcaps )))		return false;		return true;}

This topic is closed to new replies.

Advertisement