summaryrefslogtreecommitdiff
path: root/src/wx/audio_dialog.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2015-06-03 15:31:21 +0100
committerCarl Hetherington <cth@carlh.net>2015-06-03 15:31:21 +0100
commitf98caf4af896e9be943046b84586da5c2e103f18 (patch)
tree993f719e293667c432c95026dc2bfd53d5b84982 /src/wx/audio_dialog.cc
parent92c377d1b9e781fbb4b1f1b7a76ca7dba0bd637f (diff)
Make show audio work on the whole DCP, not individual content.
Diffstat (limited to 'src/wx/audio_dialog.cc')
-rw-r--r--src/wx/audio_dialog.cc54
1 files changed, 30 insertions, 24 deletions
diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc
index 11de9586b..0034e793d 100644
--- a/src/wx/audio_dialog.cc
+++ b/src/wx/audio_dialog.cc
@@ -17,13 +17,15 @@
*/
-#include <boost/filesystem.hpp>
-#include "lib/audio_analysis.h"
-#include "lib/film.h"
-#include "lib/audio_content.h"
#include "audio_dialog.h"
#include "audio_plot.h"
#include "wx_util.h"
+#include "lib/audio_analysis.h"
+#include "lib/film.h"
+#include "lib/analyse_audio_job.h"
+#include "lib/job_manager.h"
+#include "lib/playlist.h"
+#include <boost/filesystem.hpp>
using boost::shared_ptr;
using boost::bind;
@@ -97,18 +99,13 @@ AudioDialog::AudioDialog (wxWindow* parent, shared_ptr<Film> film)
}
void
-AudioDialog::set_content (shared_ptr<AudioContent> c)
+AudioDialog::set_playlist (shared_ptr<const Playlist> p)
{
- _content_changed_connection.disconnect ();
-
- _content = c;
-
+ _playlist_connection.disconnect ();
+ _playlist = p;
+ _playlist_connection = _playlist->ContentChanged.connect (boost::bind (&AudioDialog::try_to_load_analysis, this));
try_to_load_analysis ();
- _plot->set_gain (_content->audio_gain ());
-
- _content_changed_connection = _content->Changed.connect (bind (&AudioDialog::content_changed, this, _2));
-
- SetTitle (wxString::Format (_("DCP-o-matic audio - %s"), std_to_wx(_content->path_summary()).data()));
+ SetTitle (_("DCP-o-matic audio"));
}
void
@@ -118,18 +115,27 @@ AudioDialog::try_to_load_analysis ()
return;
}
- if (!boost::filesystem::exists (_content->audio_analysis_path())) {
+ shared_ptr<const Film> film = _film.lock ();
+ DCPOMATIC_ASSERT (film);
+
+ boost::filesystem::path path = film->audio_analysis_path (_playlist);
+
+ if (!boost::filesystem::exists (path)) {
_plot->set_analysis (shared_ptr<AudioAnalysis> ());
_analysis.reset ();
- _analysis_finished_connection = _content->analyse_audio (bind (&AudioDialog::analysis_finished, this));
+ shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, _playlist));
+ _analysis_finished_connection = job->Finished.connect (bind (&AudioDialog::analysis_finished, this));
+ JobManager::instance()->add (job);
return;
}
try {
- _analysis.reset (new AudioAnalysis (_content->audio_analysis_path ()));
+ _analysis.reset (new AudioAnalysis (path));
} catch (xmlpp::exception& e) {
/* Probably an old-style analysis file: recreate it */
- _analysis_finished_connection = _content->analyse_audio (bind (&AudioDialog::analysis_finished, this));
+ shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, _playlist));
+ _analysis_finished_connection = job->Finished.connect (bind (&AudioDialog::analysis_finished, this));
+ JobManager::instance()->add (job);
return;
}
@@ -166,7 +172,10 @@ AudioDialog::try_to_load_analysis ()
void
AudioDialog::analysis_finished ()
{
- if (!boost::filesystem::exists (_content->audio_analysis_path())) {
+ shared_ptr<const Film> film = _film.lock ();
+ DCPOMATIC_ASSERT (film);
+
+ if (!boost::filesystem::exists (film->audio_analysis_path (_playlist))) {
/* We analysed and still nothing showed up, so maybe it was cancelled or it failed.
Give up.
*/
@@ -193,10 +202,7 @@ AudioDialog::channel_clicked (wxCommandEvent& ev)
void
AudioDialog::content_changed (int p)
{
- if (p == AudioContentProperty::AUDIO_GAIN) {
- _plot->set_gain (_content->audio_gain ());
- setup_peak_time ();
- } else if (p == AudioContentProperty::AUDIO_STREAMS) {
+ if (p == AudioContentProperty::AUDIO_GAIN || p == AudioContentProperty::AUDIO_STREAMS) {
try_to_load_analysis ();
}
}
@@ -232,7 +238,7 @@ AudioDialog::setup_peak_time ()
return;
}
- float peak_dB = 20 * log10 (_analysis->peak().get()) + _content->audio_gain();
+ float peak_dB = 20 * log10 (_analysis->peak().get());
_peak_time->SetLabel (
wxString::Format (