|
|
|
@ -67,9 +67,19 @@ void OnroadWindow::offroadTransition(bool offroad) { |
|
|
|
|
// ***** onroad widgets *****
|
|
|
|
|
|
|
|
|
|
OnroadAlerts::OnroadAlerts(QWidget *parent) : QWidget(parent) { |
|
|
|
|
for (auto &kv : sound_map) { |
|
|
|
|
auto path = QUrl::fromLocalFile(kv.second.first); |
|
|
|
|
sounds[kv.first].setSource(path); |
|
|
|
|
std::tuple<AudibleAlert, QString, bool> sound_list[] = { |
|
|
|
|
{AudibleAlert::CHIME_DISENGAGE, "../assets/sounds/disengaged.wav", false}, |
|
|
|
|
{AudibleAlert::CHIME_ENGAGE, "../assets/sounds/engaged.wav", false}, |
|
|
|
|
{AudibleAlert::CHIME_WARNING1, "../assets/sounds/warning_1.wav", false}, |
|
|
|
|
{AudibleAlert::CHIME_WARNING2, "../assets/sounds/warning_2.wav", false}, |
|
|
|
|
{AudibleAlert::CHIME_WARNING2_REPEAT, "../assets/sounds/warning_2.wav", true}, |
|
|
|
|
{AudibleAlert::CHIME_WARNING_REPEAT, "../assets/sounds/warning_repeat.wav", true}, |
|
|
|
|
{AudibleAlert::CHIME_ERROR, "../assets/sounds/error.wav", false}, |
|
|
|
|
{AudibleAlert::CHIME_PROMPT, "../assets/sounds/error.wav", false}}; |
|
|
|
|
|
|
|
|
|
for (auto &[alert, fn, loops] : sound_list) { |
|
|
|
|
sounds[alert].first.setSource(QUrl::fromLocalFile(fn)); |
|
|
|
|
sounds[alert].second = loops ? QSoundEffect::Infinite : 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -132,17 +142,18 @@ void OnroadAlerts::updateAlert(const QString &t1, const QString &t2, float blink |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OnroadAlerts::playSound(AudibleAlert alert) { |
|
|
|
|
int loops = sound_map[alert].second ? QSoundEffect::Infinite : 0; |
|
|
|
|
sounds[alert].setLoopCount(loops); |
|
|
|
|
sounds[alert].setVolume(volume); |
|
|
|
|
sounds[alert].play(); |
|
|
|
|
auto &[sound, loops] = sounds[alert]; |
|
|
|
|
sound.setLoopCount(loops); |
|
|
|
|
sound.setVolume(volume); |
|
|
|
|
sound.play(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OnroadAlerts::stopSounds() { |
|
|
|
|
for (auto &kv : sounds) { |
|
|
|
|
// Only stop repeating sounds
|
|
|
|
|
if (kv.second.loopsRemaining() == QSoundEffect::Infinite) { |
|
|
|
|
kv.second.stop(); |
|
|
|
|
auto &[sound, loops] = kv.second; |
|
|
|
|
if (sound.loopsRemaining() == QSoundEffect::Infinite) { |
|
|
|
|
sound.stop(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|