mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-08-22 23:42:25 -04:00
Multiple audio support: transfer start/stop audio to audio FIFO management in AudioDeviceManager
This commit is contained in:
parent
937bc19375
commit
5b7cbdf0e5
@ -271,13 +271,11 @@ bool BladerfOutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -213,13 +213,11 @@ bool FileSinkOutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -257,13 +257,11 @@ bool HackRFOutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -515,13 +515,11 @@ bool LimeSDROutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -201,13 +201,11 @@ bool PlutoSDROutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -201,13 +201,11 @@ bool SDRdaemonSinkOutput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initGeneration())
|
if (m_deviceAPI->initGeneration())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startGeneration();
|
m_deviceAPI->startGeneration();
|
||||||
DSPEngine::instance()->startAudioInput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopGeneration();
|
m_deviceAPI->stopGeneration();
|
||||||
DSPEngine::instance()->stopAudioInput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -292,13 +292,11 @@ bool AirspyInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -310,13 +310,11 @@ bool AirspyHFInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -288,13 +288,11 @@ bool AirspyHFIInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -297,13 +297,11 @@ bool BladerfInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -234,13 +234,11 @@ bool FCDProInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -228,13 +228,11 @@ bool FCDProPlusInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -316,13 +316,11 @@ bool FileSourceInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -278,13 +278,11 @@ bool HackRFInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -707,13 +707,11 @@ bool LimeSDRInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -180,13 +180,11 @@ bool PerseusInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -210,13 +210,11 @@ bool PlutoSDRInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -324,13 +324,11 @@ bool RTLSDRInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -205,13 +205,11 @@ bool SDRdaemonSourceInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -320,13 +320,11 @@ bool SDRPlayInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -197,13 +197,11 @@ bool TestSourceInput::handleMessage(const Message& message)
|
|||||||
if (m_deviceAPI->initAcquisition())
|
if (m_deviceAPI->initAcquisition())
|
||||||
{
|
{
|
||||||
m_deviceAPI->startAcquisition();
|
m_deviceAPI->startAcquisition();
|
||||||
DSPEngine::instance()->startAudioOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_deviceAPI->stopAcquisition();
|
m_deviceAPI->stopAcquisition();
|
||||||
DSPEngine::instance()->stopAudioOutput();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -88,25 +88,45 @@ void AudioDeviceManager::setInputVolume(float inputVolume)
|
|||||||
void AudioDeviceManager::addAudioSink(AudioFifo* audioFifo)
|
void AudioDeviceManager::addAudioSink(AudioFifo* audioFifo)
|
||||||
{
|
{
|
||||||
qDebug("AudioDeviceInfo::addAudioSink");
|
qDebug("AudioDeviceInfo::addAudioSink");
|
||||||
|
|
||||||
|
if (m_audioOutput.getNbFifos() == 0) {
|
||||||
|
startAudioOutput();
|
||||||
|
}
|
||||||
|
|
||||||
m_audioOutput.addFifo(audioFifo);
|
m_audioOutput.addFifo(audioFifo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDeviceManager::removeAudioSink(AudioFifo* audioFifo)
|
void AudioDeviceManager::removeAudioSink(AudioFifo* audioFifo)
|
||||||
{
|
{
|
||||||
qDebug("AudioDeviceInfo::removeAudioSink");
|
qDebug("AudioDeviceInfo::removeAudioSink");
|
||||||
|
|
||||||
m_audioOutput.removeFifo(audioFifo);
|
m_audioOutput.removeFifo(audioFifo);
|
||||||
|
|
||||||
|
if (m_audioOutput.getNbFifos() == 0) {
|
||||||
|
stopAudioOutput();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDeviceManager::addAudioSource(AudioFifo* audioFifo)
|
void AudioDeviceManager::addAudioSource(AudioFifo* audioFifo)
|
||||||
{
|
{
|
||||||
qDebug("AudioDeviceInfo::addAudioSource");
|
qDebug("AudioDeviceInfo::addAudioSource");
|
||||||
|
|
||||||
|
if (m_audioInput.getNbFifos() == 0) {
|
||||||
|
startAudioInput();
|
||||||
|
}
|
||||||
|
|
||||||
m_audioInput.addFifo(audioFifo);
|
m_audioInput.addFifo(audioFifo);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDeviceManager::removeAudioSource(AudioFifo* audioFifo)
|
void AudioDeviceManager::removeAudioSource(AudioFifo* audioFifo)
|
||||||
{
|
{
|
||||||
qDebug("AudioDeviceInfo::removeAudioSource");
|
qDebug("AudioDeviceInfo::removeAudioSource");
|
||||||
|
|
||||||
m_audioInput.removeFifo(audioFifo);
|
m_audioInput.removeFifo(audioFifo);
|
||||||
|
|
||||||
|
if (m_audioInput.getNbFifos() == 0) {
|
||||||
|
stopAudioInput();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioDeviceManager::startAudioOutput()
|
void AudioDeviceManager::startAudioOutput()
|
||||||
|
@ -51,11 +51,6 @@ public:
|
|||||||
void addAudioSource(AudioFifo* audioFifo); //!< Add an audio source
|
void addAudioSource(AudioFifo* audioFifo); //!< Add an audio source
|
||||||
void removeAudioSource(AudioFifo* audioFifo); //!< Remove an audio source
|
void removeAudioSource(AudioFifo* audioFifo); //!< Remove an audio source
|
||||||
|
|
||||||
void startAudioOutput();
|
|
||||||
void stopAudioOutput();
|
|
||||||
|
|
||||||
void startAudioInput();
|
|
||||||
void stopAudioInput();
|
|
||||||
void setAudioInputVolume(float volume) { m_audioInput.setVolume(volume); }
|
void setAudioInputVolume(float volume) { m_audioInput.setVolume(volume); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -73,6 +68,11 @@ private:
|
|||||||
QByteArray serialize() const;
|
QByteArray serialize() const;
|
||||||
bool deserialize(const QByteArray& data);
|
bool deserialize(const QByteArray& data);
|
||||||
|
|
||||||
|
void startAudioOutput();
|
||||||
|
void stopAudioOutput();
|
||||||
|
void startAudioInput();
|
||||||
|
void stopAudioInput();
|
||||||
|
|
||||||
friend class AudioDialog;
|
friend class AudioDialog;
|
||||||
friend class MainSettings;
|
friend class MainSettings;
|
||||||
};
|
};
|
||||||
|
@ -37,7 +37,7 @@ AudioInput::~AudioInput()
|
|||||||
|
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
|
|
||||||
for (AudioFifos::iterator it = m_audioFifos.begin(); it != m_audioFifos.end(); ++it)
|
for (std::list<AudioFifo*>::iterator it = m_audioFifos.begin(); it != m_audioFifos.end(); ++it)
|
||||||
{
|
{
|
||||||
delete *it;
|
delete *it;
|
||||||
}
|
}
|
||||||
@ -116,79 +116,6 @@ bool AudioInput::start(int device, int rate)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AudioInput::startImmediate(int device, int rate)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (QIODevice::isOpen())
|
|
||||||
{
|
|
||||||
qInfo("AudioInput::startImmediate: already started");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
QAudioDeviceInfo devInfo;
|
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
|
||||||
|
|
||||||
if (device < 0)
|
|
||||||
{
|
|
||||||
devInfo = QAudioDeviceInfo::defaultInputDevice();
|
|
||||||
qWarning("AudioInput::startImmediate: using default device %s", qPrintable(devInfo.defaultInputDevice().deviceName()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QList<QAudioDeviceInfo> devicesInfo = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
|
||||||
|
|
||||||
if (device < devicesInfo.size())
|
|
||||||
{
|
|
||||||
devInfo = devicesInfo[device];
|
|
||||||
qWarning("AudioInput::startImmediate: using audio device #%d: %s", device, qPrintable(devInfo.defaultInputDevice().deviceName()));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
devInfo = QAudioDeviceInfo::defaultInputDevice();
|
|
||||||
qWarning("AudioInput::startImmediate: audio device #%d does not exist. Using default device %s", device, qPrintable(devInfo.defaultInputDevice().deviceName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//QAudioDeviceInfo devInfo(QAudioDeviceInfo::defaultOutputDevice());
|
|
||||||
|
|
||||||
m_audioFormat.setSampleRate(rate);
|
|
||||||
m_audioFormat.setChannelCount(2);
|
|
||||||
m_audioFormat.setSampleSize(16);
|
|
||||||
m_audioFormat.setCodec("audio/pcm");
|
|
||||||
m_audioFormat.setByteOrder(QAudioFormat::LittleEndian);
|
|
||||||
m_audioFormat.setSampleType(QAudioFormat::SignedInt);
|
|
||||||
|
|
||||||
if (!devInfo.isFormatSupported(m_audioFormat))
|
|
||||||
{
|
|
||||||
m_audioFormat = devInfo.nearestFormat(m_audioFormat);
|
|
||||||
qWarning("AudioInput::startImmediate: %d Hz S16_LE audio format not supported. New rate: %d", rate, m_audioFormat.sampleRate());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qInfo("AudioInput::startImmediate: audio format OK");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_audioFormat.sampleSize() != 16)
|
|
||||||
{
|
|
||||||
qWarning("AudioInput::startImmediate: Audio device ( %s ) failed", qPrintable(devInfo.defaultInputDevice().deviceName()));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_audioInput = new QAudioInput(devInfo, m_audioFormat);
|
|
||||||
m_audioInput->setVolume(m_volume);
|
|
||||||
|
|
||||||
QIODevice::open(QIODevice::ReadWrite);
|
|
||||||
|
|
||||||
m_audioInput->start(this);
|
|
||||||
|
|
||||||
if (m_audioInput->state() != QAudio::ActiveState)
|
|
||||||
{
|
|
||||||
qWarning("AudioInput::startImmediate: cannot start");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioInput::stop()
|
void AudioInput::stop()
|
||||||
{
|
{
|
||||||
qDebug("AudioInput::stop");
|
qDebug("AudioInput::stop");
|
||||||
@ -210,21 +137,6 @@ void AudioInput::stop()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioInput::stopImmediate()
|
|
||||||
{
|
|
||||||
if (!QIODevice::isOpen())
|
|
||||||
{
|
|
||||||
qInfo("AudioInput::stopImmediate: already stopped");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qDebug("AudioInput::stopImmediate");
|
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
|
||||||
QIODevice::close();
|
|
||||||
delete m_audioInput;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioInput::addFifo(AudioFifo* audioFifo)
|
void AudioInput::addFifo(AudioFifo* audioFifo)
|
||||||
{
|
{
|
||||||
QMutexLocker mutexLocker(&m_mutex);
|
QMutexLocker mutexLocker(&m_mutex);
|
||||||
@ -267,7 +179,7 @@ qint64 AudioInput::writeData(const char *data, qint64 len)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (AudioFifos::iterator it = m_audioFifos.begin(); it != m_audioFifos.end(); ++it)
|
for (std::list<AudioFifo*>::iterator it = m_audioFifos.begin(); it != m_audioFifos.end(); ++it)
|
||||||
{
|
{
|
||||||
(*it)->write(reinterpret_cast<const quint8*>(data), len/4, 10);
|
(*it)->write(reinterpret_cast<const quint8*>(data), len/4, 10);
|
||||||
}
|
}
|
||||||
|
@ -37,11 +37,9 @@ public:
|
|||||||
bool start(int device, int rate);
|
bool start(int device, int rate);
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
bool startImmediate(int device, int rate);
|
|
||||||
void stopImmediate();
|
|
||||||
|
|
||||||
void addFifo(AudioFifo* audioFifo);
|
void addFifo(AudioFifo* audioFifo);
|
||||||
void removeFifo(AudioFifo* audioFifo);
|
void removeFifo(AudioFifo* audioFifo);
|
||||||
|
int getNbFifos() const { return m_audioFifos.size(); }
|
||||||
|
|
||||||
uint getRate() const { return m_audioFormat.sampleRate(); }
|
uint getRate() const { return m_audioFormat.sampleRate(); }
|
||||||
void setOnExit(bool onExit) { m_onExit = onExit; }
|
void setOnExit(bool onExit) { m_onExit = onExit; }
|
||||||
@ -54,8 +52,7 @@ private:
|
|||||||
bool m_onExit;
|
bool m_onExit;
|
||||||
float m_volume;
|
float m_volume;
|
||||||
|
|
||||||
typedef std::list<AudioFifo*> AudioFifos;
|
std::list<AudioFifo*> m_audioFifos;
|
||||||
AudioFifos m_audioFifos;
|
|
||||||
std::vector<qint32> m_mixBuffer;
|
std::vector<qint32> m_mixBuffer;
|
||||||
|
|
||||||
QAudioFormat m_audioFormat;
|
QAudioFormat m_audioFormat;
|
||||||
|
@ -39,6 +39,7 @@ public:
|
|||||||
|
|
||||||
void addFifo(AudioFifo* audioFifo);
|
void addFifo(AudioFifo* audioFifo);
|
||||||
void removeFifo(AudioFifo* audioFifo);
|
void removeFifo(AudioFifo* audioFifo);
|
||||||
|
int getNbFifos() const { return m_audioFifos.size(); }
|
||||||
|
|
||||||
uint getRate() const { return m_audioFormat.sampleRate(); }
|
uint getRate() const { return m_audioFormat.sampleRate(); }
|
||||||
void setOnExit(bool onExit) { m_onExit = onExit; }
|
void setOnExit(bool onExit) { m_onExit = onExit; }
|
||||||
|
@ -50,11 +50,6 @@ public:
|
|||||||
void removeLastDeviceSinkEngine();
|
void removeLastDeviceSinkEngine();
|
||||||
|
|
||||||
AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; }
|
AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; }
|
||||||
void startAudioOutput() { m_audioDeviceManager.startAudioOutput(); }
|
|
||||||
void stopAudioOutput() { m_audioDeviceManager.stopAudioOutput(); }
|
|
||||||
|
|
||||||
void startAudioInput() { m_audioDeviceManager.startAudioInput(); }
|
|
||||||
void stopAudioInput() {m_audioDeviceManager.stopAudioInput(); }
|
|
||||||
|
|
||||||
DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; }
|
DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; }
|
||||||
DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid);
|
DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user