HammeriteAudioMixSettings

Audio. Inherits Resource

How a map's sound is mixed: everything HammeriteAudioManager reads that is not the map, the graph or the game's sound types.

Every value here is a first guess, to be tuned by ear in a real map - which is why they are authored data rather than constants in the engine. Assign a table once at startup and every map is mixed by it:

HammeriteAudio.mix_settings = load("res://resources/acoustic_mix.tres")

Without one, sound is mixed on the defaults below.

Properties

TypeNameDefault
intmax_players64
floatreroute_distance1.0
intpath_cache_size256
floatpath_cache_grid32.0
PackedFloat32Arraymuffle_rungs_hzPackedFloat32Array(...)
floatunfiltered_above_hz12000.0
floatear_at_portal_octaves1.0
floathearing_reference_distance64.0
floatunheard_loss_db40.0
floatenvironmental_reference_distance64.0
intmax_environmental_openings4
floatenvironmental_most_distance_loss_db40.0
floatenvironmental_indoor_muffle_db8.0
floatenvironmental_muffle_depth128.0
floatenvironmental_volume_slew_db30.0
floatenvironmental_glide_speed600.0
floatenvironmental_panning_blend_seconds0.5
floatabsorption_tilt_db12.0
floatenvironmental_panning_depth256.0

Property descriptions

max_players

var max_players: int = 64

Most AudioStreamPlayer3Ds one map's mixer creates. Players are made as needed up to this; past it a sound that needs one is not played, and a warning says the pool is exhausted.

reroute_distance

var reroute_distance: float = 1.0

How far, in map units, a source or the listener must move before a sound is routed again.

path_cache_size

var path_cache_size: int = 256

Most routes the path cache holds; when full it is emptied rather than trimmed.

path_cache_grid

var path_cache_grid: float = 32.0

Grid, in map units, both ends of a route are snapped to for the path cache: two queries whose ends fall in the same pair of cells share one cached route. Coarser is cheaper and blunter - a grid wider than a wall is thin cannot tell one side of it from the other.

muffle_rungs_hz

var muffle_rungs_hz: PackedFloat32Array = PackedFloat32Array(...)

The muffle ladder: one bus per rung, each a low-pass at that cutoff sending on into the acoustic bus, and a voice plays on the rung nearest what its route arrived with. A ladder rather than a filter per voice because a voice's own filter is dead here - Godot scales it by the distance attenuation, which is off. The default rungs are roughly an octave apart, which is finer than the ear asks of a door, and one of them IS the water surface's cutoff, so a voice heard across a pool's surface takes that rung at the frequency it always had. Order them loosely bright to dull; nothing requires it, since a voice takes the nearest rung in octaves whatever order they are in.

unfiltered_above_hz

var unfiltered_above_hz: float = 12000.0

Above this a route has lost nothing worth filtering, and the voice plays on the acoustic bus itself rather than through a low-pass that would do nothing but cost.

ear_at_portal_octaves

var ear_at_portal_octaves: float = 1.0

How much brighter what comes through an opening is for an ear pressed to it: leaning in puts the ear AT the door rather than round the corner from it, and the corner is where the treble went. How LOUD it is is the game's to say (HammeriteAudioManager.press_ear_to_portal()).

hearing_reference_distance

var hearing_reference_distance: float = 64.0

Distance at which a sound is heard at its full source loudness, for the straight-line fallback a listener falls back on where the graph cannot route. Beyond it the usual inverse-square falloff applies.

unheard_loss_db

var unheard_loss_db: float = 40.0

What a sound has lost when it is not worth a player: all that distance takes from one, below which everything left is silence anyway. A one-shot this far down is still SOUNDING - whatever waits on it waits as long - it simply takes no player from the pool.

environmental_reference_distance

var environmental_reference_distance: float = 64.0

How weather indoors falls off with the way out to it: this far from the opening it is heard at full level, and it loses 6 dB for every doubling beyond. Measured from the listener along the path to the open air, so it is nothing in the doorway itself and grows the further in they go - which is what makes stepping inside a fade rather than a step. A doorway's width, in map units.

max_environmental_openings

var max_environmental_openings: int = 4

How many openings one environmental sound may be voiced through at once, the nearest way out among them. Each of the others costs a player, and past a handful they stop being distinguishable.

environmental_most_distance_loss_db

var environmental_most_distance_loss_db: float = 40.0

The most weather indoors loses to distance, however deep the building.

environmental_indoor_muffle_db

var environmental_indoor_muffle_db: float = 8.0

The muffling of being under a roof at all, reached environmental_muffle_depth in from the opening rather than at the threshold - a flat penalty on stepping inside was the sudden drop this is here to remove.

environmental_muffle_depth

var environmental_muffle_depth: float = 128.0

How far along the way out, in map units, environmental_indoor_muffle_db takes to be reached in full.

environmental_volume_slew_db

var environmental_volume_slew_db: float = 30.0

How fast an environmental sound's level follows where the listener is, in dB a second. It only smooths; the target itself is continuous, so this is for the frame the nearest way out changes hands.

environmental_glide_speed

var environmental_glide_speed: float = 600.0

How fast, in map units a second, the place weather is heard from glides to a new opening.

environmental_panning_blend_seconds

var environmental_panning_blend_seconds: float = 0.5

How long going from all-round to one-sided takes, in seconds. Outdoors weather has no side and indoors it has the side of the way in, and switching on the frame the zone changed was heard as a jump in the ear turned away from the opening.

absorption_tilt_db

var absorption_tilt_db: float = 12.0

How far apart a room's most and least absorbed band may be pulled, in decibels, for the tilt a preset's three absorptions are heard as (HammeriteAudioPreset.absorption_low_freq). Only the DIFFERENCE between the three is applied: a room absorbing every band equally is left flat, because how much of its reverb comes back at all is what HammeriteAudioPreset.reverb_wet says, and cutting the level again for it would be charging twice for the same dryness. So what this governs is colour - a metal room bright, water dull - and 0 turns it off.

environmental_panning_depth

var environmental_panning_depth: float = 256.0

How far from the open air it takes weather to come wholly from one side, measured along the way out rather than to the nearest doorway: at the opening itself the weather is right beside the listener and still mostly all round them, and it narrows as they walk further in. Measured to the doorway instead, stepping through an inner door into the next room widened it all round again.

Hammerite 1.0 · built from a6dd634, 2026-10-10