Team Fortress 2/Scripting/Script Functions/EmitSoundEx: Difference between revisions
< Team Fortress 2 | Scripting | Script Functions
Jump to navigation
Jump to search
(Created page with "== Function Description == <code>void EmitSoundEx(table ''parameters'')</code> Flexible way of playing sounds. All parameters except <code>sound_name</code> are optional. Sou...") |
(Move PVS note into description) |
||
Line 3: | Line 3: | ||
Flexible way of playing sounds. All parameters except <code>sound_name</code> are optional. Sounds can be played in raw or [[soundscript]] form, and filtered to everyone, on a per-team or per-player basis. Volume, pitch, channel and attenuation level can be controlled, and the sound can play from a fixed position or relative to an entity. It is also possible to stop or adjust sounds already playing on the entity using special flags such as <code>SND_CHANGE_VOL</code> or <code>SND_CHANGE_PITCH</code>. | Flexible way of playing sounds. All parameters except <code>sound_name</code> are optional. Sounds can be played in raw or [[soundscript]] form, and filtered to everyone, on a per-team or per-player basis. Volume, pitch, channel and attenuation level can be controlled, and the sound can play from a fixed position or relative to an entity. It is also possible to stop or adjust sounds already playing on the entity using special flags such as <code>SND_CHANGE_VOL</code> or <code>SND_CHANGE_PITCH</code>. | ||
{{note|If the sound is playing while a player is outside of the sound's [[PAS]]/[[PVS]]/attenuation, and then enters its visiblity, the player will not hear the sound. This may be a problem for looping sounds or sounds with long durations, in which case the following workarounds can be used: | |||
* Use the <code>RECIPIENT_FILTER_GLOBAL</code>/<code>RECIPIENT_FILTER_TEAM</code> filter. The sound will still "play" outside of the range, but at no volume. | |||
* Play the sound to the player individually using <code>RECIPIENT_FILTER_SINGLE_PLAYER</code> when they enter a given area, e.g. via a trigger. | |||
* Create a [[soundscape]] which automatically deals with this on a per-player basis}} | |||
== Parameters == | == Parameters == | ||
Line 141: | Line 146: | ||
| 0 | | 0 | ||
| Specifies what entities can hear this entity. See [[Team_Fortress_2/Scripting/Script_Functions/Constants#EScriptRecipientFilter|Constants.EScriptRecipientFilter]]. | | Specifies what entities can hear this entity. See [[Team_Fortress_2/Scripting/Script_Functions/Constants#EScriptRecipientFilter|Constants.EScriptRecipientFilter]]. | ||
|- | |- | ||
| <code>filter_param</code> | | <code>filter_param</code> |
Revision as of 18:11, 11 August 2023
Function Description
void EmitSoundEx(table parameters)
Flexible way of playing sounds. All parameters except sound_name
are optional. Sounds can be played in raw or soundscript form, and filtered to everyone, on a per-team or per-player basis. Volume, pitch, channel and attenuation level can be controlled, and the sound can play from a fixed position or relative to an entity. It is also possible to stop or adjust sounds already playing on the entity using special flags such as SND_CHANGE_VOL
or SND_CHANGE_PITCH
.

- Use the
RECIPIENT_FILTER_GLOBAL
/RECIPIENT_FILTER_TEAM
filter. The sound will still "play" outside of the range, but at no volume. - Play the sound to the player individually using
RECIPIENT_FILTER_SINGLE_PLAYER
when they enter a given area, e.g. via a trigger. - Create a soundscape which automatically deals with this on a per-player basis
Parameters
Name | Type | Default | Description | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
sound_name
|
string
|
Name of sound. Can be raw filename or soundscript.
![]() channel , volume and pitch parameters. Use raw filenames if this is not desirable. | ||||||||||||||||||||||||||||||||||||||||
channel
|
int
|
0 | Channel ID on which to play the sound. Channels from -1 to 8 have special behavior, all other channels behave normally. List of special channels:
| |||||||||||||||||||||||||||||||||||||||
volume
|
float
|
1.0 | Volume of sound, in normalized 0 - 1 range. ![]() | |||||||||||||||||||||||||||||||||||||||
sound_level
|
int
|
0 | Sound attenuation in decibels. See this page for real world equivalents. If the sound has non-zero attenuation, it will play from the entity 's origin if present, otherwise it uses the origin parameter.
| |||||||||||||||||||||||||||||||||||||||
flags
|
int
|
0 | Special sound flags. List of flags available:
| |||||||||||||||||||||||||||||||||||||||
pitch
|
int
|
100 | Pitch of the sound. | |||||||||||||||||||||||||||||||||||||||
special_dsp
|
int
|
0 | DSP effect to use on this sound. | |||||||||||||||||||||||||||||||||||||||
origin
|
Vector
|
0 0 0 | Overwrites sound origin if specified. | |||||||||||||||||||||||||||||||||||||||
delay
|
float
|
Delay before playing sound. Template:ModernNote | ||||||||||||||||||||||||||||||||||||||||
sound_time
|
float
|
Absolute time to delay sound until, NOT the duration. Overrides delay if specified. Template:ModernNote
| ||||||||||||||||||||||||||||||||||||||||
entity
|
handle
|
null | Optional (player) entity to filter sounds to. All filters can use this except RECIPIENT_FILTER_GLOBAL and RECIPIENT_FILTER_TEAM . E.g. RECIPIENT_FILTER_SINGLE_PLAYER will play sounds only to the specified player here.
| |||||||||||||||||||||||||||||||||||||||
speaker_entity
|
handle
|
null | Entity which will *speak* the sound. This is not the sound as the actual owner of the sound, see above. | |||||||||||||||||||||||||||||||||||||||
filter_type
|
int
|
0 | Specifies what entities can hear this entity. See Constants.EScriptRecipientFilter. | |||||||||||||||||||||||||||||||||||||||
filter_param
|
int
|
-1 | Specifies an extra option to the filter. Currently only used by RECIPIENT_FILTER_TEAM , which uses this to specify which team to play to.
|
Flags
It may be useful to define these flags for extra readability.
::SND_NOFLAGS <- 0
::SND_CHANGE_VOL <- 1
::SND_CHANGE_PITCH <- 2
::SND_STOP <- 4
::SND_SPAWNING <- 8
::SND_DELAY <- 16
::SND_STOP_LOOPING <- 32
::SND_SPEAKER <- 64
::SND_SHOULDPAUSE <- 128
::SND_IGNORE_PHONEMES <- 256
::SND_IGNORE_NAME <- 512
::SND_DO_NOT_OVERWRITE_EXISTING_ON_CHANNEL <- 1024
Example Usage
// sounds should be precached once before use
PrecacheScriptSound("Game.Domination");
// play the sound to everyone around yourself
EmitSoundEx({
sound_name = "Game.Domination",
origin = GetListenServerHost().GetCenter(),
filter = Constants.EScriptRecipientFilter.RECIPIENT_FILTER_GLOBAL
});