X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Faudio_content.cc;h=8458e3314c7be41b36aaccfdb8fdde437fe7b8da;hb=51cc8f575b55f2a21d8503965b628c0f59f1ed33;hp=9f0d26573453c347873237e21e195df9b53aab36;hpb=f0edd6ab35c3c2b7800a26ec8206adab75e5f633;p=dcpomatic.git diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index 9f0d26573..8458e3314 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -26,12 +26,16 @@ #include "exceptions.h" #include "config.h" #include "frame_rate_change.h" +#include "audio_processor.h" #include "i18n.h" using std::string; using std::cout; using std::vector; +using std::stringstream; +using std::fixed; +using std::setprecision; using boost::shared_ptr; using boost::dynamic_pointer_cast; using dcp::raw_convert; @@ -42,11 +46,22 @@ int const AudioContentProperty::AUDIO_FRAME_RATE = 202; int const AudioContentProperty::AUDIO_GAIN = 203; int const AudioContentProperty::AUDIO_DELAY = 204; int const AudioContentProperty::AUDIO_MAPPING = 205; +int const AudioContentProperty::AUDIO_PROCESSOR = 206; + +AudioContent::AudioContent (shared_ptr f) + : Content (f) + , _audio_gain (0) + , _audio_delay (Config::instance()->default_audio_delay ()) + , _audio_processor (0) +{ + +} AudioContent::AudioContent (shared_ptr f, DCPTime s) : Content (f, s) , _audio_gain (0) , _audio_delay (Config::instance()->default_audio_delay ()) + , _audio_processor (0) { } @@ -55,15 +70,20 @@ AudioContent::AudioContent (shared_ptr f, boost::filesystem::path p) : Content (f, p) , _audio_gain (0) , _audio_delay (Config::instance()->default_audio_delay ()) + , _audio_processor (0) { } AudioContent::AudioContent (shared_ptr f, cxml::ConstNodePtr node) : Content (f, node) + , _audio_processor (0) { _audio_gain = node->number_child ("AudioGain"); _audio_delay = node->number_child ("AudioDelay"); + if (node->optional_string_child ("AudioProcessor")) { + _audio_processor = AudioProcessor::from_id (node->string_child ("AudioProcessor")); + } } AudioContent::AudioContent (shared_ptr f, vector > c) @@ -86,6 +106,7 @@ AudioContent::AudioContent (shared_ptr f, vector _audio_gain = ref->audio_gain (); _audio_delay = ref->audio_delay (); + _audio_processor = ref->audio_processor (); } void @@ -94,6 +115,9 @@ AudioContent::as_xml (xmlpp::Node* node) const boost::mutex::scoped_lock lm (_mutex); node->add_child("AudioGain")->add_child_text (raw_convert (_audio_gain)); node->add_child("AudioDelay")->add_child_text (raw_convert (_audio_delay)); + if (_audio_processor) { + node->add_child("AudioProcessor")->add_child_text (_audio_processor->id ()); + } } @@ -119,6 +143,22 @@ AudioContent::set_audio_delay (int d) signal_changed (AudioContentProperty::AUDIO_DELAY); } +void +AudioContent::set_audio_processor (AudioProcessor const * p) +{ + { + boost::mutex::scoped_lock lm (_mutex); + _audio_processor = p; + } + + /* The channel count might have changed, so reset the mapping */ + AudioMapping m (processed_audio_channels ()); + m.make_default (); + set_audio_mapping (m); + + signal_changed (AudioContentProperty::AUDIO_PROCESSOR); +} + boost::signals2::connection AudioContent::analyse_audio (boost::function finished) { @@ -141,7 +181,7 @@ AudioContent::audio_analysis_path () const } boost::filesystem::path p = film->audio_analysis_dir (); - p /= digest() + "_" + audio_mapping().digest(); + p /= digest().get_value_or ("X") + "_" + audio_mapping().digest(); return p; } @@ -188,3 +228,33 @@ AudioContent::resampled_audio_frame_rate () const return rint (t); } + +int +AudioContent::processed_audio_channels () const +{ + if (!audio_processor ()) { + return audio_channels (); + } + + return audio_processor()->out_channels (audio_channels ()); +} + +string +AudioContent::processing_description () const +{ + stringstream d; + + if (audio_frame_rate() != resampled_audio_frame_rate ()) { + stringstream from; + from << fixed << setprecision(3) << (audio_frame_rate() / 1000.0); + stringstream to; + to << fixed << setprecision(3) << (resampled_audio_frame_rate() / 1000.0); + + d << String::compose (_("Audio will be resampled from %1kHz to %2kHz."), from.str(), to.str()); + } else { + d << _("Audio will not be resampled."); + } + + return d.str (); +} +