X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ffft_result.h;h=d7895b0f6044c7bc395d4d76acc03747555d3420;hb=6b1b72a247bf04c81292fc41af4f69c9b7f90379;hp=c6c952db1c348ae19740c7000cc0cf173915a6f8;hpb=997e4b1f9cd7ccfc704b7c035051da7f60d831e7;p=ardour.git diff --git a/gtk2_ardour/fft_result.h b/gtk2_ardour/fft_result.h index c6c952db1c..d7895b0f60 100644 --- a/gtk2_ardour/fft_result.h +++ b/gtk2_ardour/fft_result.h @@ -1,27 +1,26 @@ /* - Copyright (C) 2006 Paul Davis - Written by Sampo Savolainen - - 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., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2006, 2016 Paul Davis + * Written by Sampo Savolainen & Robin Gareus + * + * 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 __ardour_fft_result_h #define __ardour_fft_result_h -#include +#include #include #include @@ -32,47 +31,56 @@ class FFTGraph; class FFTResult { - public: - - ~FFTResult(); - - void analyzeWindow(float *window); - void finalize(); - - const int length() { return _dataSize; } - - float avgAt(int x); - float maxAt(int x); - float minAt(int x); - - const float minimum() { return _minimum; } - const float maximum() { return _maximum; } - - const Gdk::Color get_color() { return _color; } - - private: - FFTResult(FFTGraph *graph, Gdk::Color color, std::string trackname); - - int _averages; - - float* _data_avg; - float* _data_max; - float* _data_min; - - float* _work; - - int _windowSize; - int _dataSize; - - float _minimum; - float _maximum; - - FFTGraph *_graph; - - Gdk::Color _color; - std::string _trackname; - +public: + + ~FFTResult (); + + void analyzeWindow (float *window); + void finalize (); + + unsigned int length () const { return _dataSize; } + + float avgAt (unsigned int x, bool p) const + { return p ? _data_prop_avg[x] : _data_flat_avg[x]; } + float maxAt (unsigned int x, bool p) const + { return p ? _data_prop_max[x] : _data_flat_max[x]; } + float minAt (unsigned int x, bool p) const + { return p ? _data_prop_min[x] : _data_flat_min[x]; } + + float minimum (bool p) const + { return p ? _min_prop : _min_flat; } + float maximum (bool p) const + { return p ? _max_prop : _max_flat; } + + const Gdk::Color& get_color () const { return _color; } + +private: + FFTResult (FFTGraph *graph, Gdk::Color color, std::string trackname); friend class FFTGraph; + + int _averages; + + float* _data_flat_avg; + float* _data_flat_max; + float* _data_flat_min; + float* _data_prop_avg; + float* _data_prop_max; + float* _data_prop_min; + + unsigned int _windowSize; + unsigned int _dataSize; + + float _min_flat; + float _max_flat; + float _min_prop; + float _max_prop; + + FFTGraph *_graph; + + Gdk::Color _color; + std::string _trackname; + + static float power_to_db (float v) { return v > 1e-20 ? 10.0f * log10f (v) : -200.0f; } }; #endif /* __ardour_fft_result_h */