From b0834f33e972a6e7b0d234d09e420007943a136d Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 3 Sep 2015 13:52:10 +0100 Subject: Peak value of audio into the audio tab. --- src/lib/audio_analysis.cc | 19 +++++++++++++++++++ src/lib/audio_analysis.h | 4 ++++ src/lib/job_manager.cc | 2 +- src/lib/job_manager.h | 2 +- 4 files changed, 25 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc index 6fcd97c94..10e022322 100644 --- a/src/lib/audio_analysis.cc +++ b/src/lib/audio_analysis.cc @@ -21,6 +21,8 @@ #include "cross.h" #include "util.h" #include "raw_convert.h" +#include "playlist.h" +#include "audio_content.h" #include #include #include @@ -38,6 +40,7 @@ using std::cout; using std::max; using std::list; using boost::shared_ptr; +using boost::dynamic_pointer_cast; AudioAnalysis::AudioAnalysis (int channels) { @@ -115,3 +118,19 @@ AudioAnalysis::write (boost::filesystem::path filename) doc->write_to_file_formatted (filename.string ()); } + +float +AudioAnalysis::gain_correction (shared_ptr playlist) +{ + if (playlist->content().size() == 1 && analysis_gain ()) { + /* In this case we know that the analysis was of a single piece of content and + we know that content's gain when the analysis was run. Hence we can work out + what correction is now needed to make it look `right'. + */ + shared_ptr ac = dynamic_pointer_cast (playlist->content().front ()); + DCPOMATIC_ASSERT (ac); + return ac->audio_gain() - analysis_gain().get (); + } + + return 0.0f; +} diff --git a/src/lib/audio_analysis.h b/src/lib/audio_analysis.h index 5e71705bf..0d06e5973 100644 --- a/src/lib/audio_analysis.h +++ b/src/lib/audio_analysis.h @@ -31,6 +31,8 @@ namespace xmlpp { class Element; } +class Playlist; + class AudioAnalysis : public boost::noncopyable { public: @@ -65,6 +67,8 @@ public: void write (boost::filesystem::path); + float gain_correction (boost::shared_ptr playlist); + private: std::vector > _data; boost::optional _peak; diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 3748fa353..0597983db 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -146,8 +146,8 @@ JobManager::scheduler () } if (active_job != _last_active_job) { + emit (boost::bind (boost::ref (ActiveJobsChanged), _last_active_job, active_job)); _last_active_job = active_job; - emit (boost::bind (boost::ref (ActiveJobsChanged), active_job)); } dcpomatic_sleep (1); diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h index 7de7862a1..560b5ca66 100644 --- a/src/lib/job_manager.h +++ b/src/lib/job_manager.h @@ -53,7 +53,7 @@ public: ); boost::signals2::signal)> JobAdded; - boost::signals2::signal)> ActiveJobsChanged; + boost::signals2::signal, boost::optional)> ActiveJobsChanged; static JobManager* instance (); static void drop (); -- cgit v1.2.3