Erro do DirectX com sistemas XP mais antigos

8

Eu sou um programador cego, trabalhando em um jogo de áudio para cegos. Estou usando o SlimDX e ele foi testado em dezenas de sistemas, do XP ao Win 8.1. Meu código funciona bem na maioria dos sistemas, mas estou recebendo o seguinte erro em tempo de execução em alguns sistemas XP mais antigos:

vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:

DSERR_INVALIDCALL: esta chamada não é válida para o estado atual deste 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)

O mesmo erro é repetido para cada som que ele está tentando usar. Aqui está o código que estou usando para configurar o dispositivo DS:

dsDevice = Novo SlimDX.DirectSound.DirectSound

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

Sei que existem outros sinalizadores que podem ser definidos, mas essa configuração básica funcionou bem até agora, menos os sistemas XP mais antigos. Este é o meu primeiro post, por isso espero inseri-lo corretamente, caso contrário, por favor me avise, às vezes é difícil dizer onde você está ou deveria estar com um leitor de tela nos fóruns.

user3123309
fonte
3
Bem vindo ao site! Editei sua pergunta um pouco para alterar a formatação. Se você encontrar alguma dificuldade para usar o site, informe-nos na meta .
MichaelHouse
11
Qual é o resultado SetCooperativeLevel()? Ele retorna um HRESULT valor qualquer que não DS_OKseja o que pode indicar um problema.
congusbongus

Respostas:

1

Você deve verificar o resultado de SetCooperativeLevel ().

De acordo com a documentação da versão DirectSound8, estes são os possíveis valores de retorno:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALIZED
  • DSERR_UNSUPPORTED

Descubra qual deles você obtém primeiro. Talvez você tenha esquecido de inicializar o dispositivo de som?

Além disso, na seção de comentários, ele diz: "Não chame esse método se algum buffer estiver bloqueado".

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

bogglez
fonte