diff options
| author | Carl Hetherington <cth@carlh.net> | 2015-09-03 13:52:10 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2015-09-14 10:21:11 +0100 |
| commit | b0834f33e972a6e7b0d234d09e420007943a136d (patch) | |
| tree | aac5cde453a18983a7c87462e1042ecd520218a4 /src/lib | |
| parent | d2bd0c628fd0616fe3b7dd02bd955b2c07ab48d5 (diff) | |
Peak value of audio into the audio tab.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/audio_analysis.cc | 19 | ||||
| -rw-r--r-- | src/lib/audio_analysis.h | 4 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 2 | ||||
| -rw-r--r-- | src/lib/job_manager.h | 2 |
4 files changed, 25 insertions, 2 deletions
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 <libxml++/libxml++.h> #include <boost/filesystem.hpp> #include <boost/foreach.hpp> @@ -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<const Playlist> 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<const AudioContent> ac = dynamic_pointer_cast<const AudioContent> (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<const Playlist> playlist); + private: std::vector<std::vector<AudioPoint> > _data; boost::optional<float> _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<void (boost::weak_ptr<Job>)> JobAdded; - boost::signals2::signal<void (boost::optional<std::string>)> ActiveJobsChanged; + boost::signals2::signal<void (boost::optional<std::string>, boost::optional<std::string>)> ActiveJobsChanged; static JobManager* instance (); static void drop (); |
