Skip to main content

Node inputs (configuration)

Stored in node.parameters unless wired from upstream: Runtime audio is resolved automatically from upstream audio via _CwAudioIngress (no manual sample_rate_hz input).

VA outputs

SSG outputs

Audio ingress (shared)

All modalities use _CwAudioIngress.adapt_safe():
  • Canonical format: numpy int16, 16000 Hz, mono, key audio
  • Accepted inputs: int16/float32 numpy, raw PCM bytes, WAV bytes
  • Passthrough: int16 @ 16 kHz mono is zero-copy

VA architecture

_CwAudioStreamProcessor + Silero VADIterator:
  1. Incoming chunks reframed to 512 samples (32 ms @ 16 kHz)
  2. Ring buffer stores float32 audio; indices from VAD mark utterance bounds
  3. On speech end: slice buffer → int16 segment → emit

SSG architecture

_CwAaAstGuard + Hugging Face AST:
  1. Accumulate int16 chunks until window_samples (from buffer preset, default 4 s)
  2. Convert to float32, run ASTFeatureExtractor + ASTForAudioClassification
  3. Multi-label sigmoid over 527 classes; filter by active scenario labels only
  4. If max(matching_probs) >= confidence_threshold → emit alert + audio window
  5. Slide buffer by hop_samples (50% overlap); enforce event_cooldown_s

Model

  • ID: MIT/ast-finetuned-audioset-10-10-0.4593
  • Training: AudioSet (527 classes)
  • Inference: torch.sigmoid(logits) per class

Scenario label maps (built-in)

Matching is case-insensitive substring: target in class_label.lower().

Buffer presets (shared field)

SSG enforces a minimum analysis window of 1.0 s.

Alert attribution

On SSG alert, _source_summary includes kind: audio_assistant, modality: sound_security_guard, sub_modality, event_label, and event_confidence for Send Alert source_chain metadata.

Edge cases