diff options
author | Robin Gareus <robin@gareus.org> | 2016-05-02 13:58:51 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-05-02 15:44:13 +0200 |
commit | 7547f02c07875ba053e1c095e542f85291d7af5f (patch) | |
tree | 2bb5fac71898bf5436d017743cbdc83868026235 /libs/audiographer/audiographer/general | |
parent | bd461fe2023f7542006d74db2e17598340ebbeaf (diff) |
prepare loudness normalization
Diffstat (limited to 'libs/audiographer/audiographer/general')
-rw-r--r-- | libs/audiographer/audiographer/general/analyser.h | 23 | ||||
-rw-r--r-- | libs/audiographer/audiographer/general/loudness_reader.h | 64 |
2 files changed, 68 insertions, 19 deletions
diff --git a/libs/audiographer/audiographer/general/analyser.h b/libs/audiographer/audiographer/general/analyser.h index e8ca534954..9bd49b33c8 100644 --- a/libs/audiographer/audiographer/general/analyser.h +++ b/libs/audiographer/audiographer/general/analyser.h @@ -20,20 +20,13 @@ #define AUDIOGRAPHER_ANALYSER_H #include <fftw3.h> - -#include <vamp-hostsdk/PluginLoader.h> -#include <vamp-sdk/Plugin.h> - -#include "audiographer/visibility.h" -#include "audiographer/sink.h" -#include "audiographer/utils/listed_source.h" - +#include "loudness_reader.h" #include "ardour/export_analysis.h" namespace AudioGrapher { -class LIBAUDIOGRAPHER_API Analyser : public ListedSource<float>, public Sink<float> +class LIBAUDIOGRAPHER_API Analyser : public LoudnessReader { public: Analyser (float sample_rate, unsigned int channels, framecnt_t bufsize, framecnt_t n_samples); @@ -46,27 +39,20 @@ class LIBAUDIOGRAPHER_API Analyser : public ListedSource<float>, public Sink<flo _result.norm_gain_factor = gain; } - using Sink<float>::process; - static const float fft_range_db; + using Sink<float>::process; + private: float fft_power_at_bin (const uint32_t b, const float norm) const; ARDOUR::ExportAnalysis _result; - Vamp::Plugin* _ebur128_plugin; - Vamp::Plugin** _dbtp_plugin; - float _sample_rate; - unsigned int _channels; - framecnt_t _bufsize; framecnt_t _n_samples; framecnt_t _pos; framecnt_t _spp; framecnt_t _fpp; - float* _bufs[2]; - float* _hann_window; uint32_t _fft_data_size; double _fft_freq_per_bin; @@ -74,7 +60,6 @@ class LIBAUDIOGRAPHER_API Analyser : public ListedSource<float>, public Sink<flo float* _fft_data_out; float* _fft_power; fftwf_plan _fft_plan; - }; } // namespace diff --git a/libs/audiographer/audiographer/general/loudness_reader.h b/libs/audiographer/audiographer/general/loudness_reader.h new file mode 100644 index 0000000000..7431f5ef08 --- /dev/null +++ b/libs/audiographer/audiographer/general/loudness_reader.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2016 Robin Gareus <robin@gareus.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef AUDIOGRAPHER_LOUDNESS_READER_H +#define AUDIOGRAPHER_LOUDNESS_READER_H + +#include <vamp-hostsdk/PluginLoader.h> +#include <vamp-sdk/Plugin.h> + +#include "audiographer/visibility.h" +#include "audiographer/sink.h" +#include "audiographer/routines.h" +#include "audiographer/utils/listed_source.h" + +namespace AudioGrapher +{ + +class LIBAUDIOGRAPHER_API LoudnessReader : public ListedSource<float>, public Sink<float> +{ + public: + LoudnessReader (float sample_rate, unsigned int channels, framecnt_t bufsize); + ~LoudnessReader (); + + void reset (); + + float get_normalize_gain (float target_lufs, float target_dbtp); + float get_peak (float target_lufs = -23.f, float target_dbtp = -1.f) { + return 1.f / get_normalize_gain (target_lufs, target_dbtp); + } + + virtual void process (ProcessContext<float> const & c); + + using Sink<float>::process; + + protected: + Vamp::Plugin* _ebur_plugin; + Vamp::Plugin** _dbtp_plugin; + + float _sample_rate; + unsigned int _channels; + framecnt_t _bufsize; + framecnt_t _pos; + float* _bufs[2]; +}; + +} // namespace + + +#endif // AUDIOGRAPHER_LOUDNESS_READER_H |