/*
* Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSimulator Project nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using OpenMetaverse;
namespace OpenSim.Region.Framework.Interfaces
{
public interface ISoundModule
{
///
/// Maximum distance between a sound source and a recipient.
///
float MaxDistance { get; }
///
/// Play a sound from an object.
///
/// Sound asset ID
/// Sound source owner
/// Sound source ID
/// Sound volume
/// Sound source position
/// Sound flags
///
/// Radius used to affect gain over distance.
///
void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID,
double gain, Vector3 position, byte flags, float radius);
///
/// Trigger a sound in the scene.
///
/// Sound asset ID
/// Sound source owner
/// Sound source ID
/// Sound source parent.
/// Sound volume
/// Sound source position
///
///
/// Radius used to affect gain over distance.
///
void TriggerSound(
UUID soundId, UUID ownerID, UUID objectID, UUID parentID,
double gain, Vector3 position, UInt64 handle, float radius);
///
/// Stop sounds eminating from an object.
///
/// Sound source ID
void StopSound(UUID objectID);
///
/// Preload sound to viewers within range.
///
/// Sound source ID
/// Sound asset ID
///
/// Radius used to determine which viewers should preload the sound.
///
void PreloadSound(UUID objectID, UUID soundID, float radius);
///
/// Loop specified sound at specified volume with specified radius,
/// optionally declaring object as new sync master.
///
/// Sound source ID
/// Sound asset ID
/// Sound volume
/// Sound radius
/// Set object to sync master if true
void LoopSound(UUID objectID, UUID soundID, double gain,
double radius, bool isMaster);
///
/// Trigger or play an attached sound in this part's inventory.
///
/// Sound source ID
/// Sound asset ID
/// Sound volume
/// Triggered or not.
///
/// Sound radius
/// Play using sound master
/// Play as sound master
void SendSound(UUID objectID, UUID sound, double volume,
bool triggered, byte flags, float radius, bool useMaster,
bool isMaster);
///
/// Trigger a sound to be played to all agents within an axis-aligned
/// bounding box.
///
/// Sound source ID
/// Sound asset ID
/// Sound volume
/// AABB bottom south-west corner
/// AABB top north-east corner
void TriggerSoundLimited(UUID objectID, UUID sound, double volume,
Vector3 min, Vector3 max);
}
}