Node inputs (configuration)
Stored innode.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, keyaudio - Accepted inputs: int16/float32 numpy, raw PCM bytes, WAV bytes
- Passthrough: int16 @ 16 kHz mono is zero-copy
VA architecture
_CwAudioStreamProcessor + Silero VADIterator:
- Incoming chunks reframed to 512 samples (32 ms @ 16 kHz)
- Ring buffer stores float32 audio; indices from VAD mark utterance bounds
- On speech end: slice buffer → int16 segment → emit
SSG architecture
_CwAaAstGuard + Hugging Face AST:
- Accumulate int16 chunks until
window_samples(from buffer preset, default 4 s) - Convert to float32, run
ASTFeatureExtractor+ASTForAudioClassification - Multi-label sigmoid over 527 classes; filter by active scenario labels only
- If
max(matching_probs) >= confidence_threshold→ emit alert + audio window - Slide buffer by
hop_samples(50% overlap); enforceevent_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)
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.