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.
SetCooperativeLevel()
? Ele retorna umHRESULT
valor qualquer que nãoDS_OK
seja o que pode indicar um problema.Respostas:
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:
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
fonte