mirror of https://github.com/qTox/qTox
151 lines
4.5 KiB
C++
151 lines
4.5 KiB
C++
/*
|
|
Copyright © 2019 by The qTox Project Contributors
|
|
|
|
This file is part of qTox, a Qt-based graphical interface for Tox.
|
|
|
|
qTox is libre software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
qTox is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with qTox. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef IAUDIOCONTROL_H
|
|
#define IAUDIOCONTROL_H
|
|
|
|
#include <QObject>
|
|
#include <QStringList>
|
|
#include <memory>
|
|
|
|
/**
|
|
* @class IAudioControl
|
|
*
|
|
* @var IAudioControl::AUDIO_SAMPLE_RATE
|
|
* @brief The next best Opus would take is 24k
|
|
*
|
|
* @var IAudioControl::AUDIO_FRAME_DURATION
|
|
* @brief In milliseconds
|
|
*
|
|
* @var IAudioControl::AUDIO_FRAME_SAMPLE_COUNT
|
|
* @brief Frame sample count
|
|
*
|
|
* @fn qreal IAudioControl::outputVolume() const
|
|
* @brief Returns the current output volume (between 0 and 1)
|
|
*
|
|
* @fn void IAudioControl::setOutputVolume(qreal volume)
|
|
* @brief Set the master output volume.
|
|
*
|
|
* @param[in] volume the master volume (between 0 and 1)
|
|
*
|
|
* @fn qreal IAudioControl::minInputGain() const
|
|
* @brief The minimum gain value for an input device.
|
|
*
|
|
* @return minimum gain value in dB
|
|
*
|
|
* @fn void IAudioControl::setMinInputGain(qreal dB)
|
|
* @brief Set the minimum allowed gain value in dB.
|
|
*
|
|
* @note Default is -30dB; usually you don't need to alter this value;
|
|
*
|
|
* @fn qreal IAudioControl::maxInputGain() const
|
|
* @brief The maximum gain value for an input device.
|
|
*
|
|
* @return maximum gain value in dB
|
|
*
|
|
* @fn void IAudioControl::setMaxInputGain(qreal dB)
|
|
* @brief Set the maximum allowed gain value in dB.
|
|
*
|
|
* @note Default is 30dB; usually you don't need to alter this value.
|
|
*
|
|
* @fn bool IAudioControl::isOutputReady() const
|
|
* @brief check if the output is ready to play audio
|
|
*
|
|
* @return true if the output device is open, false otherwise
|
|
*
|
|
* @fn QStringList IAudioControl::outDeviceNames()
|
|
* @brief Get the names of available output devices
|
|
*
|
|
* @return list of output devices
|
|
*
|
|
* @fn QStringList IAudioControl::inDeviceNames()
|
|
* @brief Get the names of available input devices
|
|
*
|
|
* @return list of input devices
|
|
*
|
|
* @fn qreal IAudioControl::inputGain() const
|
|
* @brief get the current input gain
|
|
*
|
|
* @return current input gain in dB
|
|
*
|
|
* @fn void IAudioControl::setInputGain(qreal dB)
|
|
* @brief set the input gain
|
|
*
|
|
* @fn void IAudioControl::getInputThreshold()
|
|
* @brief get the current input threshold
|
|
*
|
|
* @return current input threshold percentage
|
|
*
|
|
* @fn void IAudioControl::setInputThreshold(qreal percent)
|
|
* @brief set the input threshold
|
|
*
|
|
* @param[in] percent the new input threshold percentage
|
|
*/
|
|
|
|
class IAudioSink;
|
|
class IAudioSource;
|
|
class IAudioControl : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
virtual qreal outputVolume() const = 0;
|
|
virtual void setOutputVolume(qreal volume) = 0;
|
|
virtual qreal maxOutputVolume() const = 0;
|
|
virtual qreal minOutputVolume() const = 0;
|
|
|
|
virtual qreal minInputGain() const = 0;
|
|
virtual void setMinInputGain(qreal dB) = 0;
|
|
|
|
virtual qreal maxInputGain() const = 0;
|
|
virtual void setMaxInputGain(qreal dB) = 0;
|
|
|
|
virtual qreal inputGain() const = 0;
|
|
virtual void setInputGain(qreal dB) = 0;
|
|
|
|
virtual qreal minInputThreshold() const = 0;
|
|
virtual qreal maxInputThreshold() const = 0;
|
|
|
|
virtual qreal getInputThreshold() const = 0;
|
|
virtual void setInputThreshold(qreal percent) = 0;
|
|
|
|
virtual void reinitInput(const QString& inDevDesc) = 0;
|
|
virtual bool reinitOutput(const QString& outDevDesc) = 0;
|
|
|
|
virtual bool isOutputReady() const = 0;
|
|
|
|
virtual QStringList outDeviceNames() = 0;
|
|
virtual QStringList inDeviceNames() = 0;
|
|
|
|
virtual std::unique_ptr<IAudioSink> makeSink() = 0;
|
|
virtual std::unique_ptr<IAudioSource> makeSource() = 0;
|
|
|
|
protected:
|
|
// Public default audio settings
|
|
// Samplerate for Tox calls and sounds
|
|
static constexpr uint32_t AUDIO_SAMPLE_RATE = 48000;
|
|
static constexpr uint32_t AUDIO_FRAME_DURATION = 20;
|
|
static constexpr uint32_t AUDIO_FRAME_SAMPLE_COUNT_PER_CHANNEL =
|
|
AUDIO_FRAME_DURATION * AUDIO_SAMPLE_RATE / 1000;
|
|
uint32_t AUDIO_FRAME_SAMPLE_COUNT_TOTAL = 0;
|
|
};
|
|
|
|
|
|
#endif // IAUDIOCONTROL_H
|