From 7acd3be40d23061d8e46104323eb63e5780945ed Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sat, 1 Jul 2017 19:03:37 -0700 Subject: [PATCH] UI: Change meter color to red when audio is clipping Closes jp9000/obs-studio#738 --- UI/volume-control.cpp | 14 ++++++++++---- UI/volume-control.hpp | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/UI/volume-control.cpp b/UI/volume-control.cpp index f0826294f..497315a98 100644 --- a/UI/volume-control.cpp +++ b/UI/volume-control.cpp @@ -3,6 +3,7 @@ #include "obs-app.hpp" #include "mute-checkbox.hpp" #include "slider-absoluteset-style.hpp" +#include #include #include #include @@ -265,7 +266,10 @@ VolumeMeter::VolumeMeter(QWidget *parent) magColor.setRgb(0x20, 0x7D, 0x17); peakColor.setRgb(0x3E, 0xF1, 0x2B); peakHoldColor.setRgb(0x00, 0x00, 0x00); - + + clipColor1.setRgb(0x7F, 0x00, 0x00); + clipColor2.setRgb(0xFF, 0x00, 0x00); + updateTimerRef = updateTimer.toStrongRef(); if (!updateTimerRef) { updateTimerRef = QSharedPointer::create(); @@ -329,15 +333,17 @@ void VolumeMeter::paintEvent(QPaintEvent *event) int scaledPeak = int((float)width * curPeak); int scaledPeakHold = int((float)width * curPeakHold); + float db = obs_volmeter_get_cur_db(OBS_FADER_LOG, curPeakHold); + gradient.setStart(qreal(scaledMag), 0); gradient.setFinalStop(qreal(scaledPeak), 0); - gradient.setColorAt(0, magColor); - gradient.setColorAt(1, peakColor); + gradient.setColorAt(0, db == 0.0f ? clipColor1 : magColor); + gradient.setColorAt(1, db == 0.0f ? clipColor2 : peakColor); // RMS painter.fillRect(0, 0, scaledMag, height, - magColor); + db == 0.0f ? clipColor1 : magColor); // RMS - Peak gradient painter.fillRect(scaledMag, 0, diff --git a/UI/volume-control.hpp b/UI/volume-control.hpp index 2f54aeb15..f9876dfb8 100644 --- a/UI/volume-control.hpp +++ b/UI/volume-control.hpp @@ -31,6 +31,7 @@ private: uint64_t lastUpdateTime = 0; QColor bkColor, magColor, peakColor, peakHoldColor; + QColor clipColor1, clipColor2; public: explicit VolumeMeter(QWidget *parent = 0);