Sound operators
These are the root sound operators referenced in Portal 2. See scripts/sound_operator_stacks.txt
and Soundscripts#Operator stacks for more details.
To chain operators together, values can be set to @prev_op_name.property_name
to read a value. For vectors the names can be appended with an index in square brackets to set/get a specific value.
Todo: Make this more beginner-friendy?
Contents
Usage
VFX.LightFlickerEnd
{
channel CHAN_AUTO
soundlevel SNDLVL_105db
volume 1.0
rndwave
{
wave "vfx/light_flicker/light_flicker_end_01.wav"
wave "vfx/light_flicker/light_flicker_end_02.wav"
wave "vfx/light_flicker/light_flicker_end_03.wav"
wave "vfx/light_flicker/light_flicker_end_04.wav"
}
soundentry_version 2
operator_stacks
{
start_stack // applied when the sound begins
{
import_stack "P2_exclusion_time_blocker_start" // defined in scripts/sound_operator_stacks.txt
// We are now extending/configuring P2_exclusion_time_blocker_start
block_entries // prevents another sound from playing
{
input_duration 0.25 // seconds to block for
match_entry "World.LightFlickerEnd" // the sound entry to block
match_entity false // only on the same entity that this sound is playing from?
}
}
}
}
Common properties
execute_once
- Whether the operator should run every time the stack is evaluated, or only the first time. Output values are presumable stored between executions in the latter case.
input_execute
- The operator will only run if this value is true (i.e. non-zero).
output
- The result of the operator (if there is one). Accessed with
@OperatorName.output
.
There is also one special command that is not an operator:
import_stack
- Inserts another named stack into this one.
Operator list
System
Affect sound playback.
sys_stop_entries
- Ends existing sounds.
input_execute
<float>- Will execute this operation if its value is greater than
0.0
. Default value is1.0
input_max_entries
<float>- Amount of instances allowed to play before one of the instances is stopped and replaced by a new instance of the sound entry.
input_stop_delay
<float>- Adds a delay before an instance of the sound entry is stopped.
match_entry
<string>- The sound entry name to look for.
output_entries_matching
- Confirm:Outputs the number of entries matching the defined entry.
- Usage:
"input1"
(of a separate operation)"@your_stop_entry_operation.output_entries_matching"
- Usage:
output_this_matches_index
- Uncertain. It's an output so it'd be used in the same manner as
output_entries_matching
. match_sound
<string>- Match the name of the audio file.
- Confirm: Is the path needed or just the audio file name and format?
match_substring
<bool>- Whether
match_entry
can be part of a larger string (e.g. "MyGun" matches MyGun.fire, MyGun.reload). match_channel
<bool>- Sound must have the same channel (e.g. CHAN_STATIC) as this one to match.
match_entity
<bool>- Sound must be coming from the same entity as this one.
stop_oldest
<bool>- Stops the oldest instance of the sound entry.
invert_match
<bool>
sys_start_entry
- Plays another sound.
input_execute
<float>- If its value is greater than
0.0
, this operation will execute. Default value is1.0
input_start
<float>- If its value is greater than
0.0
the sound entry will start. Default value is1.0
entry_name
<string>- The entry to play.
input_start_delay
<float>- Adds a delay before an instance is played.
input_maintain_seed
<float>- Greater than
0.0
will ensure that therndwave
selection is maintained.
sys_block_entries
- Prevents new sounds from playing.
input_duration
- How long to suppress sounds for.
input_active
- Confirm:In addition to normal duration, suppress only when this value is true?
match_entry
- Sound entry to suppress.
match_sound
- A raw WAV/MP3filename to match. Possibly deprecated?
match_substring
- Whether
match_entry
can be part of a larger string (e.g. "MyGun" matches MyGun.fire, MyGun.reload). match_channel
- Sound must have the same channel (e.g. CHAN_STATIC) as this one to match.
match_entity
- Sound must be coming from the same entity as this one.
sys_output
- Sends a value back to the sound system relating to the current entry.
input_float
- Takes a float value to send to the system.
input_vec3
- Vector.
input_speakers
- Takes an array of floats to send to the system, each to do with a certain speaker. Use only with the speakers output.
output
- Says what value should be altered, for example:
speakers
- Use in
update_stack
s only. Adjusts the volume of each speaker according to values given byinput_speakers
. pitch
- Use in
update_stack
s only. Adjusts the playback pitch of the sound to the value given withinput_float
. dsp
- Use in
update_stack
s only. Adjusts the DSP of the sound to the value given withinput_float
. delay
- Use in
start_stack
s only. Waits for the number of seconds specified ininput_float
before starting the sound. A negative value results in it starting the sound that many seconds into the WAV file instead of at the beginning. block_start
- Use in
start_stack
s only. Prevents the sound from starting if the value given withinput_float
is non-zero. mixlayer_trigger
- "Tell the mixlayer we're active" if the value given with
input_float
is non-zero. - Note:A
mixlayer
allows you to modify properties (volume
,level
,dsp
) of individualmixgroups
within the activesoundmixer
.mixlayers
can be found and created insoundmixers.txt
. save_restore
- Confirm:Use in
update_stack
s only. Tells the system to save and restore the state of the sound if the value given withinput_float
is non-zero. stop_hold
- Use in
update_stack
s only.Confirm:Prevents the sound from stopping if the value given withinput_float
is non-zero. facing
- Confirm:Make the sound play in a certain direction?
sys_platform
- Tests what platform the engine is running on.
pc
x360
ps3
- Should the operator return true if running on this platform?
sys_mixlayer
- Configures a
Mixlayer
. Seescripts\soundmixers.txt
mixlayer
<string>- The layer to alter.
- Note:A
mixlayer
allows you to modify properties (volume
,level
,dsp
) of individualmixgroups
within the activesoundmixer
.mixlayers
can be found and created insoundmixers.txt
.
Maths
Generate or process numbers.
The result of these is stored in @name.output
.
math_random
- Produces a random number.
input_min
input_max
- Range of values to output.
round_to_int
- Set to
"true"
or"false"
(default). This makes the output a whole number.
math_float
- Performs elementary maths operations with two values.
input1
input2
- The two operands to use.
apply
- Specifies the operation to perform:
add
- A + B
sub
- A - B
mult
- A * B
div
- A / B. If B is negative or zero, returns zero.
pow
- Raises the base
input1
to the power ofinput2
(Exponent). mod
- Returns the remainder of A / B, or the modulus. If B is negative or zero, returns zero.
set
- Passes on a value, outputting
input1
, ignoringinput2
.
invert
- Returns 1 - A, ignoring B.
invert_scale
- Returns 1 + AB - B.
min
- Outputs the smallest of the two numbers.
max
- Outputs the largest of the two numbers.
less_than
- Checks if A < B, and outputs 1.0 or 0.0.
greater_than
- Checks if A > B, and outputs 1.0 or 0.0.
less_than_or_equal
- Checks if A ≤ B, and outputs 1.0 or 0.0.
greater_than_or_equal
- Checks if A ≥ B, and outputs 1.0 or 0.0.
equals
- If both are equal outputs 1.0, otherwise 0.0.
not_equal
- If both are different outputs 1.0, otherwise 0.0.
math_float_accumulate12
- Does the same as
math_float
, but uses 12 inputs instead. All examples usemult
.
math_func1
- Executes various maths functions.
input1
- The argument to pass.
function
- Specifies the function to call:
none
- Do nothing to the input.
round
- Round to the nearest whole number.
floor
- Round down to a whole number.
ceil
- Round up to a whole number.
fabs
- Compute the absolute value of the input.
sqrt
- Computes the square root of the input.
exp
- Computes e raised to the power of the input.
log
- Computes the natural logarithm of the input.
log10
- Computes the logarithm base 10 of the input.
sin
cos
tan
- Computes the normal sin/cos/tan values. Angles are given in radians.
asin
acos
atan
- Computes the inverse of sin/cos/tan. Angles are given in radians.
sinh
cosh
tanh
- Computes the hyperbolic version of sin/cos/tan. Angles are given in radians.
normalize_trig
- If set to
"true"
, rescales the output from (-1, +1) to (0, 1).
math_logic_switch
- Selects one of two possible outputs.
input_switch
- Chooses which of the other values is outputted.
input1
- The value to output if
input_switch
is0
. input2
- The value to output if
input_switch
is1
.
math_curve_2d_4knot
- Multinode Remapper. Found in Insurgency(2014) and Day of Infamy sound_operator_stacks.txt.
curve_type
step
,linear
input
- Value that is compared to X: if input = X1 then ouput = Y1, if input = X2 then ouput = Y2, etc.
input_X1
input_Y1
input_X2
input_Y2
input_X3
input_Y3
input_X4
input_Y4
math_remap_float
- Remaps a value from one range to another (identically to math_remap).
input
<float>- The value to remap.
input_min
<float>input_max
<float>- The smallest/largest value the input will be set to.
input_map_min
<float>- When the input equals
input_min
, the output will be this value. input_map_max
<float>- When the input equals
input_max
, the output will be this value. default_to_max
<bool>clamp_range
<bool>
math_delta
input
<float>
Getters
Provide values from the engine.
get_convar
- Retrieve the value of a console variable.
convar
- The name of the console variable to read.
get_dashboard
get_map_name
- Checks if the given
map_name
matches the name of the map.
get_sys_time
- Collects the host/client time.
output_client_time
output_host_time
get_entry_time
- Collects information about the playing sound.
entry
- The entry to collect the information about
output_entry_elapsed
- The time this sound has been playing for.
Warning:For looped sounds this won't reset when the sound starts a new loop, it will continue to count the time, resulting in it being bigger than the actual file length
output_sound_elapsed
output_stop_elapsed
- -1 if playing, otherwise the time spent after being stopped.
output_sound_duration
- The total length of the sound file this stack is playing.
- Example operator stack to sync one track to another (including looping tracks), needs to be put in start_stacks in sound_operator_stacks.txt!
"synchronize_track" {
"catch_entry" { //Used to catch the entry we're syncing to
"operator" "get_entry_time"
}
"sound_offset" { // We have to account for the multiple loops that can happen
"operator" "math_float"
"apply" "mod"
"input1" "@catch_entry.output_entry_elapsed" //Get the duration this sound has been playing for
"input2" "@catch_entry.output_sound_duration" // % it by the total duration of the file we're playing from
}
"invert_offset" { //We have to skip the duration, the delay paramater accepts negative values to do that
"operator" "math_float"
"apply" "mult"
"input1" "-1"
"input2" "@sound_offset.output"
}
"whoosh" { //Skip the seconds to sync
"operator" "sys_output"
"output" "delay"
"input" "@invert_offset.output"
}
//"printvar1" { //Optional to print the offset to the console that we have calculated
// "operator" "util_print_float"
// "input" "@invert_offset.output"
//}
}
- Example usage in a soundscript:
"my.music.basetrack" {...} //A soundscript that is running in the background that we'll be syncing TO
"my.music.overlay" { //We will be syncing this track to the upper one
//Of course you will have standard soundscript settings here
soundentry_version 2
operator_stacks {
start_stack {
import_stack synchronize_track
catch_entry {
entry "my.music.basetrack" //You have to set the name of the entry you're trying to synchronize to here
}
}
}
get_source_info
- Collects a variety of information about the sound source.
- Below are the data points output by this operator: @my_get_source_info_operator.output_position, etc..
output_entity_index
- Returns the index of the source entity.
output_position
- The position of the entity.
output_angles
- The rotation of the entity.
output_radius
- Only valid for the emitter.
output_volume
output_level
output_pitch
- The relevant values of the soundscript.
output_source_count
- The number of sounds (including this one) produced by the entity.
game_view_info
- Collects a variety of game-specific information about the player for specialised uses.
input_source_index
<float>output_position
<vector3>output_position_x
<float>output_position_y
<float>output_position_z
<float>output_angles
<vector3>output_velocity_vector
<vector3>output_velocity_vector_x
<float>output_velocity_vector_y
<float>output_velocity_vector_z
<float>output_velocity
<float>output_velocity_xy
<float>output_stop_elapsed
game_entity_info
- Collects a variety of game-specific information about an entity for specialised uses.
input_entity_index
<float>output_position
<vector3>output_position_x
<float>output_position_y
<float>output_position_z
<float>output_angles
<vector3>output_velocity_vector
<vector3>output_velocity_vector_x
<float>output_velocity_vector_y
<float>output_velocity_vector_z
<float>output_velocity
<float>output_velocity_xy
<float>
get_track_syncpoint
- Used to sync one sound entry to another.
- Example
get_track_syncpoint
"start_delay_to_track_sync_point"
{
// the start sync point for the file we are syncing to
"this_entry_syncpoints"
{
"operator" "get_track_syncpoint"
"syncpoint_list" "syncpoints_1"
"this_entry_syncpoints" "true"
}
"sync_track_syncpoints"
{
"operator" "get_track_syncpoint"
"syncpoint_list" "syncpoints_1"
"input_min_time_to_next_sync" "@this_entry_syncpoints.output_first_syncpoint"
"input_max_time_to_next_sync" "1000"
"match_entry" "DOTAMusic.BattleMusic"
}
// output our resulting delay value
"delay_output"
{
"operator" "sys_output"
"input_float" "@sync_track_syncpoints.output_time_to_next_syncpoint"
"output" "delay"
}
}
get_soundmixer
get_opvar_float
- Gets the value of an
opvar
created with theset_opvar_float
operator.opvar
<string>
Setters
Change values in the engine.
set_convar
set_opvar_float
increment_opvar_float
Calculations
Calculate pre-set algorithms.
calc_source_distance
- Calculates the distance from this sound source (
emitter
/entity
) to the listener.
calc_falloff
- Calculates the falloff of a sound based on the distance from the sound source (
emitter
/entity
) to the listener and the multiplied output of the sound entriessoundlevel
and thelevel
property value of its assignedmixgroup
within the activesoundmixer
.input_distance
- Sound source position. Generally the output of a
calc_source_distance
operation. input_level
- Sound source's level/attenuation. Generally the output of a multiplication operation of the sound entries
soundlevel
and themixgroup
level
within the activesoundmixer
.
calc_distant_dsp
- Same setup as
calc_fallof
. Scales thedsp
level defined in the sound's assignedmixgroup
within the activesoundmixer
based on distance.input_distance
- Sound source position. Generally the output of a
calc_source_distance
operation. input_level
- Sound source's level/attenuation. Generally the output of a multiplication operation of the sound entries
soundlevel
and themixgroup
level
within the activesoundmixer
. - Note:The output of this operation is then multipled by the
dsp
property value (@get_soundmixer_op.output_dsp
) of the assignedmixgroup
within the activesoundmixer
, with the output then being input to asys_output
dsp
operation.
calc_spatialize_speakers
input_radius
input_distance
input_position
input_rear_stereo_scale
calc_occlusion
- Performs audio occlusion calculations.
input_trace_interval
input_scalar
input_position
- Generally the output (
@get_info_op.output_position
) of aget_source_info
operation.
calc_angles_facing
- input_angles
- Generally the output (
@get_info_op.output_angles
) of aget_source_info
operation.
Utilities
util_print_float
- Displays a float in the console, along with the name of this operator.
input
- The floating point value to show.
util_pos_vec8
-
input_index
<float>input_entry_count
<float>- Output the corresponding input position: a value of
1.0
outputinput_position_1
. input_position_0
<vector3>input_position_1
<vector3>input_position_2
<vector3>input_position_3
<vector3>input_position_4
<vector3>input_position_5
<vector3>input_position_6
<vector3>input_position_7
<vector3>output_position
<vector3>output_max_index
<float>
Other
- track_queue
prestart_stack
syncpoint_list
<string>
Example:
Note:This code is in the
operator_stacks
code block within the Sound Entry of the containing sound script, not insound_operator_stacks.txt
"soundentry_operator_data"
{
"track_data"
{
"start_point" "0.353"
"end_point" "38"
"track_name" "main"
"priority" "1"
"priority_override" "true"
"syncpoints"
{
"syncpoints_1"
{
"1" "2.533"
"2" "5.066"
"3" "7.599"
"4" "10.132"
"5" "12.665"
"6" "15.198"
"7" "17.731"
"8" "20.264"
"9" "22.797"
"10" "25.33"
"11" "27.863"
"12" "30.396"
"13" "32.929"
"14" "35.462"
"15" "38"
}
}
}
}
"prestart_stack"
{
"sync_track_syncpoints"
{
"operator" "track_queue"
"syncpoint_list" "syncpoints_1"
}
}
- track_update
-
autoqueue_entry_at_end_point
<string>- Sound Entry to auto queue.
- track_stop
- op_accumulate_ss_float
- iterate_merge_speakers