Files
pilotclient/src/blacksound/tonepair.h
Roland Winklmeier 5486596335 Refactor SECLAL player into new threaded player class
The reason for moving the implementation out from CSoundGenerator into
its own class is, because CSoundGenerator was a very complex and
obscure class. It mixed many tasks in one place. CSelcalPlayer
is designed to play SELCALs only.

The following design changes have been made, compared to CSoundGenerator:
* Use pull mode instead of push mode. QBuffer is used as the QIODevice and
  is a wrapper around QByteArray. Therefore it is not necessary to
  implement our own QIODevice.
* Internally it uses a CThreadedSelcalPlayer to relieve the load of the
  main thread. CThreadedSelcalPlayer inherits CContinuousWorker, no
  low level QThread implementation was necessary.
* Push mode was not implemented.
* It is important that the QAudioOutput is allocated in the worker thread.
  QAudioOutput allocates internal objects, which cannot be moved to
  the worker thread.
* Data caching. The generated seclal audio data is cached.

refs #736
2016-08-26 21:05:24 +01:00

56 lines
1.9 KiB
C++

/* Copyright (C) 2016
* swift project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKSOUND_TONEPAIR_H
#define BLACKSOUND_TONEPAIR_H
#include "blacksoundexport.h"
#include "blackmisc/pq/frequency.h"
#include "blackmisc/pq/time.h"
#include <tuple>
namespace BlackSound
{
//! Tone pair to be played
class BLACKSOUND_EXPORT CTonePair
{
public:
//! Play two tones with frequencies f for t milliseconds
CTonePair(const BlackMisc::PhysicalQuantities::CFrequency &frequency,
const BlackMisc::PhysicalQuantities::CFrequency &secondaryFrequency,
const BlackMisc::PhysicalQuantities::CTime &duration);
//! Get frequency of the first tone
int getFirstFrequencyHz() const { return m_firstFrequencyHz; }
//! Get frequency of the second tone
int getSecondFrequencyHz() const { return m_secondFrequencyHz; }
//! Get play duration
qint64 getDurationMs() const { return m_durationMs; }
//! Comparison operator
friend bool operator <(const CTonePair& lhs, const CTonePair& rhs)
{
return std::tie(lhs.m_firstFrequencyHz, lhs.m_secondFrequencyHz, lhs.m_durationMs)
< std::tie(rhs.m_firstFrequencyHz, rhs.m_secondFrequencyHz, rhs.m_durationMs);
}
private:
int m_firstFrequencyHz; //!< first tone's frequency, use 0 for silence
int m_secondFrequencyHz; //!< second tone's frequency, or 0
qint64 m_durationMs; //!< How long to play (duration)
};
}
#endif // guard