update once reached 4096

pull/26673/head
Shane Smiskol 2 years ago
parent 72d6afb661
commit 0898cbeec7
  1. 40
      system/micd.py

@ -10,6 +10,7 @@ from system.swaglog import cloudlog
RATE = 10 RATE = 10
DT_MIC = 1. / RATE DT_MIC = 1. / RATE
FFT_SAMPLES = 4096
REFERENCE_SPL = 2e-5 # newtons/m^2 REFERENCE_SPL = 2e-5 # newtons/m^2
SAMPLE_RATE = 44100 SAMPLE_RATE = 44100
@ -46,6 +47,11 @@ class Mic:
self.rk = Ratekeeper(RATE) self.rk = Ratekeeper(RATE)
self.measurements = np.empty(0) self.measurements = np.empty(0)
self.sound_pressure = 0
self.sound_pressure_weighted = 0
self.sound_pressure_level_weighted = 0
self.spl_filter_weighted = FirstOrderFilter(0, 2.5, DT_MIC, initialized=False) self.spl_filter_weighted = FirstOrderFilter(0, 2.5, DT_MIC, initialized=False)
def update(self): def update(self):
@ -56,24 +62,25 @@ class Mic:
Logged A-weighted equivalents are rough approximations of the human-perceived loudness. Logged A-weighted equivalents are rough approximations of the human-perceived loudness.
""" """
if len(self.measurements) > 0: # if len(self.measurements) > 0:
sound_pressure, _ = calculate_spl(self.measurements) # sound_pressure, _ = calculate_spl(self.measurements)
measurements_weighted = apply_a_weighting(self.measurements) # measurements_weighted = apply_a_weighting(self.measurements)
sound_pressure_weighted, sound_pressure_level_weighted = calculate_spl(measurements_weighted) # sound_pressure_weighted, sound_pressure_level_weighted = calculate_spl(measurements_weighted)
print(self.measurements.size, 'update()')
if not HARDWARE.is_sound_playing(): if not HARDWARE.is_sound_playing():
self.spl_filter_weighted.update(sound_pressure_level_weighted) self.spl_filter_weighted.update(self.sound_pressure_level_weighted)
else: # else:
sound_pressure = 0 # sound_pressure = 0
sound_pressure_weighted = 0 # sound_pressure_weighted = 0
sound_pressure_level_weighted = 0 # sound_pressure_level_weighted = 0
self.measurements = np.empty(0) self.measurements = np.empty(0)
msg = messaging.new_message('microphone') msg = messaging.new_message('microphone')
msg.microphone.soundPressure = float(sound_pressure) msg.microphone.soundPressure = float(self.sound_pressure)
msg.microphone.soundPressureWeighted = float(sound_pressure_weighted) msg.microphone.soundPressureWeighted = float(self.sound_pressure_weighted)
msg.microphone.soundPressureWeightedDb = float(sound_pressure_level_weighted) msg.microphone.soundPressureWeightedDb = float(self.sound_pressure_level_weighted)
msg.microphone.filteredSoundPressureWeightedDb = float(self.spl_filter_weighted.x) msg.microphone.filteredSoundPressureWeightedDb = float(self.spl_filter_weighted.x)
self.pm.send('microphone', msg) self.pm.send('microphone', msg)
@ -81,6 +88,15 @@ class Mic:
def callback(self, indata, frames, time, status): def callback(self, indata, frames, time, status):
self.measurements = np.concatenate((self.measurements, indata[:, 0])) self.measurements = np.concatenate((self.measurements, indata[:, 0]))
print(self.measurements.size)
if self.measurements.size >= FFT_SAMPLES:
measurements = self.measurements[:FFT_SAMPLES]
self.sound_pressure, _ = calculate_spl(measurements)
measurements_weighted = apply_a_weighting(measurements)
self.sound_pressure_weighted, self.sound_pressure_level_weighted = calculate_spl(measurements_weighted)
self.measurements = self.measurements[FFT_SAMPLES:]
def micd_thread(self, device=None): def micd_thread(self, device=None):
if device is None: if device is None:

Loading…
Cancel
Save