Saya seorang programmer buta, mengerjakan permainan audio untuk orang buta. Saya menggunakan SlimDX, dan telah diuji pada banyak sistem dari XP ke Win 8.1. Kode saya berfungsi pada sebagian besar sistem, tetapi saya mendapatkan kesalahan berikut saat runtime pada beberapa sistem XP yang lebih lama:
vupgraderacer.wav SlimDX.DirectSound.DirectSoundException:
DSERR_INVALIDCALL: Panggilan ini tidak valid untuk keadaan objek ini saat ini (-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)
Kesalahan yang sama diulang untuk setiap suara yang coba digunakan. Berikut adalah kode yang saya gunakan untuk mengatur perangkat DS:
dsDevice = New SlimDX.DirectSound.DirectSound
dsDevice.SetCooperativeLevel (OGw.Handle, SlimDX.DirectSound.CooperativeLevel.Normal)
Saya menyadari ada beberapa flag lain yang dapat diatur, tetapi pengaturan dasar ini telah bekerja dengan baik sejauh ini, minus sistem XP yang lebih lama. Ini adalah posting pertama saya, jadi harap saya memasukkannya dengan benar, jika tidak, tolong beri tahu saya, kadang-kadang sulit untuk mengatakan di mana Anda berada atau harus dengan screenreader di forum.
SetCooperativeLevel()
? Ia mengembalikan nilaiHRESULT
jadi apa pun selain yangDS_OK
mengindikasikan masalah.Jawaban:
Anda harus memeriksa hasil SetCooperativeLevel ().
Menurut dokumentasi versi DirectSound8, ini adalah nilai pengembalian yang mungkin:
Cari tahu mana yang Anda dapatkan pertama kali. Mungkin Anda lupa menginisialisasi perangkat suara?
Juga, di bagian komentar tertulis: "Jangan panggil metode ini jika ada buffer yang dikunci."
Documents: http://msdn.microsoft.com/en-us/library/windows/desktop/microsoft.directx_sdk.idirectsound8.idirectsound8.setcooperativelevel%28v=vs.85%29.aspx
sumber