Arma 3 Scripting

Command in Sounds

say3D

Also available as Markdown and JSON, or read the original wiki page.

Description

Lets an object say given sound in 3D space. This allows broadcasting of positional music or sound from a source, without having to script a fade sound or music command. The source has to be alive. Compare this with say2D which will always play a sound at the location of the player after he has been in the vicinity of a broadcasting sound. Sound is defined in "CfgSounds" of the Description.ext or main config.

Note

The name of the command is the clue to its usage. It is meant for playing short sounds within short range. Consecutive execution of the command queues the sounds, the next sound would not start until the previous sound is finished, hence the need for the short sounds. The simulation of speed of sound would delay next sound and might mess with the timing of the queued sounds, especially if used globally. Additionally the sounds are not synced for JIP players. A long playing sound will not be heard by newly joined payers. To summarise:

  • An object can only "say" one sound at a time
  • In order to stop a say3D sound: delete the returned sound source with deleteVehicle, or kill the sound source with e.g setDamage.
  • Forcing the speed of sound simulation may delay the queued sound to play right after the previous sound, even if the second sound does not simulate sound delay (e.g sound 1 plays with a 5s delay, ends, then sound 2 plays). If the queued sound uses speed of sound simulation, it will be delayed from the end of the first sound (they will not follow "as expected"). Makes the offset parameter ignored.
  • Do use it for short distance short sounds with speed of sound simulation off.
  • When used with 'isGlobal' option, a null NetObject is returned. To stop such sound globally, destroy the sound source 'from' object.

Syntax

from say3D sound

Parameters:

Returns: Object - the sound source or NetObject - when 'isGlobal' is true

Examples

Example 1

All possible combinations:

helicopter1 say3D "FortunateSon";
helicopter1 say3D ["FortunateSon", 500, 1, 0, 0, true];
[helicopter1, player] say3D "FortunateSon";
[helicopter1, player] say3D ["FortunateSon", 500, 1, 0, 0, true];

Example 2

Workaround for dead bodies:

private _dummy = "#particlesource" createVehicleLocal ASLToAGL getPosWorld _corpse;
_dummy say3D "whatever";
_dummy spawn {
    sleep 5; // at least the length of your sound
    deleteVehicle _this;
};

Example 3

// Since Arma 3 v2.00, the sound source is returned and can be deleted directly
_soundSrc = helicopter1 say3D "Fortunateson";
sleep 5;
deleteVehicle _soundSrc; // stop the sound after ~5 seconds

See also

say · say2D · playSound · playSound3D · createSoundSource · playSoundUI · setRandomLip · stopSound · soundParams

Community notes

Rocket

The only difference with this command and say is during cutscenes (when some camera effect is active). In cutscenes, say3D is 3D, say is not.

Benargee

In Arma 2 1.63, the object this command is assigned to must be alive for the sound to broadcast. If the object is killed while the sound is still playing, the sound will stop immediately.

Here is a link to the forum to get around this issue.

I have not tested this in Arma 3 yet.