Some programs (quake2 et al) do check for DSCAPS_EMULDRIVER and stop
to work. 'Adjust' caps flags accordingly.

diff --git a/multimedia/dsound.c b/multimedia/dsound.c
index 9f53374..bfb24a7 100644
--- a/multimedia/dsound.c
+++ b/multimedia/dsound.c
@@ -369,7 +369,7 @@
 ) {
 	caps->dwSize = sizeof(*caps);
 	caps->dwFlags = DSBCAPS_PRIMARYBUFFER|DSBCAPS_STATIC|DSBCAPS_CTRLALL|DSBCAPS_LOCSOFTWARE;
-	caps->dwBufferBytes = 0;
+	caps->dwBufferBytes = 65536;
 	caps->dwUnlockTransferRate = 0;
 	caps->dwPlayCpuOverhead = 0;
 	return DS_OK;
@@ -493,7 +493,7 @@
 	TRACE(dsound,"(flags=0x%08lx)\n",caps->dwFlags);
 
 	caps->dwSize = sizeof(*caps);
-	caps->dwFlags = DSCAPS_PRIMARYSTEREO|DSCAPS_PRIMARY16BIT|DSCAPS_EMULDRIVER|DSCAPS_SECONDARYSTEREO|DSCAPS_SECONDARY16BIT;
+	caps->dwFlags = DSCAPS_PRIMARYSTEREO|DSCAPS_PRIMARY16BIT|DSCAPS_SECONDARYSTEREO|DSCAPS_SECONDARY16BIT;
 	/* FIXME: query OSS */
 	caps->dwMinSecondarySampleRate = 22050;
 	caps->dwMaxSecondarySampleRate = 48000;
@@ -503,10 +503,12 @@
 }
 
 static ULONG WINAPI IDirectSound_AddRef(LPDIRECTSOUND this) {
+	TRACE(dsound,"(%p), ref was %d\n",this,this->ref);
 	return ++(this->ref);
 }
 
 static ULONG WINAPI IDirectSound_Release(LPDIRECTSOUND this) {
+	TRACE(dsound,"(%p), ref was %d\n",this,this->ref);
 	if (!--(this->ref)) {
 		HeapFree(GetProcessHeap(),0,this);
 		dsound = NULL;
@@ -922,11 +924,11 @@
 		if (!dsound->nrofbuffers) {
 			/* no soundbuffer yet... wait. */
 			Sleep(1000);
+			dsound->lpvtbl->fnRelease(dsound);
 			continue;
 		}
 		memset(playbuf,0,sizeof(playbuf));
 		playing = 0;
-		dsound->lpvtbl->fnAddRef(dsound); 
 		haveprimary = 0;
 		for (i=dsound->nrofbuffers;i--;) {
 			IDirectSoundBuffer	*dsb = dsound->buffers[i];