Skip to content

Commit 9543012

Browse files
committed
support no mic
1 parent f9a0915 commit 9543012

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

src/arduino/app_bricks/audio_classification/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import wave
77
from typing import Callable
88

9-
from arduino.app_internal.core.audio import AudioDetector
9+
from arduino.app_internal.core.audio import AudioDetector, NO_MIC as NO_MIC
1010
from arduino.app_peripherals.microphone import Microphone
1111
from arduino.app_utils import brick, Logger
1212

@@ -28,6 +28,8 @@ def __init__(self, mic: Microphone = None, confidence: float = 0.8):
2828
2929
Args:
3030
mic (Microphone, optional): Microphone instance used as the audio source. If None, a default Microphone will be initialized.
31+
If NO_MIC is passed, no microphone will be initialized, and only file-based classification
32+
will be available.
3133
confidence (float, optional): Minimum confidence threshold (0.0–1.0) required
3234
for a detection to be considered valid. Defaults to 0.8 (80%).
3335
@@ -91,6 +93,9 @@ def classify_from_file(self, audio_path: str, confidence: int = None) -> dict |
9193
AudioClassificationException: If the file cannot be found, read, or processed.
9294
ValueError: If the file uses an unsupported sample width.
9395
"""
96+
if confidence is None:
97+
confidence = self.confidence
98+
9499
try:
95100
with wave.open(audio_path, "rb") as wf:
96101
# Get WAV file properties

src/arduino/app_bricks/audio_classification/examples/2_glass_breaking_from_file.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
# EXAMPLE_NAME = "Detect the glass breaking sound from audio file"
66
# EXAMPLE_REQUIRES = "Requires an audio file with the glass breaking sound."
7-
from arduino.app_bricks.audio_classification import AudioClassification
7+
from arduino.app_bricks.audio_classification import AudioClassification, NO_MIC
88

9-
classifier = AudioClassification()
9+
classifier = AudioClassification(mic=NO_MIC)
1010

1111
classification = classifier.classify_from_file("glass_breaking.wav")
1212
print("Result:", classification)

src/arduino/app_internal/core/audio.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
logger = Logger(__name__)
1515

16+
NO_MIC = object() # Sentinel value for no microphone
17+
1618

1719
class AudioDetector(EdgeImpulseRunnerFacade):
1820
"""AudioDetector module for detecting sounds and classifying audio using a specified model."""
@@ -42,7 +44,7 @@ def __init__(self, mic: Microphone = None, confidence: float = 0.8, debounce_sec
4244
raise ValueError("Model parameters are missing or incomplete in the retrieved model information.")
4345
self.model_info = model_info
4446

45-
self._mic = mic if mic else Microphone(sample_rate=model_info.frequency, channels=model_info.axis_count)
47+
self._mic = None if mic is NO_MIC else (mic or Microphone(sample_rate=model_info.frequency, channels=model_info.axis_count))
4648
self._mic_lock = threading.Lock()
4749

4850
self._window_size = int(model_info.input_features_count / model_info.axis_count)

0 commit comments

Comments
 (0)