lowercasing filenames, part1; makefile adjustments
[picodrive.git] / platform / win32 / GenaDrive / DSound.cpp
index 3a38a8d..98fe4a0 100644 (file)
@@ -18,7 +18,7 @@ static int LoopBlank()
   void *mema=NULL,*memb=NULL;\r
   DWORD sizea=0,sizeb=0;\r
 \r
-  LoopBuffer->Lock(0,LoopLen<<2, &mema,&sizea, &memb,&sizeb, 0);\r
+  LoopBuffer->Lock(0,LoopLen<<((PicoOpt&8) ? 2 : 1), &mema,&sizea, &memb,&sizeb, 0);\r
   \r
   if (mema) memset(mema,0,sizea);\r
 \r
@@ -47,6 +47,7 @@ int DSoundInit()
   // Make buffer for the next seg to put into the loop:\r
   DSoundNext=(short *)malloc((PsndLen<<2)+64); if (DSoundNext==NULL) return 1;\r
   memset(DSoundNext,0,PsndLen<<2);\r
+//  lprintf("p %p\n", DSoundNext);\r
 \r
   // Create the DirectSound interface:\r
   DirectSoundCreate(NULL,&DSound,NULL);\r
@@ -78,23 +79,48 @@ void DSoundExit()
   if (LoopBuffer) LoopBuffer->Stop();\r
   RELEASE(LoopBuffer)\r
   RELEASE(DSound)\r
-  free(DSoundNext); DSoundNext=NULL;\r
+  DSound=0;\r
+  if (DSoundNext) free(DSoundNext); DSoundNext=NULL;\r
 }\r
 \r
 static int WriteSeg()\r
 {\r
   void *mema=NULL,*memb=NULL;\r
   DWORD sizea=0,sizeb=0;\r
+  int ret;\r
 \r
   // Lock the segment at 'LoopWrite' and copy the next segment in\r
-  LoopBuffer->Lock(LoopWrite<<((PicoOpt&8) ? 2 : 1),PsndLen<<((PicoOpt&8) ? 2 : 1), &mema,&sizea, &memb,&sizeb, 0);\r
-  \r
+  ret = LoopBuffer->Lock(LoopWrite<<((PicoOpt&8) ? 2 : 1),PsndLen<<((PicoOpt&8) ? 2 : 1), &mema,&sizea, &memb,&sizeb, 0);\r
+  if (ret) lprintf("LoopBuffer->Lock() failed: %i\n", ret);\r
+\r
   if (mema) memcpy(mema,DSoundNext,sizea);\r
 //  if (memb) memcpy(memb,DSoundNext+sizea,sizeb);\r
-  if (sizeb != 0) dprintf2("sizeb is not 0! (%i)\n", sizeb);\r
+  if (sizeb != 0) lprintf("sizeb is not 0! (%i)\n", sizeb);\r
+\r
+  ret = LoopBuffer->Unlock(mema,sizea, memb,0);\r
+  if (ret) lprintf("LoopBuffer->Unlock() failed: %i\n", ret);\r
 \r
-  LoopBuffer->Unlock(mema,sizea, memb,0);\r
+  return 0;\r
+}\r
 \r
+static int DSoundFake()\r
+{\r
+  static int ticks_old = 0;\r
+  int ticks = GetTickCount() * 1000;\r
+  int diff;\r
+\r
+  diff = ticks - ticks_old;\r
+  if (diff >= 0 && diff < 1000000/60*4)\r
+  {\r
+    while (diff >= 0 && diff < 1000000/60)\r
+    {\r
+      Sleep(1);\r
+      diff = GetTickCount()*1000 - ticks_old;\r
+    }\r
+    ticks_old += 1000000/60;\r
+  }\r
+  else\r
+    ticks_old = ticks;\r
   return 0;\r
 }\r
 \r
@@ -103,7 +129,7 @@ int DSoundUpdate()
   DWORD play=0;\r
   int pos=0;\r
 \r
-  if (LoopBuffer==NULL) return -1;\r
+  if (LoopBuffer==NULL) return DSoundFake();\r
 \r
   LoopBuffer->GetCurrentPosition(&play,NULL);\r
   pos=play>>((PicoOpt&8) ? 2 : 1);\r
@@ -120,14 +146,3 @@ int DSoundUpdate()
   return 0;\r
 }\r
 \r
-void DSoundMute()\r
-{\r
-  if (LoopBuffer==NULL) return;\r
-  LoopBuffer->Stop();\r
-}\r
-\r
-void DSoundUnMute()\r
-{\r
-  if (LoopBuffer==NULL) return;\r
-  LoopBuffer->Play(0,0,DSBPLAY_LOOPING);\r
-}\r