Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problemas con DirectSound

Iniciado por CoLSoN2, 08 de Diciembre de 2002, 03:58:22 AM

« anterior - próximo »

CoLSoN2

                                Estoy haciendo un par de clases para manejar el tema de sonido, una de ellas es la siguiente, que se ocupa de la inicialización de DSound:



class DLLEXPORT W3C_SND_Audio

{

public:

IDirectMusicPerformance8 *m_pDAPerf;

IDirectMusicLoader8 *m_pDALoad;



~W3C_SND_Audio() { Shutdown(); }

bool Init(HWND hwnd);

void Shutdown();

};



y W3C_SND_Audio::Init se define así:



bool W3C_SND_Audio::Init(HWND hwnd)

{

CoInitialize(NULL);



if (CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,

 IID_IDirectMusicPerformance8,(void **)m_pDAPerf) != S_OK)

 return false;



if (CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,

 IID_IDirectMusicLoader8, (void **)m_pDALoad) != S_OK)

 return false;



if (FAILED(m_pDAPerf->InitAudio(NULL, NULL, hwnd, DMUS_APATH_SHARED_STEREOPLUSREVERB,

 64, DMUS_AUDIOF_ALL, NULL)))

 return false;



// buscamos nuestro directorio de sonido

char soundPath[MAX_PATH];

GetCurrentDirectory(MAX_PATH,soundPath);

strcat(soundPath,"sound");

// convertimos el path a unicode

WCHAR wSoundPath[MAX_PATH];

MultiByteToWideChar(CP_ACP,0,soundPath,-1,wSoundPath,MAX_PATH);

// lo indicamos como path de busqueda

if (FAILED(m_pDALoad->SetSearchDirectory(GUID_DirectMusicAllTypes,

 wSoundPath, false)))

 return false;



return true;

}



Pues bien, en esa función, en el primer CoCreateInstance, peta el programa. Si lo quito, petaen el segundo. Y si quito los dos, peta al intentar cargar luego algún sonido ya que DSound no está inicializado.

Si quito todo el tema de sonido va bien.

Alguien sabe qué pasa?

P.D: sorry ethernet pero no hay shot esta vez :___(                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

Juan Mellado

Hola Colson.

¿Podrías ser más concreto cuando dices que "peta"? Seguro que alguien se anima a ayudarte si eres más concreto. ¿Qué código de error te retorna?, ¿o no te retorna error, y se produce un error del sistema? ...

En fin, ... he pegado tu código en el compilador, y ha habido suerte, me ha "cantado" el error él solito al compilar. Falta un amspersand (&) en cada una de las llamadas a CoCreateInstance, delante de las variables m_pDAPerf y m_pDALoad:

 

  if (CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,

     IID_IDirectMusicPerformance8,(void **)&m_pDAPerf) != S_OK)

     return false;

   

  if (CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,

     IID_IDirectMusicLoader8, (void **)&m_pDALoad) != S_OK)

     return false;



¿Tienes los warnings habilitados? Si no los tienes, te recomiendo que los actives, que compiles con el nivel más alto. Pueden serte de mucha ayuda.

Saludos.

CoLSoN2

                                si, era eso. ya lo habia solucionado.
con "petar" me refería a que simplemente termina la aplicación, sin mostrar ningún error.
y lo raro en mi caso es que no me advertiera de eso, teniendo los warnings habilitados. aunque eso sería un error y no un warning, ya que no puede castear de *TIPO a **TIPO (me lo ha mostrado otras veces XD)                                
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.