Noise Monitor

Event recording

How an event is detected and clipped: a 2 s spike is ignored, two loud stretches 3 s apart become one clip from 1 s before the first second above to 1 s after the last, and a stretch 7 s later is a new event

The agent compares every one-second LAeq with the trigger:

  1. A second is "above" when its LAeq,1s is at or above the trigger (threshold_db).
  2. Short pauses do not split an event. Stretches above that are separated by 5 seconds or less below the trigger count as one event, so speech and music, which dip between words and beats, give one clip and not many. More than 5 seconds below ends the event.
  3. Micro events are ignored. An event is recorded only if it has at least 5 seconds above the trigger in total, so a door slam, a single bark or a car horn is not.
  4. The clip covers the exceedance only. It starts 1 second before the first second above and ends 1 second after the last one. The agent always keeps the last second of audio in memory, so the clip can start before the detection.
  5. Long events are cut into clips of at most 5 minutes, back to back, so a party that lasts all night is still recorded in full but in files of a manageable size.
Setting Default Meaning
threshold_db 50 Recording trigger: LAeq,1s at or above this counts as above. Set from the station's page (or manage.py threshold); the device picks it up within seconds through its long poll (agent 0.4.1+), otherwise at its next report.
min_above_s 5 Seconds above the trigger, in total, that an event needs to be recorded.
merge_gap_s 5 Stretches above separated by this many seconds or less are one event.
pre_s / post_s 1 / 1 Seconds of audio kept before the first and after the last second above.
max_clip_s 300 Longest clip; a longer event continues in the next clip.

Each clip's JSON record keeps the per-second levels, the onset (first second above), the number of seconds above and the energy average over them (the level the page compares with the limit). The per-second level log is continuous regardless of events.

Until agent 0.4.0 (October 2026) the rule was different: an event started when the 10-second average reached the trigger, the clip was a fixed 5 minutes centred on the onset, and no new event could start for 15 minutes after a clip. Events recorded before the update keep those longer clips.

The limit (limit_db, default 55 dB(A), set per station with manage.py limit) is separate from the trigger. It is the permitted level: the dashed line on the chart, the colour of the readings, and the pink areas, which mark only the periods where LAeq is at or above it. Recording starts at the trigger, by default 1 dB above the limit in force, so every clip shows the limit exceeded by at least 1 dB. The owner edits that margin in the Record from limit + … dB box at the top of the station page; it applies from the moment it is changed onwards, and clips already recorded keep the trigger they were recorded with (each event stores its own threshold_db). Recorded clips appear on the chart as red boxes over their whole duration, stronger than the pink; clicking one plays it.