fix double DM sounds (#20811)

* fix double DM sounds

* debug script

* bool

* cleanup

* inf

Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: b9f9e2dfda
commatwo_master
Adeeb Shihadeh 4 years ago committed by GitHub
parent 4e38a101ec
commit 201e0777aa
  1. 4
      selfdrive/debug/cycle_alerts.py
  2. 4
      selfdrive/ui/qt/sound.cc
  3. 20
      selfdrive/ui/qt/sound.h
  4. 5
      selfdrive/ui/ui.cc

@ -5,16 +5,20 @@
import time import time
from cereal import car
import cereal.messaging as messaging import cereal.messaging as messaging
from selfdrive.car.honda.interface import CarInterface from selfdrive.car.honda.interface import CarInterface
from selfdrive.controls.lib.events import ET, EVENTS, Events from selfdrive.controls.lib.events import ET, EVENTS, Events
from selfdrive.controls.lib.alertmanager import AlertManager from selfdrive.controls.lib.alertmanager import AlertManager
EventName = car.CarEvent.EventName
def cycle_alerts(duration=200, is_metric=False): def cycle_alerts(duration=200, is_metric=False):
alerts = list(EVENTS.keys()) alerts = list(EVENTS.keys())
print(alerts) print(alerts)
alerts = [EventName.preDriverDistracted, EventName.promptDriverDistracted, EventName.driverDistracted]
CP = CarInterface.get_params("HONDA CIVIC 2016 TOURING") CP = CarInterface.get_params("HONDA CIVIC 2016 TOURING")
sm = messaging.SubMaster(['deviceState', 'pandaState', 'roadCameraState', 'modelV2', 'liveCalibration', sm = messaging.SubMaster(['deviceState', 'pandaState', 'roadCameraState', 'modelV2', 'liveCalibration',
'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman']) 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman'])

@ -9,7 +9,7 @@ Sound::Sound() {
} }
void Sound::play(AudibleAlert alert) { void Sound::play(AudibleAlert alert) {
int loops = sound_map[alert].second> - 1 ? sound_map[alert].second : QSoundEffect::Infinite; int loops = sound_map[alert].second ? QSoundEffect::Infinite : 0;
sounds[alert].setLoopCount(loops); sounds[alert].setLoopCount(loops);
sounds[alert].setVolume(volume); sounds[alert].setVolume(volume);
sounds[alert].play(); sounds[alert].play();
@ -18,7 +18,7 @@ void Sound::play(AudibleAlert alert) {
void Sound::stop() { void Sound::stop() {
for (auto &kv : sounds) { for (auto &kv : sounds) {
// Only stop repeating sounds // Only stop repeating sounds
if (sound_map[kv.first].second != 0) { if (kv.second.loopsRemaining() == QSoundEffect::Infinite) {
kv.second.stop(); kv.second.stop();
} }
} }

@ -14,16 +14,16 @@ public:
float volume = 0; float volume = 0;
private: private:
std::map<AudibleAlert, std::pair<QString, int>> sound_map { std::map<AudibleAlert, std::pair<QString, bool>> sound_map {
// AudibleAlert, (file path, loop count) // AudibleAlert, (file path, inf loop)
{AudibleAlert::CHIME_DISENGAGE, {"../assets/sounds/disengaged.wav", 0}}, {AudibleAlert::CHIME_DISENGAGE, {"../assets/sounds/disengaged.wav", false}},
{AudibleAlert::CHIME_ENGAGE, {"../assets/sounds/engaged.wav", 0}}, {AudibleAlert::CHIME_ENGAGE, {"../assets/sounds/engaged.wav", false}},
{AudibleAlert::CHIME_WARNING1, {"../assets/sounds/warning_1.wav", 0}}, {AudibleAlert::CHIME_WARNING1, {"../assets/sounds/warning_1.wav", false}},
{AudibleAlert::CHIME_WARNING2, {"../assets/sounds/warning_2.wav", 0}}, {AudibleAlert::CHIME_WARNING2, {"../assets/sounds/warning_2.wav", false}},
{AudibleAlert::CHIME_WARNING2_REPEAT, {"../assets/sounds/warning_2.wav", -1}}, {AudibleAlert::CHIME_WARNING2_REPEAT, {"../assets/sounds/warning_2.wav", true}},
{AudibleAlert::CHIME_WARNING_REPEAT, {"../assets/sounds/warning_repeat.wav", -1}}, {AudibleAlert::CHIME_WARNING_REPEAT, {"../assets/sounds/warning_repeat.wav", true}},
{AudibleAlert::CHIME_ERROR, {"../assets/sounds/error.wav", 0}}, {AudibleAlert::CHIME_ERROR, {"../assets/sounds/error.wav", false}},
{AudibleAlert::CHIME_PROMPT, {"../assets/sounds/error.wav", 0}} {AudibleAlert::CHIME_PROMPT, {"../assets/sounds/error.wav", false}}
}; };
std::map<AudibleAlert, QSoundEffect> sounds; std::map<AudibleAlert, QSoundEffect> sounds;

@ -224,9 +224,8 @@ static void update_alert(UIState *s) {
if (s->sm->updated("controlsState")) { if (s->sm->updated("controlsState")) {
auto alert_sound = scene.controls_state.getAlertSound(); auto alert_sound = scene.controls_state.getAlertSound();
if (scene.alert_type.compare(scene.controls_state.getAlertType()) != 0) { if (scene.alert_type.compare(scene.controls_state.getAlertType()) != 0) {
if (alert_sound == AudibleAlert::NONE) { s->sound->stop();
s->sound->stop(); if (alert_sound != AudibleAlert::NONE) {
} else {
s->sound->play(alert_sound); s->sound->play(alert_sound);
} }
} }

Loading…
Cancel
Save