srctools.sndscript

Reads and writes Soundscripts.

class srctools.sndscript.Pitch(value)

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)

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)

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: ~typing.List[str], volume: ~typing.Union[~typing.Tuple[~typing.Union[float, ~srctools.sndscript.VOLUME], ~typing.Union[float, ~srctools.sndscript.VOLUME]], float, ~srctools.sndscript.VOLUME] = (<VOLUME.VOL_NORM: 'VOL_NORM'>, <VOLUME.VOL_NORM: 'VOL_NORM'>), channel: ~srctools.sndscript.Channel = Channel.DEFAULT, level: ~typing.Union[~typing.Tuple[~typing.Union[float, ~srctools.sndscript.Level], ~typing.Union[float, ~srctools.sndscript.Level]], float, ~srctools.sndscript.Level] = (<Level.SNDLVL_NORM: 'SNDLVL_NORM'>, <Level.SNDLVL_NORM: 'SNDLVL_NORM'>), pitch: ~typing.Union[~typing.Tuple[~typing.Union[float, ~srctools.sndscript.Pitch], ~typing.Union[float, ~srctools.sndscript.Pitch]], float, ~srctools.sndscript.Pitch] = (<Pitch.PITCH_NORM: 100.0>, <Pitch.PITCH_NORM: 100.0>), stack_start: ~typing.Optional[~srctools.keyvalues.Keyvalues] = None, stack_update: ~typing.Optional[~srctools.keyvalues.Keyvalues] = None, stack_stop: ~typing.Optional[~srctools.keyvalues.Keyvalues] = 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().