aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs36
-rw-r--r--OpenSim/Region/Framework/Interfaces/ISoundModule.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs28
3 files changed, 50 insertions, 25 deletions
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs
index 0225d6f..4912ed8 100644
--- a/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs
+++ b/OpenSim/Region/CoreModules/World/Sound/SoundModuleNonShared.cs
@@ -243,6 +243,42 @@ namespace OpenSim.Region.CoreModules.World.Sound
243 }); 243 });
244 } 244 }
245 245
246 public virtual void LoopSoundMaster(UUID objectID, UUID soundID,
247 double volume, double radius)
248 {
249 SceneObjectPart m_host;
250 if (!m_scene.TryGetSceneObjectPart(objectID, out m_host))
251 return;
252
253 m_host.ParentGroup.LoopSoundMasterPrim = m_host;
254 lock (m_host.ParentGroup.LoopSoundSlavePrims)
255 {
256 foreach (SceneObjectPart prim in m_host.ParentGroup.LoopSoundSlavePrims)
257 {
258 if (prim.Sound != UUID.Zero)
259 StopSound(objectID);
260
261 prim.Sound = soundID;
262 prim.SoundGain = volume;
263 prim.SoundFlags = 1; // looping
264 prim.SoundRadius = radius;
265
266 prim.ScheduleFullUpdate();
267 prim.SendFullUpdateToAllClients();
268 }
269 }
270 if (m_host.Sound != UUID.Zero)
271 StopSound(objectID);
272
273 m_host.Sound = soundID;
274 m_host.SoundGain = volume;
275 m_host.SoundFlags = 1; // looping
276 m_host.SoundRadius = radius;
277
278 m_host.ScheduleFullUpdate();
279 m_host.SendFullUpdateToAllClients();
280 }
281
246 #endregion 282 #endregion
247 } 283 }
248} 284}
diff --git a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
index 0f65763..d2557b5 100644
--- a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
@@ -84,5 +84,16 @@ namespace OpenSim.Region.Framework.Interfaces
84 /// Radius used to determine which viewers should preload the sound. 84 /// Radius used to determine which viewers should preload the sound.
85 /// </param> 85 /// </param>
86 void PreloadSound(UUID soundID, UUID objectID, float radius); 86 void PreloadSound(UUID soundID, UUID objectID, float radius);
87
88 /// <summary>
89 /// Declare object as new sync master, play specified sound at
90 /// specified volume with specified radius.
91 /// </summary>
92 /// <param name="objectID">Sound source ID</param>
93 /// <param name="soundID">Sound asset ID</param>
94 /// <param name="gain">Sound volume</param>
95 /// <param name="radius">Sound radius</param>
96 void LoopSoundMaster(UUID objectID, UUID soundID, double gain,
97 double radius);
87 } 98 }
88} \ No newline at end of file 99} \ No newline at end of file
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 61fd1aa..2669add 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2397,33 +2397,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2397 public void llLoopSoundMaster(string sound, double volume) 2397 public void llLoopSoundMaster(string sound, double volume)
2398 { 2398 {
2399 m_host.AddScriptLPS(1); 2399 m_host.AddScriptLPS(1);
2400 m_host.ParentGroup.LoopSoundMasterPrim = m_host; 2400 if (m_SoundModule != null)
2401 lock (m_host.ParentGroup.LoopSoundSlavePrims)
2402 { 2401 {
2403 foreach (SceneObjectPart prim in m_host.ParentGroup.LoopSoundSlavePrims) 2402 m_SoundModule.LoopSoundMaster(m_host.UUID, KeyOrName(sound),
2404 { 2403 volume, 20);
2405 if (prim.Sound != UUID.Zero)
2406 llStopSound();
2407
2408 prim.Sound = KeyOrName(sound);
2409 prim.SoundGain = volume;
2410 prim.SoundFlags = 1; // looping
2411 prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
2412
2413 prim.ScheduleFullUpdate();
2414 prim.SendFullUpdateToAllClients();
2415 }
2416 } 2404 }
2417 if (m_host.Sound != UUID.Zero)
2418 llStopSound();
2419
2420 m_host.Sound = KeyOrName(sound);
2421 m_host.SoundGain = volume;
2422 m_host.SoundFlags = 1; // looping
2423 m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
2424
2425 m_host.ScheduleFullUpdate();
2426 m_host.SendFullUpdateToAllClients();
2427 } 2405 }
2428 2406
2429 public void llLoopSoundSlave(string sound, double volume) 2407 public void llLoopSoundSlave(string sound, double volume)