diff options
author | Robin Gareus <robin@gareus.org> | 2016-02-12 12:42:51 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-02-12 12:42:51 +0100 |
commit | 50145a93e697ab73a54187fff9d7ff8f8064bd6c (patch) | |
tree | ec37bd7a53016688cc7c3cb6ff4cedd64dc9244c /libs | |
parent | a60312cfeaa3b46fd5b8d8bafde7b7f7cb788cc0 (diff) |
export analysis: include true-peak positions.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/export_analysis.h | 3 | ||||
-rw-r--r-- | libs/audiographer/src/general/analyser.cc | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/libs/ardour/ardour/export_analysis.h b/libs/ardour/ardour/export_analysis.h index 9da0a4f787..f62cdf0d53 100644 --- a/libs/ardour/ardour/export_analysis.h +++ b/libs/ardour/ardour/export_analysis.h @@ -20,6 +20,7 @@ #define __ardour_export_analysis_h__ #include <map> +#include <set> #include <cstring> #include <boost/shared_ptr.hpp> @@ -53,6 +54,7 @@ namespace ARDOUR { , have_loudness (other.have_loudness) , have_dbtp (other.have_dbtp) , n_channels (other.n_channels) + , truepeakpos (other.truepeakpos) { memcpy (peaks, other.peaks, sizeof(peaks)); memcpy (spectrum, other.spectrum, sizeof(spectrum)); @@ -74,6 +76,7 @@ namespace ARDOUR { PeakData peaks[2][800]; float spectrum[800][200]; + std::set<framecnt_t> truepeakpos[2]; // bins with >= -1dBTB }; typedef boost::shared_ptr<ExportAnalysis> ExportAnalysisPtr; diff --git a/libs/audiographer/src/general/analyser.cc b/libs/audiographer/src/general/analyser.cc index 23c85e8a7c..d969095b08 100644 --- a/libs/audiographer/src/general/analyser.cc +++ b/libs/audiographer/src/general/analyser.cc @@ -248,13 +248,21 @@ Analyser::result () } } + const unsigned cmask = _result.n_channels - 1; // [0, 1] for (unsigned int c = 0; c < _channels; ++c) { if (!_dbtp_plugin[c]) { continue; } Vamp::Plugin::FeatureSet features = _dbtp_plugin[c]->getRemainingFeatures (); - if (!features.empty () && features.size () == 1) { + if (!features.empty () && features.size () == 2) { _result.have_dbtp = true; float p = features[0][0].values[0]; if (p > _result.truepeak) { _result.truepeak = p; } + + for (std::vector<float>::const_iterator i = features[1][0].values.begin(); + i != features[1][0].values.end(); ++i) { + const framecnt_t pk = (*i) / _spp; + const unsigned int cc = c & cmask; + _result.truepeakpos[cc].insert (pk); + } } } |