#define __ardour_export_graph_builder_h__
#include "ardour/export_handler.h"
+#include "ardour/export_analysis.h"
#include "audiographer/utils/identity_vertex.h"
namespace AudioGrapher {
class SampleRateConverter;
class PeakReader;
+ class LoudnessReader;
class Normalizer;
+ class Analyser;
template <typename T> class Chunker;
template <typename T> class SampleFormatConverter;
template <typename T> class Interleaver;
typedef boost::shared_ptr<AudioGrapher::Sink<Sample> > FloatSinkPtr;
typedef boost::shared_ptr<AudioGrapher::IdentityVertex<Sample> > IdentityVertexPtr;
+ typedef boost::shared_ptr<AudioGrapher::Analyser> AnalysisPtr;
typedef std::map<ExportChannelPtr, IdentityVertexPtr> ChannelMap;
+ typedef std::map<std::string, AnalysisPtr> AnalysisMap;
public:
void cleanup (bool remove_out_files = false);
void set_current_timespan (boost::shared_ptr<ExportTimespan> span);
void add_config (FileSpec const & config);
+ void get_analysis_results (AnalysisResults& results);
private:
+ void add_analyser (const std::string& fn, AnalysisPtr ap) {
+ analysis_map.insert (std::make_pair (fn, ap));
+ }
+
void add_split_config (FileSpec const & config);
-
+
class Encoder {
public:
template <typename T> boost::shared_ptr<AudioGrapher::Sink<T> > init (FileSpec const & new_config);
PBD::ScopedConnection copy_files_connection;
std::string writer_filename;
-
+
// Only one of these should be available at a time
FloatWriterPtr float_writer;
IntWriterPtr int_writer;
void add_child (FileSpec const & new_config);
void remove_children (bool remove_out_files);
bool operator== (FileSpec const & other_config) const;
+ void set_peak (float);
private:
+ typedef boost::shared_ptr<AudioGrapher::Chunker<float> > ChunkerPtr;
typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<Sample> > FloatConverterPtr;
typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<int> > IntConverterPtr;
typedef boost::shared_ptr<AudioGrapher::SampleFormatConverter<short> > ShortConverterPtr;
boost::ptr_list<Encoder> children;
int data_width;
+ ChunkerPtr chunker;
+ AnalysisPtr analyser;
+ bool _analyse;
// Only one of these should be available at a time
FloatConverterPtr float_converter;
IntConverterPtr int_converter;
private:
typedef boost::shared_ptr<AudioGrapher::PeakReader> PeakReaderPtr;
+ typedef boost::shared_ptr<AudioGrapher::LoudnessReader> LoudnessReaderPtr;
typedef boost::shared_ptr<AudioGrapher::Normalizer> NormalizerPtr;
typedef boost::shared_ptr<AudioGrapher::TmpFile<Sample> > TmpFilePtr;
typedef boost::shared_ptr<AudioGrapher::Threader<Sample> > ThreaderPtr;
FileSpec config;
framecnt_t max_frames_out;
-
+ bool use_loudness;
BufferPtr buffer;
PeakReaderPtr peak_reader;
TmpFilePtr tmp_file;
NormalizerPtr normalizer;
ThreaderPtr threader;
+ LoudnessReaderPtr loudness_reader;
boost::ptr_list<SFC> children;
PBD::ScopedConnection post_processing_connection;
FloatSinkPtr sink ();
void add_child (FileSpec const & new_config);
void remove_children (bool remove_out_files);
-
+
bool operator== (FileSpec const & other_config) const;
private:
std::list<Normalizer *> normalizers;
+ AnalysisMap analysis_map;
+
Glib::ThreadPool thread_pool;
};