Mit der Audio API von XNA schlage ich mich ja schon länger herrum… Immer wieder erzeugen meine Versuche die Lautstärke zu ändern(auf gültige Werte versteht sich…) seltsamme Fehler. Ich hatte länger mit einer CrossThreadCallMessagingExeption zu kämpfen, bis sie auf einmal nicht mehr auftrat.
Ich hatte das Problem als erledigt abgetan. Heute kommt beim starten plötzlich ein Fehler: Die Zeile
SoundEffect.MasterVolume = 0.15f;
Erzeugt eine AccessViolationExeption!
Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
??? Was soll das denn heissen? Im Internet finden sich Hinweise, dass dieses Problem auftritt wenn man in .NET mit unsafe Code(sprich Zeigern) arbeitet und diese dann in auf Systemspeicher zeigen. Da .NET nicht für unsafe Code gemacht ist, geht es davon aus, dass der RAM einen Fehler hat und deshalb ein (interner) Zeiger kaputt ist.
Fazit? Da ich nicht mit Zeigern arbeite und mir keines Fehlers bewusst bin, gehe ich von einem Fehler in der XNA Audio API aus! Ein Blick auf den Stacktrace zeigt:
bei Microsoft.Xna.Framework.Audio.KernelSoundEffect.InitializeSingletonXAudio2()
bei Microsoft.Xna.Framework.Audio.KernelSoundEffect.SetMasterVolume(Single masterVolume)
bei Microsoft.Xna.Framework.Audio.SoundEffectUnsafeNativeMethods.SetMasterVolume(Single volume)
bei Microsoft.Xna.Framework.Audio.SoundEffect.set_MasterVolume(Single value)
bei tKoD.AudioManager.set_SFXVolume(Single value) in D:c_sharpProgrammeThe Kingdom of DarknesstKoDsonst. ManagerAudioManager.cs:Zeile 41.
bei Game1..ctor() in D:c_sharpProgrammeThe Kingdom of DarknesstKoDGame1.cs:Zeile 38.
bei tKoD.Program.Main(String[] args) in D:c_sharpProgrammeThe Kingdom of DarknesstKoDSonstige DateienProgram.cs:Zeile 13.
Das da tatsächlich etwas mit Unsafe im Spiel ist.
Da ich da wohl nichts machen kann warte ich auf einen Fix von Micrsoft…oder eine seltsamme Selbstheilung wie letztes mal…drückt mit die Daumen!