noise¶
type: "noise"
Plays generated white noise for the effect's lifetime — no audio file in any resource
pack. One voice per effect instance: it opens when the instance starts, follows the
animated volume, brightness, jitter, jitter_rate and seed every frame, and closes
when the instance ends (or is stopped, faded out, or rebuilt by a replay seek).
Fields¶
Audio effects also accept the shared definition fields (
duration,easing,loop,persistent,fade_ticks,sound). They do not acceptscreen_layerororder, and they render no geometry.
| Field | Type | Default | Meaning |
|---|---|---|---|
volume |
float | 0.0 |
Linear gain, 0..1. Fades with the effect weight, so fade_ticks fades the noise in and out |
brightness |
float | 0.5 |
Crisp/soft blend, 0..1. 1 is raw white noise, 0 its lowpassed (mellow) copy |
jitter |
float | 0.0 |
Random-walk step size for the playback-rate and volume wander. 0 is steady noise |
jitter_rate |
float | 1.0 |
Wander speed multiplier: how fast the walk drifts per audio block (5 ms, so the wander does not depend on the frame rate) |
seed |
float | 0.0 |
Walk seed. Changing it reseeds and restarts the texture, so a value replays the same wander |
All are ordinary animatable params: start/end, keyframes, expr, graphs, setParam
and bind all work. volume's neutral is 0.0 (that is what the fade blends toward);
the rest have no neutral and are read as authored.
The voice gain each frame is volume × weight × distance × wander, where weight is the
effect's fade weight, distance is a linear falloff from the camera (full volume within
8 blocks, silent past 48 blocks), and wander is the gentle volume random walk (jitter
scaled, mean-reverted, clamped to 0..2 — silent only while volume or weight is).
Positioning¶
Like a world overlay, the voice is heard from a world point (mono — there is no stereo panning, only distance). First source wins:
- a runtime move (
sendMove/ network MOVE), - the first static
positionsentry (block-centred), - the first entity anchor's live position (an untracked entity is silent that frame),
- the authored
pos_x/pos_y/pos_ztriple, - otherwise the local-player position (interpolated snapshot), so a plain
/vfx play vfxweaver:noisefollows the viewer.
positions and region work as on Datapack format.
Example¶
{
"type": "noise",
"duration": 100,
"fade_ticks": 20,
"params": {
"volume": 0.4,
"brightness": 0.8,
"jitter": 0.05,
"seed": 7.0
}
}
Five seconds of bright radio static that fades in and out over one second each. Loop it for rain:
{
"type": "noise",
"loop": true,
"persistent": true,
"fade_ticks": 40,
"params": {
"volume": 0.3,
"brightness": 0.25,
"jitter": 0.02,
"jitter_rate": 0.5,
"seed": 3.0
}
}
Honest limits¶
-
The frame rate does not reach the sound. The voices are synthesised on a dedicated audio thread, in fixed 5 ms blocks from that thread's own wall clock, and every line stays about 60 ms ahead of its playhead. A slow frame, a lost frame or an unfocused window therefore cannot starve the line or stretch a ramp - the sound is the same at 30 fps and at 200 fps. A paused game (or a paused replay) is the one thing that stops it: the shared effect clock freezes, the thread notices within a quarter of a second and renders silence until it moves again. A replay seek resyncs silently instead of bursting.
-
The vanilla mixer is bypassed. The noise is synthesised into the OS mixer directly, so the game's volume sliders, mute and resource-pack sounds do not affect it — control loudness with the
volumeparam. A machine with no audio device (or a headless JVM) stays silent and logs once instead of failing. stopAllcuts immediately. Stopping one instance fades it out overfade_ticks; stopping everything (world exit,/vfx stopall, client shutdown) closes the voices at once, like the aux windows.