]> git.sesse.net Git - nageru/commitdiff
Add a peak display.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 29 Oct 2015 20:02:39 +0000 (21:02 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 29 Oct 2015 20:02:39 +0000 (21:02 +0100)
glwidget.cpp
mainwindow.cpp
mixer.h
ui_mainwindow.ui
vumeter.cpp
vumeter.h

index 2118ffe1c6dff368cc9b30604cead5b8af8bf7d0..075106aa695b2d582aab561a1faba58ff5b36247 100644 (file)
@@ -48,8 +48,12 @@ void GLWidget::initializeGL()
        static std::once_flag flag;
        std::call_once(flag, [this]{
                global_mixer = new Mixer(QGLFormat::toSurfaceFormat(format()));
-               global_mixer->set_audio_level_callback([this](float level){
-                       global_vu_meter->set_level(level);
+               global_mixer->set_audio_level_callback([this](float level_lufs, float peak_db){
+                       global_vu_meter->set_level(level_lufs);
+
+                       char buf[256];
+                       snprintf(buf, sizeof(buf), "%.1f", peak_db);
+                       global_peak_display->setText(buf);
                });
                global_mixer->start();
        });
index 29a863b2456ea568f36e014ae878df607884b753..0fc17b539fc4bad49795e163b8f2965bfc2610cf 100644 (file)
@@ -80,7 +80,9 @@ MainWindow::MainWindow()
        connect(ui->preview1, SIGNAL(transition_names_updated(std::vector<std::string>)),
                this, SLOT(set_transition_names(std::vector<std::string>)));
 
-       global_vu_meter = ui->vu_meter;  // global_mixer does not exist yet, so need to delay the hookup.
+       // global_mixer does not exist yet, so need to delay the actual hookups.
+       global_vu_meter = ui->vu_meter;
+       global_peak_display = ui->peak_display;
 }
 
 void MainWindow::resizeEvent(QResizeEvent* event)
diff --git a/mixer.h b/mixer.h
index 5b82b4e962fe0191d1b0c8b443e71aea4b01c8b0..7a0bfa3053fa6dc3bc4690ee0907fa533d0fbd9d 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -81,7 +81,7 @@ public:
                output_channel[output].set_frame_ready_callback(callback);
        }
 
-       typedef std::function<void(float)> audio_level_callback_t;
+       typedef std::function<void(float, float)> audio_level_callback_t;
        void set_audio_level_callback(audio_level_callback_t callback)
        {
                audio_level_callback = callback;
index c4a1d7c9c0dfc868997f941ef8c8e6c2ace9d6fb..3f0a21165421923865632debf293227dbb7f5976 100644 (file)
          </layout>
         </item>
         <item>
-         <widget class="VUMeter" name="vu_meter" native="true">
-          <property name="minimumSize">
-           <size>
-            <width>20</width>
-            <height>0</height>
-           </size>
+         <layout class="QVBoxLayout" name="verticalLayout_4">
+          <property name="leftMargin">
+           <number>0</number>
           </property>
-         </widget>
+          <item>
+           <widget class="VUMeter" name="vu_meter" native="true">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+              <horstretch>0</horstretch>
+              <verstretch>1</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>20</width>
+              <height>0</height>
+             </size>
+            </property>
+            <zorder>peak_display</zorder>
+            <zorder>peak_display</zorder>
+           </widget>
+          </item>
+          <item>
+           <widget class="QLabel" name="peak_display">
+            <property name="text">
+             <string>-0.0</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
        </layout>
       </item>
index 27ffc5ae5a6b0c86eb14f0f218b7baa59552c1b0..e56268ad46f0d6cddde59ba5d15b8134d9f411e7 100644 (file)
@@ -19,6 +19,7 @@ int lufs_to_pos(float level_lu, int height)
 }  // namespace
 
 VUMeter *global_vu_meter = nullptr;
+QLabel *global_peak_display = nullptr;
 
 VUMeter::VUMeter(QWidget *parent)
        : QWidget(parent)
index f9be2920493667e2053ddb2e954d521b21226eed..61fbf23a5995ddf505a3320ade5b8282e04aabbc 100644 (file)
--- a/vumeter.h
+++ b/vumeter.h
@@ -2,6 +2,7 @@
 #define VUMETER_H
 
 #include <QWidget>
+#include <QLabel>
 #include <QPaintEvent>
 
 #include <mutex>
@@ -27,5 +28,6 @@ private:
 };
 
 extern VUMeter *global_vu_meter;
+extern QLabel *global_peak_display;
 
 #endif