#include "lib/analyse_audio_job.h"
#include "lib/audio_content.h"
#include "lib/job_manager.h"
+#include <libxml++/libxml++.h>
#include <boost/filesystem.hpp>
using std::cout;
shared_ptr<const Film> film = _film.lock ();
DCPOMATIC_ASSERT (film);
- boost::filesystem::path path = film->audio_analysis_path (_playlist);
-
+ boost::filesystem::path const path = film->audio_analysis_path (_playlist);
if (!boost::filesystem::exists (path)) {
_plot->set_analysis (shared_ptr<AudioAnalysis> ());
_analysis.reset ();
- shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, _playlist));
- _analysis_finished_connection = job->Finished.connect (bind (&AudioDialog::analysis_finished, this));
- JobManager::instance()->add (job);
+ JobManager::instance()->analyse_audio (film, _playlist, _analysis_finished_connection, bind (&AudioDialog::analysis_finished, this));
return;
}
_analysis.reset (new AudioAnalysis (path));
} catch (xmlpp::exception& e) {
/* Probably an old-style analysis file: recreate it */
- shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, _playlist));
- _analysis_finished_connection = job->Finished.connect (bind (&AudioDialog::analysis_finished, this));
- JobManager::instance()->add (job);
+ JobManager::instance()->analyse_audio (film, _playlist, _analysis_finished_connection, bind (&AudioDialog::analysis_finished, this));
return;
}
_plot->set_analysis (_analysis);
- _plot->set_gain_correction (gain_correction ());
+ _plot->set_gain_correction (_analysis->gain_correction (_playlist));
setup_peak_time ();
/* Set up some defaults if no check boxes are checked */
/* We can use a short-cut to render the effect of this
change, rather than recalculating everything.
*/
- _plot->set_gain_correction (gain_correction ());
+ _plot->set_gain_correction (_analysis->gain_correction (_playlist));
setup_peak_time ();
} else {
try_to_load_analysis ();
return;
}
- float const peak_dB = 20 * log10 (_analysis->peak().get()) + gain_correction ();
+ float const peak_dB = 20 * log10 (_analysis->peak().get()) + _analysis->gain_correction (_playlist);
_peak_time->SetLabel (
wxString::Format (
try_to_load_analysis ();
return r;
}
-
-/** @return gain correction in dB required to be added to raw gain values to render
- * the dialog correctly.
- */
-float
-AudioDialog::gain_correction ()
-{
- if (_playlist->content().size() == 1 && _analysis->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->analysis_gain().get ();
- }
-
- return 0.0f;
-}