Error de DirectX con sistemas XP anteriores

8

Soy un programador ciego, trabajando en un juego de audio para ciegos. Estoy usando SlimDX, y se ha probado en docenas de sistemas desde XP hasta Win 8.1. Mi código funciona bien en la mayoría de los sistemas, pero recibo el siguiente error en tiempo de ejecución en un puñado de sistemas XP más antiguos:

vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:

DSERR_INVALIDCALL: esta llamada no es válida para el estado actual de este objeto (-2005401550)

at SlimDX.Result.Throw[T](Object dataKey, Object dataValue)
at SlimDX.Result.Record[T](Int32 hr, Boolean failed, Object dataKey, Object dataValue)
at SlimDX.DirectSound.SecondarySoundBuffer..ctor(DirectSound device, SoundBufferDescription description)
at RR.Sound..ctor(String fileName)

Se repite el mismo error para cada sonido que intenta utilizar. Aquí está el código que estoy usando para configurar el dispositivo DS:

dsDevice = Nuevo SlimDX.DirectSound.DirectSound

dsDevice.SetCooperativeLevel (OGw.Handle, SlimDX.DirectSound.CooperativeLevel.Normal)

Me doy cuenta de que hay otros indicadores que se pueden configurar, pero esta configuración básica ha funcionado bien hasta ahora, menos los sistemas XP más antiguos. Esta es mi primera publicación, así que espero que la esté ingresando correctamente, de lo contrario, avíseme, a veces es difícil saber dónde está o debería estar con un lector de pantalla en los foros.

usuario3123309
fuente
3
Bienvenido al sitio! Edité su pregunta un poco para cambiar el formato. Si encuentra alguna dificultad para usar el sitio, háganos saber en meta .
MichaelHouse
1
¿De qué es el resultado SetCooperativeLevel()? Devuelve un HRESULT valor por lo que cualquier valor distinto de DS_OKpuede indicar un problema.
congusbongus

Respuestas:

1

Debe verificar el resultado de SetCooperativeLevel ().

De acuerdo con la documentación de la versión DirectSound8, estos son los posibles valores de retorno:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALIZED
  • DSERR_UNSUPPORTED

Averigua cuál obtienes primero. ¿Tal vez se te olvidó inicializar el dispositivo de sonido?

Además, en la sección de comentarios dice: "No llame a este método si hay buffers bloqueados".

Documentos: http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setcooperativelevel%28v=vs.85%29.aspx

bogglez
fuente