Skip to content

llTriggerSoundLimited

void llTriggerSoundLimited(string Sound, float Volume, vector TNE, vector BSW)

Plays Sound at Volume (0.0 - 1.0), centered at but not attached to object, limited to axis-aligned bounding box defined by vectors top-north-east (TNE) and bottom-south-west (BSW).

There is no limit to the number of triggered sounds which can be generated by an object, and calling llTriggerSound does not affect the attached sounds created by llPlaySound and llLoopSound. This is very useful for things like collision noises, explosions, etc. There is no way to stop or alter the volume of a sound triggered by this function.

Parameters
Sound (string)
Volume (float)
TNE (vector)
BSW (vector)
  • Unlike llSetSoundRadius, the sound audibility is determined by avatar position and not camera position.
  • If the script is attached and the parcel has avatar sounds turned off, an error is shouted on DEBUG_CHANNEL: “Too many sound triggers.”
  • If the object moves the sound does not move with it. Use llPlaySound to play a sound attached to the object.

This helper script calculates the bounding box coordinates needed for llTriggerSoundLimited. Click the prim to generate the function call parameters:

/*
Single Prim llTriggerSoundLimited Helper by Daemonika Nightfire.
Just use this script in a single prim and make the prim as big as your room.
If you then click on the prim, the sound will only be triggered inside and you will get a message with a finished LSL code.
You can simply copy this code to the clipboard and use it in your actual script.
Important:
You cannot rotate the prim, the code needs global coordinates.
*/
string sound = "c704dbd8-53b1-246d-e197-b486e92da45b"; // use here your own sound uuid
////////// nothing to do below this line \\\\\\\\\\
default
{
state_entry()
{
llSetStatus(STATUS_PHANTOM, TRUE);
llSetRot(ZERO_ROTATION);
}
touch_start(integer total_number)
{
llSetRot(ZERO_ROTATION);
vector my_pos = llGetPos();
vector my_scale = llGetScale();
float _X = my_scale.x/2;
float _Y = my_scale.y/2;
float _Z = my_scale.z/2;
vector bottom_south_west = <my_pos.x - _X, my_pos.y - _Y, my_pos.z - _Z>;
vector top_north_east = <my_pos.x + _X, my_pos.y + _Y, my_pos.z + _Z>;
llTriggerSoundLimited(sound, 1.0, top_north_east, bottom_south_west);
llOwnerSay("\nllTriggerSoundLimited(\"" + sound + "\", 1.0, " + (string)top_north_east + ", " + (string)bottom_south_west + ");");
}
on_rez(integer Dae)
{
llResetScript();
}
}

This example plays a sound on collision only to the person who collided with the object. Useful for haunted houses where you want to add confusion—others won’t hear the sound!

string sound = "a9da4612-5d4b-662a-050a-c821c394991f"; // squeaky toy
playSoundAt(key avatar, string sound, float volume)
{
if (llGetAgentSize(avatar)) // Make sure theyre actually present
{
vector pos = (vector)llList2String(llGetObjectDetails(avatar, [OBJECT_POS]),0); // Their position
list scale = llGetBoundingBox(avatar); // The corners of their bounding box
vector corner2 = pos+llList2Vector(scale,1); // Top northeast corner of their bounding box
vector corner1 = pos+llList2Vector(scale,0); // Bottom southwest corner of their bounding box
llTriggerSoundLimited(sound, volume, corner2, corner1); // Play sound in their location only
}
}
default
{
collision_start(integer n)
{
key bumper = llDetectedKey(0);
float volume = 1.0; // Volume is affected by distance like llPlaySound!
playSoundAt(bumper, sound, volume);
}
}