From fd1ecfae6f28341aeb5a151a2d1b15657787053b Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Tue, 14 Apr 2020 23:55:28 +1000 Subject: [PATCH] audio: removed hardcoded stereo value Fixes bug that caused AudioMonitor to only show two channels regardless of the actual number of channels being mixed. --- app/audio/bufferaverage.cpp | 7 +++---- app/audio/bufferaverage.h | 2 +- app/audio/outputdeviceproxy.cpp | 2 +- app/audio/outputmanager.cpp | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/audio/bufferaverage.cpp b/app/audio/bufferaverage.cpp index 4d47bee3b..d0a0964c9 100644 --- a/app/audio/bufferaverage.cpp +++ b/app/audio/bufferaverage.cpp @@ -22,20 +22,19 @@ OLIVE_NAMESPACE_ENTER -QVector AudioBufferAverage::ProcessAverages(const char *data, int length) +QVector AudioBufferAverage::ProcessAverages(const char *data, int length, int channel_count) { // FIXME: Assumes float and stereo const float* samples = reinterpret_cast(data); int sample_count = static_cast(length / static_cast(sizeof(float))); - int channels = 2; // Create array of samples to send - QVector averages(channels); + QVector averages(channel_count); averages.fill(0); // Add all samples together for (int i=0;i(qAbs(samples[i]))); + averages[i%channel_count] = qMax(averages[i%channel_count], static_cast(qAbs(samples[i]))); } return averages; diff --git a/app/audio/bufferaverage.h b/app/audio/bufferaverage.h index b2b31ebd5..ee87735ba 100644 --- a/app/audio/bufferaverage.h +++ b/app/audio/bufferaverage.h @@ -32,7 +32,7 @@ class AudioBufferAverage public: AudioBufferAverage() = default; - static QVector ProcessAverages(const char* data, int length); + static QVector ProcessAverages(const char* data, int length, int channel_count); }; OLIVE_NAMESPACE_EXIT diff --git a/app/audio/outputdeviceproxy.cpp b/app/audio/outputdeviceproxy.cpp index 3b48cb6c5..2da841122 100644 --- a/app/audio/outputdeviceproxy.cpp +++ b/app/audio/outputdeviceproxy.cpp @@ -94,7 +94,7 @@ qint64 AudioOutputDeviceProxy::readData(char *data, qint64 maxlen) // If we read any if (read_count > 0 && send_averages_) { - emit ProcessedAverages(AudioBufferAverage::ProcessAverages(data, static_cast(read_count))); + emit ProcessedAverages(AudioBufferAverage::ProcessAverages(data, static_cast(read_count), params_.channel_count())); } return read_count; diff --git a/app/audio/outputmanager.cpp b/app/audio/outputmanager.cpp index d92ad4934..d289badb0 100644 --- a/app/audio/outputmanager.cpp +++ b/app/audio/outputmanager.cpp @@ -151,7 +151,7 @@ void AudioOutputManager::ProcessAverages(const char *data, int length) return; } - emit SentSamples(AudioBufferAverage::ProcessAverages(data, length)); + emit SentSamples(AudioBufferAverage::ProcessAverages(data, length, output_.get()->format().channelCount())); } OLIVE_NAMESPACE_EXIT