private FMOD.MODE mode;\r
public Sound Sound { get { return sound; } }\r
private Boolean loopSound = false;\r
+ /// <summary>\r
+ /// The individual volume setting for THIS object\r
+ /// </summary>\r
+ private float volumeSetting = 0.5f;\r
\r
/// <summary>\r
/// Creates a new sound object\r
\r
Id = soundId;\r
position = FromOMVSpace(worldpos);\r
- volume = vol;\r
+ volumeSetting = vol;\r
loopSound = loop;\r
\r
// Set flags to determine how it will be played.\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Adjust volumes of all playing sounds to observe the new global sound volume\r
+ /// </summary>\r
+ public static void AdjustVolumes()\r
+ {\r
+ foreach (BufferSound s in allBuffers.Values)\r
+ {\r
+ s.AdjustVolume();\r
+ }\r
+ }\r
+\r
+ /// <summary>\r
+ /// Adjust the volume of THIS sound when all are being adjusted.\r
+ /// </summary>\r
+ private void AdjustVolume()\r
+ {\r
+ Volume = volumeSetting * AllObjectVolume;\r
+ }\r
+\r
// A simpler constructor used by PreFetchSound.\r
public BufferSound( UUID soundId )\r
: base()\r
\r
// Allocate a channel and set initial volume. Initially paused.\r
FMODExec(system.playSound(CHANNELINDEX.FREE, sound, true, ref channel));\r
- FMODExec(channel.setVolume(volume * m_objectVolume ));\r
+ FMODExec(channel.setVolume(volumeSetting * AllObjectVolume ));\r
\r
// Take note of when the sound is finished playing.\r
FMODExec(channel.setCallback(endCallback));\r
listenerThread.Name = "ListenerThread";
listenerThread.Start();
+ // Initial inworld-sound setting comes from Config.
ObjectEnable = true;
}
p.SoundGain * ObjectVolume);
}
+ /// <summary>
+ /// Control the volume of all inworld sounds
+ /// </summary>
public float ObjectVolume
{
- set { m_objectVolume = value; }
- get { return m_objectVolume; }
+ set
+ {
+ AllObjectVolume = value;
+ BufferSound.AdjustVolumes();
+ }
+ get { return AllObjectVolume; }
}
private bool m_objectEnabled = true;
+ /// <summary>
+ /// Enable and Disable inworld sounds
+ /// </summary>
public bool ObjectEnable
{
set
Instance.Client.Objects.ObjectPropertiesUpdated += new EventHandler<ObjectPropertiesUpdatedEventArgs>(Objects_ObjectPropertiesUpdated);
Instance.Client.Objects.KillObject += new EventHandler<KillObjectEventArgs>(Objects_KillObject);
Instance.Client.Network.SimChanged += new EventHandler<SimChangedEventArgs>(Network_SimChanged);
-
}
else
{
protected static FMOD.System system = null;
public FMOD.System FMODSystem { get { return system; } }
- protected static float m_objectVolume = 0.8f;
+ protected static float AllObjectVolume = 0.8f;
public MediaObject()
{
// Zero out the extra info structure.
cbPlayAudioStream.Checked = s["parcel_audio_play"].AsBoolean();
if (s["parcel_audio_keep_url"].Type != OSDType.Unknown)
cbKeep.Checked = s["parcel_audio_keep_url"].AsBoolean();
+ if (s["object_audio_enable"].Type != OSDType.Unknown)
+ ObjSoundEnable.Checked = s["object_audio_enable"].AsBoolean();
+ if (s["object_audio_vol"].Type != OSDType.Unknown)
+ {
+ instance.MediaManager.ObjectVolume = (float)s["parcel_audio_vol"].AsReal();
+ ObjVolume.Value = (int)(50f * instance.MediaManager.ObjectVolume);
+ }
configTimer = new System.Threading.Timer(SaveConfig, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);
{
configTimer.Change(saveConfigTimeout, System.Threading.Timeout.Infinite);
instance.MediaManager.ObjectVolume = ObjVolume.Value / 50f;
+ configTimer.Change(saveConfigTimeout, System.Threading.Timeout.Infinite);
}
void cbObjEnableChanged(object sender, EventArgs e)
{
configTimer.Change(saveConfigTimeout, System.Threading.Timeout.Infinite);
instance.MediaManager.ObjectEnable = ObjSoundEnable.Checked;
+ configTimer.Change(saveConfigTimeout, System.Threading.Timeout.Infinite);
}
private void txtAudioURL_TextChanged(object sender, EventArgs e)