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