From 6f2cc9cfeba02cfeff453d0267d91e3ea93ace2c Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Wed, 9 Aug 2017 14:01:17 -0700 Subject: [PATCH] When no input device, create dummy input to generate callbacks --- libraries/audio-client/src/AudioClient.cpp | 22 ++++++++++++++++++++++ libraries/audio-client/src/AudioClient.h | 1 + 2 files changed, 23 insertions(+) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index bc02da1cc4..4ec89b6fa3 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -160,6 +160,7 @@ AudioClient::AudioClient() : AbstractAudioInterface(), _gate(this), _audioInput(NULL), + _dummyAudioInput(NULL), _desiredInputFormat(), _inputFormat(), _numInputCallbackBytes(0), @@ -1423,11 +1424,19 @@ bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceIn _inputDeviceInfo = QAudioDeviceInfo(); } + if (_dummyAudioInput) { + _dummyAudioInput->stop(); + + _dummyAudioInput->deleteLater(); + _dummyAudioInput = NULL; + } + if (_inputToNetworkResampler) { // if we were using an input to network resampler, delete it here delete _inputToNetworkResampler; _inputToNetworkResampler = NULL; } + if (_audioGate) { delete _audioGate; _audioGate = nullptr; @@ -1485,6 +1494,19 @@ bool AudioClient::switchInputToAudioDevice(const QAudioDeviceInfo& inputDeviceIn } } + // If there is no input device, use the dummy input device. + // It generates audio callbacks on a timer to simulate a mic stream of silent packets. + // This enables clients without a mic to still receive an audio stream from the mixer. + if (!_audioInput) { + qCDebug(audioclient) << "No audio input device is available, using dummy input."; + + QTimer* _dummyAudioInput = new QTimer(this); + //connect(_dummyAudioInput, &QTimer::timeout, this, SLOT(handleDummyAudioInput())); + + // generate audio callbacks at the network sample rate + _dummyAudioInput->start((int)(AudioConstants::NETWORK_FRAME_MSECS + 0.5f)); + } + return supportedFormat; } diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 1c26b1bb08..a93ee5e515 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -277,6 +277,7 @@ private: Mutex _injectorsMutex; QAudioInput* _audioInput; + QTimer* _dummyAudioInput; QAudioFormat _desiredInputFormat; QAudioFormat _inputFormat; QIODevice* _inputDevice;