X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fexport_graph_builder.cc;h=a15a48a350739f1504eb45fbba13c07ecaaf5117;hb=5b40e073e9c973479c3d286a007c57e1e0fa3d0f;hp=bdcdf2620e21f924ddb087895ea5edf28ef3122a;hpb=6c10b31af146741bc1f6f3072de5bf94db2903d9;p=ardour.git diff --git a/libs/ardour/export_graph_builder.cc b/libs/ardour/export_graph_builder.cc index bdcdf2620e..a15a48a350 100644 --- a/libs/ardour/export_graph_builder.cc +++ b/libs/ardour/export_graph_builder.cc @@ -307,8 +307,15 @@ ExportGraphBuilder::SFC::SFC (ExportGraphBuilder &parent, FileSpec const & new_c unsigned channels = new_config.channel_config->get_n_chans(); _analyse = config.format->analyse(); if (_analyse) { + framecnt_t sample_rate = parent.session.nominal_frame_rate(); + framecnt_t sb = config.format->silence_beginning_at (parent.timespan->get_start(), sample_rate); + framecnt_t se = config.format->silence_end_at (parent.timespan->get_end(), sample_rate); + framecnt_t duration = parent.timespan->get_length () + sb + se; + max_frames = min ((framecnt_t) 8192 * channels, max ((framecnt_t) 4096 * channels, max_frames)); + chunker.reset (new Chunker (max_frames)); analyser.reset (new Analyser (config.format->sample_rate(), channels, max_frames, - (framecnt_t) ceil (parent.timespan->get_length () * config.format->sample_rate () / (double) parent.session.nominal_frame_rate ()))); + (framecnt_t) ceil (duration * config.format->sample_rate () / (double) sample_rate))); + chunker->add_output (analyser); parent.add_analyser (config.filename->get_path (config.format), analyser); } @@ -332,11 +339,19 @@ ExportGraphBuilder::SFC::SFC (ExportGraphBuilder &parent, FileSpec const & new_c } } +void +ExportGraphBuilder::SFC::set_peak (float gain) +{ + if (_analyse) { + analyser->set_normalization_gain (gain); + } +} + ExportGraphBuilder::FloatSinkPtr ExportGraphBuilder::SFC::sink () { if (_analyse) { - return analyser; + return chunker; } else if (data_width == 8 || data_width == 16) { return short_converter; } else if (data_width == 24 || data_width == 32) { @@ -476,7 +491,10 @@ ExportGraphBuilder::Normalizer::process() void ExportGraphBuilder::Normalizer::start_post_processing() { - normalizer->set_peak (peak_reader->get_peak()); + const float gain = normalizer->set_peak (peak_reader->get_peak()); + for (boost::ptr_list::iterator i = children.begin(); i != children.end(); ++i) { + (*i).set_peak (gain); + } tmp_file->seek (0, SEEK_SET); tmp_file->add_output (normalizer); parent.normalizers.push_back (this);