OSDN Git Service

Kill all channels too.
authorLatif Khalifa <latifer@streamgrid.net>
Thu, 3 Jun 2010 12:01:17 +0000 (12:01 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Thu, 3 Jun 2010 12:01:17 +0000 (12:01 +0000)
Fixed looping sounds.

git-svn-id: https://radegast.googlecode.com/svn/trunk@677 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/Core/Media/BufferSound.cs
Radegast/Core/Media/MediaManager.cs

index 41adf77..5a6c025 100644 (file)
@@ -101,6 +101,9 @@ namespace Radegast.Media
             else\r
                 mode |= FMOD.MODE._3D_HEADRELATIVE;\r
 \r
+            if (loopSound)\r
+                mode |= FMOD.MODE.LOOP_NORMAL;\r
+\r
             // Fetch the sound data.\r
             manager.Instance.Client.Assets.RequestAsset(\r
                 Id,\r
@@ -114,9 +117,7 @@ namespace Radegast.Media
             if (allBuffers.ContainsKey(id))\r
             {\r
                 BufferSound bs = allBuffers[id];\r
-                ManualResetEvent done = new ManualResetEvent(false);\r
-                bs.StopSound(done);\r
-                done.WaitOne();\r
+                bs.StopSound(true);\r
             }\r
         }\r
 \r
@@ -133,6 +134,13 @@ namespace Radegast.Media
             {\r
                 s.StopSound();\r
             }\r
+\r
+            List<MediaObject> objs = new List<MediaObject>(allChannels.Values);\r
+            foreach (MediaObject obj in objs)\r
+            {\r
+                if (obj is BufferSound)\r
+                    ((BufferSound)obj).StopSound();\r
+            }\r
         }\r
 \r
         /// <summary>\r
@@ -296,11 +304,15 @@ namespace Radegast.Media
 \r
         protected void StopSound()\r
         {\r
-            StopSound(null);\r
+            StopSound(false);\r
         }\r
 \r
-        protected void StopSound(ManualResetEvent signal)\r
+        protected void StopSound(bool blocking)\r
         {\r
+            ManualResetEvent stopped = null;\r
+            if (blocking)\r
+                stopped = new ManualResetEvent(false);\r
+\r
             finished = true;\r
 \r
             invoke(new SoundDelegate(delegate\r
@@ -334,10 +346,13 @@ namespace Radegast.Media
                 lock (allBuffers)\r
                     allBuffers.Remove(ContainerId);\r
 \r
-                if (signal != null)\r
-                    signal.Set();\r
+                if (blocking)\r
+                    stopped.Set();\r
             }));\r
 \r
+            if (blocking)\r
+                stopped.WaitOne();\r
+\r
         }\r
 \r
     }\r
index 6d57d00..9ec5dbe 100644 (file)
@@ -584,7 +584,7 @@ namespace Radegast.Media
                     false,
                     true,
                     e.Position,
-                    ObjectVolume);
+                    ObjectVolume / 2f);
             }
         }