micd: don't update filtered sound level if playing sound (#26652)

* add is_sound_playing to hardware.py

* micd: don't update filtered sound level if playing sound
pull/26635/head
Cameron Clough 2 years ago committed by GitHub
parent 92e985c583
commit 86cd919a57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      system/hardware/base.py
  2. 4
      system/hardware/pc/hardware.py
  3. 3
      system/hardware/tici/hardware.py
  4. 4
      system/micd.py

@ -43,6 +43,10 @@ class HardwareBase(ABC):
def get_sound_card_online(self):
pass
@abstractmethod
def is_sound_playing(self):
pass
@abstractmethod
def get_imei(self, slot) -> str:
pass

@ -1,4 +1,5 @@
import random
import subprocess
from cereal import log
from system.hardware.base import HardwareBase, ThermalConfig
@ -17,6 +18,9 @@ class Pc(HardwareBase):
def get_sound_card_online(self):
return True
def is_sound_playing(self):
return "RUNNING" in subprocess.check_output(["pactl", "list", "short", "sinks"]).decode('utf8')
def reboot(self, reason=None):
print("REBOOT!")

@ -96,6 +96,9 @@ class Tici(HardwareBase):
return (os.path.isfile('/proc/asound/card0/state') and
open('/proc/asound/card0/state').read().strip() == 'ONLINE')
def is_sound_playing(self):
return "RUNNING" in subprocess.check_output(["pactl", "list", "short", "sinks"]).decode('utf8')
def reboot(self, reason=None):
subprocess.check_output(["sudo", "reboot"])

@ -5,6 +5,7 @@ import numpy as np
from cereal import messaging
from common.filter_simple import FirstOrderFilter
from common.realtime import Ratekeeper
from system.hardware import HARDWARE
from system.swaglog import cloudlog
RATE = 10
@ -27,7 +28,8 @@ class Mic:
# https://www.engineeringtoolbox.com/sound-pressure-d_711.html
sound_pressure = np.sqrt(np.mean(self.measurements ** 2)) # RMS of amplitudes
sound_pressure_level = 20 * np.log10(sound_pressure / REFERENCE_SPL) if sound_pressure > 0 else 0 # dB
self.spl_filter.update(sound_pressure_level)
if not HARDWARE.is_sound_playing():
self.spl_filter.update(sound_pressure_level)
else:
sound_pressure = 0
sound_pressure_level = 0

Loading…
Cancel
Save