mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-29 14:02:59 +02:00
Add outputBufferSizeFrames property to Audio
This commit is contained in:
parent
bd88e0f38d
commit
f97109f6a4
2 changed files with 24 additions and 3 deletions
|
@ -60,6 +60,8 @@ static const int MUTE_ICON_SIZE = 24;
|
||||||
|
|
||||||
static const int RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES = 100;
|
static const int RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES = 100;
|
||||||
|
|
||||||
|
static const int DEFAULT_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES = 3;
|
||||||
|
|
||||||
Audio::Audio(QObject* parent) :
|
Audio::Audio(QObject* parent) :
|
||||||
AbstractAudioInterface(parent),
|
AbstractAudioInterface(parent),
|
||||||
_audioInput(NULL),
|
_audioInput(NULL),
|
||||||
|
@ -123,6 +125,7 @@ Audio::Audio(QObject* parent) :
|
||||||
_inputRingBufferMsecsAvailableStats(1, FRAMES_AVAILABLE_STATS_WINDOW_SECONDS),
|
_inputRingBufferMsecsAvailableStats(1, FRAMES_AVAILABLE_STATS_WINDOW_SECONDS),
|
||||||
_audioOutputMsecsUnplayedStats(1, FRAMES_AVAILABLE_STATS_WINDOW_SECONDS),
|
_audioOutputMsecsUnplayedStats(1, FRAMES_AVAILABLE_STATS_WINDOW_SECONDS),
|
||||||
_lastSentAudioPacket(0),
|
_lastSentAudioPacket(0),
|
||||||
|
_outputBufferSizeFrames(DEFAULT_AUDIO_OUTPUT_BUFFER_SIZE_FRAMES),
|
||||||
_packetSentTimeGaps(1, APPROXIMATELY_30_SECONDS_OF_AUDIO_PACKETS),
|
_packetSentTimeGaps(1, APPROXIMATELY_30_SECONDS_OF_AUDIO_PACKETS),
|
||||||
_audioOutputIODevice(_receivedAudioStream)
|
_audioOutputIODevice(_receivedAudioStream)
|
||||||
{
|
{
|
||||||
|
@ -443,6 +446,7 @@ void Audio::start() {
|
||||||
QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
||||||
qDebug() << "The default audio output device is" << outputDeviceInfo.deviceName();
|
qDebug() << "The default audio output device is" << outputDeviceInfo.deviceName();
|
||||||
bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo);
|
bool outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo);
|
||||||
|
outputFormatSupported = switchOutputToAudioDevice(outputDeviceInfo);
|
||||||
|
|
||||||
if (!inputFormatSupported) {
|
if (!inputFormatSupported) {
|
||||||
qDebug() << "Unable to set up audio input because of a problem with input format.";
|
qDebug() << "Unable to set up audio input because of a problem with input format.";
|
||||||
|
@ -1852,11 +1856,9 @@ bool Audio::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo)
|
||||||
|
|
||||||
outputFormatChanged();
|
outputFormatChanged();
|
||||||
|
|
||||||
const int AUDIO_OUTPUT_BUFFER_SIZE_FRAMES = 3;
|
|
||||||
|
|
||||||
// setup our general output device for audio-mixer audio
|
// setup our general output device for audio-mixer audio
|
||||||
_audioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
_audioOutput = new QAudioOutput(outputDeviceInfo, _outputFormat, this);
|
||||||
_audioOutput->setBufferSize(AUDIO_OUTPUT_BUFFER_SIZE_FRAMES * _outputFrameSize * sizeof(int16_t));
|
_audioOutput->setBufferSize(_outputBufferSizeFrames * _outputFrameSize * sizeof(int16_t));
|
||||||
qDebug() << "Output Buffer capacity in frames: " << _audioOutput->bufferSize() / sizeof(int16_t) / (float)_outputFrameSize;
|
qDebug() << "Output Buffer capacity in frames: " << _audioOutput->bufferSize() / sizeof(int16_t) / (float)_outputFrameSize;
|
||||||
|
|
||||||
_audioOutputIODevice.start();
|
_audioOutputIODevice.start();
|
||||||
|
@ -1877,6 +1879,20 @@ bool Audio::switchOutputToAudioDevice(const QAudioDeviceInfo& outputDeviceInfo)
|
||||||
return supportedFormat;
|
return supportedFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Audio::setOutputBufferSize(int numFrames) {
|
||||||
|
if (numFrames != _outputBufferSizeFrames) {
|
||||||
|
qDebug() << "Audio output buffer size (frames): " << numFrames;
|
||||||
|
_outputBufferSizeFrames = numFrames;
|
||||||
|
|
||||||
|
if (_audioOutput) {
|
||||||
|
// The buffer size can't be adjusted after QAudioOutput::start() has been called, so
|
||||||
|
// recreate the device by switching to the default.
|
||||||
|
QAudioDeviceInfo outputDeviceInfo = defaultAudioDeviceForMode(QAudio::AudioOutput);
|
||||||
|
switchOutputToAudioDevice(outputDeviceInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The following constant is operating system dependent due to differences in
|
// The following constant is operating system dependent due to differences in
|
||||||
// the way input audio is handled. The audio input buffer size is inversely
|
// the way input audio is handled. The audio input buffer size is inversely
|
||||||
// proportional to the accelerator ratio.
|
// proportional to the accelerator ratio.
|
||||||
|
|
|
@ -123,6 +123,8 @@ public:
|
||||||
|
|
||||||
void setRecorder(RecorderPointer recorder) { _recorder = recorder; }
|
void setRecorder(RecorderPointer recorder) { _recorder = recorder; }
|
||||||
|
|
||||||
|
int getOutputBufferSize() { return _outputBufferSizeFrames; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop();
|
||||||
|
@ -150,6 +152,7 @@ public slots:
|
||||||
void addLastFrameRepeatedWithFadeToScope(int samplesPerChannel);
|
void addLastFrameRepeatedWithFadeToScope(int samplesPerChannel);
|
||||||
void addStereoSamplesToScope(const QByteArray& samples);
|
void addStereoSamplesToScope(const QByteArray& samples);
|
||||||
void processReceivedSamples(const QByteArray& inputBuffer, QByteArray& outputBuffer);
|
void processReceivedSamples(const QByteArray& inputBuffer, QByteArray& outputBuffer);
|
||||||
|
void setOutputBufferSize(int numFrames);
|
||||||
|
|
||||||
virtual bool outputLocalInjector(bool isStereo, qreal volume, AudioInjector* injector);
|
virtual bool outputLocalInjector(bool isStereo, qreal volume, AudioInjector* injector);
|
||||||
|
|
||||||
|
@ -201,6 +204,8 @@ private:
|
||||||
|
|
||||||
QString _inputAudioDeviceName;
|
QString _inputAudioDeviceName;
|
||||||
QString _outputAudioDeviceName;
|
QString _outputAudioDeviceName;
|
||||||
|
|
||||||
|
int _outputBufferSizeFrames;
|
||||||
|
|
||||||
StDev _stdev;
|
StDev _stdev;
|
||||||
QElapsedTimer _timeSinceLastReceived;
|
QElapsedTimer _timeSinceLastReceived;
|
||||||
|
|
Loading…
Reference in a new issue