1 #ifndef INCLUDED_AUDIOFX_ANALYSIS_H 2 #define INCLUDED_AUDIOFX_ANALYSIS_H 3 4 #include <string> 5 #include <vector> 6 7 #include <pthread.h> 8 9 #include "samplebuffer_iterators.h" 10 #include "audiofx.h" 11 12 class MESSAGE_ITEM; 13 14 /** 15 * Virtual base for signal analyzers. 16 * @author Kai Vehmanen 17 */ 18 class EFFECT_ANALYSIS : public EFFECT_BASE { 19 20 public: 21 set_parameter(int param,parameter_t value)22 virtual void set_parameter(int param, parameter_t value) { } get_parameter(int param)23 virtual parameter_t get_parameter(int param) const { return(0.0); } 24 parameter_names(void)25 virtual std::string parameter_names(void) const { return(""); } 26 27 virtual ~EFFECT_ANALYSIS(void); 28 }; 29 30 /** 31 * Analyzes the audio signal volume by using a set of 32 * amplitude range buckets. 33 * 34 * @author Kai Vehmanen 35 */ 36 class EFFECT_VOLUME_BUCKETS : public EFFECT_ANALYSIS { 37 38 private: 39 40 std::vector<unsigned long int> num_of_samples; // number of samples processed 41 std::vector<std::vector<unsigned long int> > pos_samples_db; 42 std::vector<std::vector<unsigned long int> > neg_samples_db; 43 SAMPLE_SPECS::sample_t max_pos, max_neg; 44 45 mutable pthread_mutex_t lock_rep; 46 SAMPLE_ITERATOR_CHANNELS i; 47 48 void reset_all_stats(void); 49 void reset_period_stats(void); 50 void status_entry(const std::vector<unsigned long int>& buckets, std::string& otemp) const; 51 52 public: 53 54 parameter_t max_multiplier(void) const; 55 name(void)56 virtual std::string name(void) const { return("Volume analysis"); } parameter_names(void)57 virtual std::string parameter_names(void) const { return("cumulative-mode,result-max-multiplier"); } 58 59 virtual void parameter_description(int param, struct PARAM_DESCRIPTION *pd) const; 60 virtual void set_parameter(int param, parameter_t value); 61 virtual parameter_t get_parameter(int param) const; 62 63 virtual void init(SAMPLE_BUFFER *insample); 64 virtual void process(void); 65 virtual std::string status(void) const; 66 clone(void)67 virtual EFFECT_VOLUME_BUCKETS* clone(void) const { return new EFFECT_VOLUME_BUCKETS(*this); } new_expr(void)68 virtual EFFECT_VOLUME_BUCKETS* new_expr(void) const { return new EFFECT_VOLUME_BUCKETS(); } 69 EFFECT_VOLUME_BUCKETS (void); 70 virtual ~EFFECT_VOLUME_BUCKETS (void); 71 }; 72 73 /** 74 * Keeps track of peak amplitude. 75 * 76 * @author Kai Vehmanen 77 */ 78 class EFFECT_VOLUME_PEAK : public EFFECT_ANALYSIS { 79 80 public: 81 name(void)82 virtual std::string name(void) const { return("Peak amplitude watcher"); } 83 virtual std::string parameter_names(void) const; 84 85 virtual void parameter_description(int param, struct PARAM_DESCRIPTION *pd) const; 86 virtual void set_parameter(int param, parameter_t value); 87 virtual parameter_t get_parameter(int param) const; 88 89 virtual void init(SAMPLE_BUFFER *insample); 90 virtual void process(void); 91 // virtual std::string status(void) const; 92 clone(void)93 virtual EFFECT_VOLUME_PEAK* clone(void) const { return new EFFECT_VOLUME_PEAK(*this); } new_expr(void)94 virtual EFFECT_VOLUME_PEAK* new_expr(void) const { return new EFFECT_VOLUME_PEAK(); } 95 EFFECT_VOLUME_PEAK (void); 96 virtual ~EFFECT_VOLUME_PEAK (void); 97 98 private: 99 100 mutable volatile parameter_t * volatile max_amplitude_repp; 101 mutable long int clipped_samples_rep; 102 103 mutable std::string status_rep; 104 105 SAMPLE_ITERATOR_CHANNELS i; 106 }; 107 108 /** 109 * Calculates DC-offset. 110 * 111 * @author Kai Vehmanen 112 */ 113 class EFFECT_DCFIND : public EFFECT_ANALYSIS { 114 115 private: 116 117 std::vector<parameter_t> pos_sum; 118 std::vector<parameter_t> neg_sum; 119 std::vector<parameter_t> num_of_samples; 120 121 SAMPLE_SPECS::sample_t tempval; 122 SAMPLE_ITERATOR_CHANNELS i; 123 124 public: 125 126 parameter_t get_deltafix(int channel) const; 127 name(void)128 virtual std::string name(void) const { return("DC-Find"); } description(void)129 virtual std::string description(void) const { return("Calculates the DC-offset."); } 130 virtual std::string parameter_names(void) const; 131 132 virtual void init(SAMPLE_BUFFER *insample); 133 virtual void process(void); 134 virtual std::string status(void) const; 135 136 virtual void parameter_description(int param, struct PARAM_DESCRIPTION *pd) const; 137 virtual void set_parameter(int param, parameter_t value); 138 virtual parameter_t get_parameter(int param) const; 139 clone(void)140 virtual EFFECT_DCFIND* clone(void) const { return new EFFECT_DCFIND(*this); } new_expr(void)141 virtual EFFECT_DCFIND* new_expr(void) const { return new EFFECT_DCFIND(); } 142 EFFECT_DCFIND (void); 143 }; 144 145 #endif 146