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.
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:
from: Object or Array of Objectssound: String or Array- String - classname of the sound to be played. Defined in CfgSounds including Description.ext
- Array with [sound, maxDistance, pitchCoef, isSpeech, offset, simulateSpeedOfSound, playMode, isGlobal]
- sound: String - classname of the sound to be played. Defined in CfgSounds including Description.ext
- maxDistance: Number - (Optional, default 100) maximum distance in meters at which the sound can be heard. -1 to use the maxDistance from the sound config
- pitchCoef: Number - (Optional, default 1) multiplier to the CfgSounds defined pitch. The final audio pitch is clipped between 0.5 and 2.0
- Arma 3 v1.92 isSpeech: Boolean or Arma 3 v2.04 Number - (Optional, default false)
- 0/false = play as sound (fadeSound applies)
- 1/true = play as speech (fadeSpeech applies), filters are not applied to it (i.e. house or vehicle interior one)
- 2 = play as sound (fadeSound applies) without interior/vehicle muffling
- Arma 3 v2.00 offset: Number - (Optional, default 0) offset in seconds; ignored when simulateSpeedOfSound is used
- Arma 3 v2.18 simulateSpeedOfSound: Boolean - (Optional, default false) true to simulate speed of sound (see description note)
- Arma 3 v2.24 isInside: Boolean - (Optional, default false) true if the sound is well audible inside the source (only for 'isSpeech' 0/false)
- Arma 3 v2.24 playMode: Number - (Optional, default 0) Could be one of the following:
- 0 - queued sound playback. The same source plays queued sounds in sequence
- 1 - single sound playback. The queue is cleared and a single sound is played instantly
- 2 - multiple sounds playback. The same source can play multiple sounds simultaneously and instantly
- Arma 3 v2.24 isGlobal: Boolean - (Optional, default false) true to play the sound on every client currently in game
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
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.
This command creates sound object "#soundonvehicle" which can be detected with allMissionObjects
onEachFrame { hintSilent str allMissionObjects "#soundonvehicle" };
0 spawn { sleep 1; player say3D "Alarm" };