Add loudness histogram Feature to the EBUr128 VAMP plugin
authorRobin Gareus <robin@gareus.org>
Wed, 10 Feb 2016 14:08:44 +0000 (15:08 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 10 Feb 2016 14:11:45 +0000 (15:11 +0100)
libs/ardour/ardour/export_analysis.h
libs/vamp-plugins/EBUr128.cpp

index bab79bba4e5bc4558ede3845cee468472b0f6fb1..360294ce071b054643eebe3c1c09f9443608a6e5 100644 (file)
@@ -31,26 +31,33 @@ namespace ARDOUR {
                ExportAnalysis ()
                        : loudness (0)
                        , loudness_range (0)
+                       , loudness_hist_max (0)
                        , have_loudness (false)
                {
-                       memset (_peaks, 0, sizeof(_peaks));
-                       memset (_spectrum, 0, sizeof(_spectrum));
+                       memset (peaks, 0, sizeof(peaks));
+                       memset (spectrum, 0, sizeof(spectrum));
+                       memset (loudness_hist, 0, sizeof(loudness_hist));
                }
 
                ExportAnalysis (const ExportAnalysis& other)
                        : loudness (other.loudness)
                        , loudness_range (other.loudness_range)
+                       , loudness_hist_max (other.loudness_hist_max)
                        , have_loudness (other.have_loudness)
                {
-                       memcpy (_peaks, other._peaks, sizeof(_peaks));
-                       memcpy (_spectrum, other._spectrum, sizeof(_spectrum));
+                       memcpy (peaks, other.peaks, sizeof(peaks));
+                       memcpy (spectrum, other.spectrum, sizeof(spectrum));
+                       memcpy (loudness_hist, other.loudness_hist, sizeof(loudness_hist));
                }
 
                float loudness;
                float loudness_range;
+               int loudness_hist[540];
+               int loudness_hist_max;
                bool have_loudness;
-               PeakData _peaks[800];
-               float _spectrum[800][256];
+
+               PeakData peaks[800];
+               float spectrum[800][200];
        };
 
        typedef boost::shared_ptr<ExportAnalysis> ExportAnalysisPtr;
index 1a3b9a401c50eba48485efe4fbc28bf2f6e109e1..a93dfe0e02c741e1ec2c3e5e2a3eb813c040692d 100644 (file)
@@ -111,7 +111,7 @@ VampEBUr128::getOutputDescriptors() const
     OutputDescriptor zc;
     zc.identifier = "loundless";
     zc.name = "Integrated loudness";
-    zc.description = "Integrated loudness";
+    zc.description = "Integrated Loudness";
     zc.unit = "LUFS";
     zc.hasFixedBinCount = true;
     zc.binCount = 0;
@@ -121,8 +121,8 @@ VampEBUr128::getOutputDescriptors() const
     list.push_back(zc);
 
     zc.identifier = "range";
-    zc.name = "Integrated loudness Range";
-    zc.description = "Dynamic Range of the audio";
+    zc.name = "Integrated Loudness Range";
+    zc.description = "Dynamic Range of the Audio";
     zc.unit = "LU";
     zc.hasFixedBinCount = true;
     zc.binCount = 0;
@@ -131,6 +131,17 @@ VampEBUr128::getOutputDescriptors() const
     zc.sampleType = OutputDescriptor::OneSamplePerStep;
     list.push_back(zc);
 
+    zc.identifier = "histogram";
+    zc.name = "Loudness Histogram";
+    zc.description = "Dynamic Range of the audio";
+    zc.unit = "";
+    zc.hasFixedBinCount = false;
+    zc.binCount = 0;
+    zc.hasKnownExtents = false;
+    zc.isQuantized = false;
+    zc.sampleType = OutputDescriptor::OneSamplePerStep;
+    list.push_back(zc);
+
     return list;
 }
 
@@ -166,5 +177,13 @@ VampEBUr128::getRemainingFeatures()
     range.values.push_back(ebu.range_max () - ebu.range_min ());
     returnFeatures[1].push_back(range);
 
+    Feature hist;
+    hist.hasTimestamp = false;
+    const int * hist_M = ebu.histogram_M();
+    for (int i = 110; i < 650; ++i) {
+       hist.values.push_back(hist_M[i]);
+    }
+    returnFeatures[2].push_back(hist);
+
     return returnFeatures;
 }