Skip to content

Anthrophony

Beyond the privacy VAD gate (Machine listening), a soundscape wants a descriptor of human presence. Speech and conversation carry two signatures the cached features already hold: energy in the voice band (~250–2000 Hz) and, above all, amplitude modulation at the 3–8 Hz syllabic rate, which is the strongest model-free speech cue. anthrophony reads the features (no audio pass, no ML) and its descriptors ride in the analyze summary.

What it measures

  • anthro_voiceband_fraction: share of octave energy in 250–2000 Hz.
  • anthro_syllabic_mod: share of the 50 Hz-envelope modulation energy in 3–8 Hz (conversation / announcement cadence).
  • anthro_activity_fraction: seconds where the voice band rises above its own running background.
  • anthrophony_index: the three combined, in [0, 1].

Usage

ambiscape analyze <session>        # anthro_* keys appear in the summary
ambiscape anthrophony <session>  # detail: writes anthrophony.json
from ambiscape import anthrophony, features
F = features.load_features(sorted((out / "features").glob("*.npz")))
anthrophony.summarize_anthrophony(F)

Caveats

Proxies, not detection. Music, radio, and TV also fill the voice band and modulate syllabically, so a radio left on in an empty room reads much like a conversation. Confirm actual speech with ambiscape.ml.speech_fraction (silero-VAD, [ml] extra) before treating this as human talk. The privacy stance is the deposit module's: publish features, not audio.