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
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
{\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
\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
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