+
+void
+AudioContent::set_audio_gain (float g)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _audio_gain = g;
+ }
+
+ signal_changed (AudioContentProperty::AUDIO_GAIN);
+}
+
+void
+AudioContent::set_audio_delay (int d)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ _audio_delay = d;
+ }
+
+ signal_changed (AudioContentProperty::AUDIO_DELAY);
+}
+
+boost::signals2::connection
+AudioContent::analyse_audio (boost::function<void()> finished)
+{
+ shared_ptr<const Film> film = _film.lock ();
+ assert (film);
+
+ shared_ptr<AnalyseAudioJob> job (new AnalyseAudioJob (film, dynamic_pointer_cast<AudioContent> (shared_from_this())));
+ boost::signals2::connection c = job->Finished.connect (finished);
+ JobManager::instance()->add (job);
+
+ return c;
+}
+
+boost::filesystem::path
+AudioContent::audio_analysis_path () const
+{
+ shared_ptr<const Film> film = _film.lock ();
+ if (!film) {
+ return boost::filesystem::path ();
+ }
+
+ boost::filesystem::path p = film->audio_analysis_dir ();
+ p /= digest ();
+ return p;
+}
+
+string
+AudioContent::technical_summary () const
+{
+ return String::compose (
+ "audio: channels %1, length %2, raw rate %3, out rate %4",
+ audio_channels(),
+ audio_length().seconds(),
+ content_audio_frame_rate(),
+ output_audio_frame_rate()
+ );