mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-30 22:29:13 +08:00
Ref T558, play notification sound after SELCAL tone
* return SELCAL tone duration * play follow up tone
This commit is contained in:
committed by
Mat Sutcliffe
parent
94513951e1
commit
0e03e7baf0
@@ -29,16 +29,19 @@
|
|||||||
#include "blackmisc/statusmessage.h"
|
#include "blackmisc/statusmessage.h"
|
||||||
#include "blacksound/soundgenerator.h"
|
#include "blacksound/soundgenerator.h"
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QtGlobal>
|
#include <QtGlobal>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
using namespace BlackMisc;
|
using namespace BlackMisc;
|
||||||
using namespace BlackMisc::Aviation;
|
using namespace BlackMisc::Aviation;
|
||||||
using namespace BlackMisc::Audio;
|
using namespace BlackMisc::Audio;
|
||||||
using namespace BlackMisc::Input;
|
using namespace BlackMisc::Input;
|
||||||
using namespace BlackMisc::Audio;
|
using namespace BlackMisc::Audio;
|
||||||
|
using namespace BlackMisc::PhysicalQuantities;
|
||||||
using namespace BlackSound;
|
using namespace BlackSound;
|
||||||
using namespace BlackCore::Vatsim;
|
using namespace BlackCore::Vatsim;
|
||||||
|
|
||||||
@@ -114,15 +117,8 @@ namespace BlackCore
|
|||||||
Q_ASSERT(m_voice);
|
Q_ASSERT(m_voice);
|
||||||
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << withAudioStatus; }
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << withAudioStatus; }
|
||||||
|
|
||||||
auto voiceChannel = m_voiceChannelMapping.value(comUnitValue);
|
const auto voiceChannel = m_voiceChannelMapping.value(comUnitValue);
|
||||||
if (voiceChannel)
|
return voiceChannel ? voiceChannel->getVoiceRoom() : CVoiceRoom();
|
||||||
{
|
|
||||||
return voiceChannel->getVoiceRoom();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return CVoiceRoom();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CVoiceRoomList CContextAudio::getComVoiceRooms() const
|
CVoiceRoomList CContextAudio::getComVoiceRooms() const
|
||||||
@@ -401,15 +397,8 @@ namespace BlackCore
|
|||||||
Q_ASSERT(m_voice);
|
Q_ASSERT(m_voice);
|
||||||
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
|
||||||
|
|
||||||
auto voiceChannel = m_voiceChannelMapping.value(comUnitValue);
|
const auto voiceChannel = m_voiceChannelMapping.value(comUnitValue);
|
||||||
if (voiceChannel)
|
return voiceChannel ? voiceChannel->getVoiceRoomCallsigns() : CCallsignSet();
|
||||||
{
|
|
||||||
return voiceChannel->getVoiceRoomCallsigns();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return CCallsignSet();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Network::CUserList CContextAudio::getRoomUsers(BlackMisc::Aviation::CComSystem::ComUnit comUnit) const
|
Network::CUserList CContextAudio::getRoomUsers(BlackMisc::Aviation::CComSystem::ComUnit comUnit) const
|
||||||
@@ -426,7 +415,18 @@ namespace BlackCore
|
|||||||
{
|
{
|
||||||
Q_ASSERT(m_voice);
|
Q_ASSERT(m_voice);
|
||||||
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << selcal; }
|
if (m_debugEnabled) { CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << selcal; }
|
||||||
m_selcalPlayer->play(90, selcal);
|
const CTime t = m_selcalPlayer->play(90, selcal);
|
||||||
|
const int ms = t.toMs();
|
||||||
|
if (ms > 10)
|
||||||
|
{
|
||||||
|
// As of https://dev.swift-project.org/T558 play additional notification
|
||||||
|
const QPointer<CContextAudio> myself(const_cast<CContextAudio *>(this)); //! \fixme KB 2019-03 add bit hacky as I need non-const and do not want to change all signatures
|
||||||
|
QTimer::singleShot(ms, this, [ = ]
|
||||||
|
{
|
||||||
|
if (!sApp || sApp->isShuttingDown() || !myself) { return; }
|
||||||
|
this->playNotification(CNotificationSounds::NotificationTextMessageSupervisor, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CContextAudio::playNotification(CNotificationSounds::NotificationFlag notification, bool considerSettings) const
|
void CContextAudio::playNotification(CNotificationSounds::NotificationFlag notification, bool considerSettings) const
|
||||||
@@ -545,7 +545,7 @@ namespace BlackCore
|
|||||||
case IVoiceChannel::ConnectingFailed:
|
case IVoiceChannel::ConnectingFailed:
|
||||||
case IVoiceChannel::DisconnectedError:
|
case IVoiceChannel::DisconnectedError:
|
||||||
CLogMessage(this).warning(u"Voice channel disconnecting error");
|
CLogMessage(this).warning(u"Voice channel disconnecting error");
|
||||||
// intentional fall-through
|
Q_FALLTHROUGH();
|
||||||
case IVoiceChannel::Disconnected:
|
case IVoiceChannel::Disconnected:
|
||||||
emit this->changedVoiceRooms(getComVoiceRooms(), false);
|
emit this->changedVoiceRooms(getComVoiceRooms(), false);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -27,19 +27,22 @@ namespace BlackSound
|
|||||||
m_threadedPlayer.quitAndWait();
|
m_threadedPlayer.quitAndWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSelcalPlayer::play(int volume, const BlackMisc::Aviation::CSelcal &selcal)
|
CTime CSelcalPlayer::play(int volume, const CSelcal &selcal)
|
||||||
{
|
{
|
||||||
|
CTime duration = CTime::null();
|
||||||
if (selcal.isValid())
|
if (selcal.isValid())
|
||||||
{
|
{
|
||||||
QList<CFrequency> frequencies = selcal.getFrequencies();
|
const QList<CFrequency> frequencies = selcal.getFrequencies();
|
||||||
Q_ASSERT(frequencies.size() == 4);
|
Q_ASSERT(frequencies.size() == 4);
|
||||||
const BlackMisc::PhysicalQuantities::CTime oneSec(1000.0, BlackMisc::PhysicalQuantities::CTimeUnit::ms());
|
const CTime oneSec(1000.0, CTimeUnit::ms());
|
||||||
CTonePair t1(frequencies.at(0), frequencies.at(1), oneSec);
|
const CTonePair t1(frequencies.at(0), frequencies.at(1), oneSec);
|
||||||
CTonePair t2({}, {}, oneSec / 5.0);
|
const CTonePair t2({}, {}, oneSec / 5.0);
|
||||||
CTonePair t3(frequencies.at(2), frequencies.at(3), oneSec);
|
const CTonePair t3(frequencies.at(2), frequencies.at(3), oneSec);
|
||||||
QList<CTonePair> tonePairs;
|
QList<CTonePair> tonePairs;
|
||||||
tonePairs << t1 << t2 << t3;
|
tonePairs << t1 << t2 << t3;
|
||||||
m_threadedPlayer.play(volume, tonePairs);
|
m_threadedPlayer.play(volume, tonePairs);
|
||||||
|
duration = oneSec * 2.5;
|
||||||
}
|
}
|
||||||
|
return duration;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,16 +11,14 @@
|
|||||||
#ifndef BLACKSOUND_SELCALPLAYER_H
|
#ifndef BLACKSOUND_SELCALPLAYER_H
|
||||||
#define BLACKSOUND_SELCALPLAYER_H
|
#define BLACKSOUND_SELCALPLAYER_H
|
||||||
|
|
||||||
#include "blacksoundexport.h"
|
|
||||||
#include "blacksound/threadedtonepairplayer.h"
|
#include "blacksound/threadedtonepairplayer.h"
|
||||||
#include "blacksound/tonepair.h"
|
#include "blacksound/tonepair.h"
|
||||||
|
#include "blacksoundexport.h"
|
||||||
#include "blackmisc/aviation/selcal.h"
|
#include "blackmisc/aviation/selcal.h"
|
||||||
#include "blackmisc/worker.h"
|
#include "blackmisc/worker.h"
|
||||||
|
|
||||||
#include <QAudioDeviceInfo>
|
#include <QAudioDeviceInfo>
|
||||||
|
|
||||||
class QTimer;
|
|
||||||
|
|
||||||
namespace BlackSound
|
namespace BlackSound
|
||||||
{
|
{
|
||||||
//! SELCAL player
|
//! SELCAL player
|
||||||
@@ -36,7 +34,8 @@ namespace BlackSound
|
|||||||
~CSelcalPlayer();
|
~CSelcalPlayer();
|
||||||
|
|
||||||
//! Play selcal
|
//! Play selcal
|
||||||
void play(int volume, const BlackMisc::Aviation::CSelcal &selcal);
|
//! \return Time of the played tone
|
||||||
|
BlackMisc::PhysicalQuantities::CTime play(int volume, const BlackMisc::Aviation::CSelcal &selcal);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CThreadedTonePairPlayer m_threadedPlayer;
|
CThreadedTonePairPlayer m_threadedPlayer;
|
||||||
|
|||||||
Reference in New Issue
Block a user