srctools.sndscript

Reads and writes Soundscripts.

class srctools.sndscript.Pitch(
value,
names=None,
*,
module=None,
qualname=None,
type=None,
start=1,
boundary=None,
)

Bases: float, Enum

The constants permitted for sound pitches.

PITCH_NORM = 100.0
PITCH_LOW = 95.0
PITCH_HIGH = 120.0
class srctools.sndscript.Channel(
value,
names=None,
*,
module=None,
qualname=None,
type=None,
start=1,
boundary=None,
)

Bases: Enum

Different categories of sounds.

DEFAULT = 'CHAN_AUTO'
GUNFIRE = 'CHAN_WEAPON'
VOICE = 'CHAN_VOICE'
TF2_ANNOUNCER = 'CHAN_VOICE2'
ITEMS = 'CHAN_ITEM'
BODY = 'CHAN_BODY'
STREAMING = 'CHAN_STREAM'
CON_CMD = 'CHAN_REPLACE'
BACKGROUND = 'CHAN_STATIC'
PLAYER_VOICE = 'CHAN_VOICE_BASE'
class srctools.sndscript.Level(
value,
names=None,
*,
module=None,
qualname=None,
type=None,
start=1,
boundary=None,
)

Bases: Enum

Soundlevel constants - attenuation.

SNDLVL_NONE = 'SNDLVL_NONE'
SNDLVL_20dB = 'SNDLVL_20dB'
SNDLVL_25dB = 'SNDLVL_25dB'
SNDLVL_30dB = 'SNDLVL_30dB'
SNDLVL_35dB = 'SNDLVL_35dB'
SNDLVL_40dB = 'SNDLVL_40dB'
SNDLVL_45dB = 'SNDLVL_45dB'
SNDLVL_50dB = 'SNDLVL_50dB'
SNDLVL_55dB = 'SNDLVL_55dB'
SNDLVL_IDLE = 'SNDLVL_IDLE'
SNDLVL_65dB = 'SNDLVL_65dB'
SNDLVL_STATIC = 'SNDLVL_STATIC'
SNDLVL_70dB = 'SNDLVL_70dB'
SNDLVL_NORM = 'SNDLVL_NORM'
SNDLVL_80dB = 'SNDLVL_80dB'
SNDLVL_TALKING = 'SNDLVL_TALKING'
SNDLVL_85dB = 'SNDLVL_85dB'
SNDLVL_90dB = 'SNDLVL_90dB'
SNDLVL_95dB = 'SNDLVL_95dB'
SNDLVL_100dB = 'SNDLVL_100dB'
SNDLVL_105dB = 'SNDLVL_105dB'
SNDLVL_110dB = 'SNDLVL_110dB'
SNDLVL_120dB = 'SNDLVL_120dB'
SNDLVL_125dB = 'SNDLVL_125dB'
SNDLVL_130dB = 'SNDLVL_130dB'
SNDLVL_GUNFIRE = 'SNDLVL_GUNFIRE'
SNDLVL_140dB = 'SNDLVL_140dB'
SNDLVL_145dB = 'SNDLVL_145dB'
SNDLVL_150dB = 'SNDLVL_150dB'
SNDLVL_180dB = 'SNDLVL_180dB'
class srctools.sndscript.Sound(
name: str,
sounds: List[str],
volume: Tuple[float | VOLUME, float | VOLUME] | float | VOLUME = (srctools.sndscript.VOL_NORM, srctools.sndscript.VOL_NORM),
channel: int | Channel = Channel.DEFAULT,
level: Tuple[float | Level, float | Level] | float | Level = (Level.SNDLVL_NORM, Level.SNDLVL_NORM),
pitch: Tuple[float | Pitch, float | Pitch] | float | Pitch = (Pitch.PITCH_NORM, Pitch.PITCH_NORM),
stack_start: Keyvalues | None = None,
stack_update: Keyvalues | None = None,
stack_stop: Keyvalues | None = None,
force_v2: bool = False,
)

Represents a single soundscript.

property stack_start: Keyvalues

Initialise the stack if not already produced.

property stack_update: Keyvalues

Initialise the stack if not already produced.

property stack_stop: Keyvalues

Initialise the stack if not already produced.

classmethod parse(
file: Keyvalues,
) Dict[str, Sound]

Parses a soundscript file.

This returns a dict mapping casefolded names to Sounds.

export(file: TextIO) None

Write a sound to a file.

Pass a file-like object open for text writing.

srctools.sndscript.wav_is_looped(file: IO[bytes]) bool

Check if the provided wave file contains loop cue points.

This code is partially copied from wave.Wave_read.initfp().