Errore DirectX con sistemi XP precedenti


8

Sono un programmatore cieco, sto lavorando ad un gioco audio per non vedenti. Sto usando SlimDX ed è stato testato su dozzine di sistemi da XP a Win 8.1. Il mio codice funziona bene sulla maggior parte dei sistemi, ma visualizzo il seguente errore in fase di esecuzione su una manciata di sistemi XP precedenti:

vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:

DSERR_INVALIDCALL: questa chiamata non è valida per lo stato corrente di questo oggetto (-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)

Lo stesso errore si ripete per ogni suono che sta tentando di usare. Ecco il codice che sto usando per configurare il dispositivo DS:

dsDevice = Nuovo SlimDX.DirectSound.DirectSound

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

Mi rendo conto che ci sono altri flag che possono essere impostati, ma questa configurazione di base ha funzionato bene finora, meno i sistemi XP precedenti. Questo è il mio primo post, quindi spero di inserirlo correttamente, in caso contrario, per favore fatemi sapere, a volte è difficile dire dove siete o dovreste essere con uno screen reader nei forum.


3
Benvenuti nel sito! Ho modificato un po 'la tua domanda per cambiare la formattazione. Se riscontri difficoltà nell'utilizzare il sito, faccelo sapere su meta .
MichaelHouse

1
Qual è il risultato di SetCooperativeLevel()? Restituisce un HRESULT valore così diverso da quello che DS_OKpuò indicare un problema.
congusbongus,

Risposte:


1

È necessario verificare il risultato di SetCooperativeLevel ().

Secondo la documentazione della versione di DirectSound8, questi sono i possibili valori di ritorno:

  • DS_OK DSERR_ALLOCATED
  • DSERR_INVALIDPARAM
  • DSERR_UNINITIALIZED
  • DSERR_UNSUPPORTED

Scopri quale ottieni per primo. Forse hai dimenticato di inizializzare il dispositivo audio?

Inoltre, nella sezione delle osservazioni si dice: "Non chiamare questo metodo se i buffer sono bloccati".

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.