Commit d53d5f88 authored by Lorenz Meier's avatar Lorenz Meier

Improve audio output logic and consistency

parent daefb0bd
...@@ -107,7 +107,7 @@ bool GAudioOutput::say(QString text, int severity) ...@@ -107,7 +107,7 @@ bool GAudioOutput::say(QString text, int severity)
*/ */
bool GAudioOutput::alert(QString text) bool GAudioOutput::alert(QString text)
{ {
emit textToSpeak(text, 2); emit textToSpeak(text, 1);
return true; return true;
} }
......
...@@ -58,12 +58,24 @@ public: ...@@ -58,12 +58,24 @@ public:
VOICE_FEMALE VOICE_FEMALE
} QGVoice; } QGVoice;
enum AUDIO_SEVERITY
{
AUDIO_SEVERITY_EMERGENCY = 0,
AUDIO_SEVERITY_ALERT = 1,
AUDIO_SEVERITY_CRITICAL = 2,
AUDIO_SEVERITY_ERROR = 3,
AUDIO_SEVERITY_WARNING = 4,
AUDIO_SEVERITY_NOTICE = 5,
AUDIO_SEVERITY_INFO = 6,
AUDIO_SEVERITY_DEBUG = 7
};
/** @brief Get the mute state */ /** @brief Get the mute state */
bool isMuted(); bool isMuted();
public slots: public slots:
/** @brief Say this text if current output priority matches */ /** @brief Say this text if current output priority matches */
bool say(QString text, int severity = 1); bool say(QString text, int severity = 6);
/** @brief Play alert sound and say notification message */ /** @brief Play alert sound and say notification message */
bool alert(QString text); bool alert(QString text);
/** @brief Start emergency sound */ /** @brief Start emergency sound */
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "QGC.h" #include "QGC.h"
#include "QGCAudioWorker.h" #include "QGCAudioWorker.h"
#include "GAudioOutput.h"
#if defined Q_OS_MAC && defined QGC_SPEECH_ENABLED #if defined Q_OS_MAC && defined QGC_SPEECH_ENABLED
#include <ApplicationServices/ApplicationServices.h> #include <ApplicationServices/ApplicationServices.h>
...@@ -89,11 +90,12 @@ QGCAudioWorker::~QGCAudioWorker() ...@@ -89,11 +90,12 @@ QGCAudioWorker::~QGCAudioWorker()
void QGCAudioWorker::say(QString text, int severity) void QGCAudioWorker::say(QString text, int severity)
{ {
qDebug() << "TEXT" << text;
if (!muted) if (!muted)
{ {
// TODO Add severity filter // Prepend high priority text with alert beep
Q_UNUSED(severity); if (severity < GAudioOutput::AUDIO_SEVERITY_CRITICAL) {
beep();
}
// Wait for the last sound to finish // Wait for the last sound to finish
while (!sound->isFinished()) { while (!sound->isFinished()) {
...@@ -149,7 +151,6 @@ void QGCAudioWorker::beep() ...@@ -149,7 +151,6 @@ void QGCAudioWorker::beep()
{ {
// Use QFile to transform path for all OS // Use QFile to transform path for all OS
QFile f(QCoreApplication::applicationDirPath() + QString("/files/audio/alert.wav")); QFile f(QCoreApplication::applicationDirPath() + QString("/files/audio/alert.wav"));
qDebug() << "SOUND FILE:" << f.fileName();
sound->play(f.fileName()); sound->play(f.fileName());
} }
} }
......
...@@ -333,7 +333,7 @@ void UAS::updateState() ...@@ -333,7 +333,7 @@ void UAS::updateState()
connectionLost = true; connectionLost = true;
receivedMode = false; receivedMode = false;
QString audiostring = QString("Link lost to system %1").arg(this->getUASID()); QString audiostring = QString("Link lost to system %1").arg(this->getUASID());
GAudioOutput::instance()->say(audiostring.toLower()); GAudioOutput::instance()->say(audiostring.toLower(), GAudioOutput::AUDIO_SEVERITY_ALERT);
} }
// Update connection loss time on each iteration // Update connection loss time on each iteration
...@@ -347,7 +347,7 @@ void UAS::updateState() ...@@ -347,7 +347,7 @@ void UAS::updateState()
if (connectionLost && (heartbeatInterval < timeoutIntervalHeartbeat)) if (connectionLost && (heartbeatInterval < timeoutIntervalHeartbeat))
{ {
QString audiostring = QString("Link regained to system %1").arg(this->getUASID()); QString audiostring = QString("Link regained to system %1").arg(this->getUASID());
GAudioOutput::instance()->say(audiostring.toLower()); GAudioOutput::instance()->say(audiostring.toLower(), GAudioOutput::AUDIO_SEVERITY_NOTICE);
connectionLost = false; connectionLost = false;
connectionLossTime = 0; connectionLossTime = 0;
emit heartbeatTimeout(false, 0); emit heartbeatTimeout(false, 0);
...@@ -574,7 +574,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) ...@@ -574,7 +574,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
if (statechanged && ((int)state.system_status == (int)MAV_STATE_CRITICAL || state.system_status == (int)MAV_STATE_EMERGENCY)) if (statechanged && ((int)state.system_status == (int)MAV_STATE_CRITICAL || state.system_status == (int)MAV_STATE_EMERGENCY))
{ {
GAudioOutput::instance()->say(QString("emergency for system %1").arg(this->getUASID())); GAudioOutput::instance()->say(QString("emergency for system %1").arg(this->getUASID()), GAudioOutput::AUDIO_SEVERITY_EMERGENCY);
QTimer::singleShot(3000, GAudioOutput::instance(), SLOT(startEmergency())); QTimer::singleShot(3000, GAudioOutput::instance(), SLOT(startEmergency()));
} }
else if (modechanged || statechanged) else if (modechanged || statechanged)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment