00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MARSYAS_AIMSAI_H
00020 #define MARSYAS_AIMSAI_H
00021
00022 #include "MarSystem.h"
00023
00024
00025
00026
00027 #include <vector>
00028 #include "StrobeList.h"
00029 #include "ERBTools.h"
00030
00031 namespace Marsyas
00032 {
00048 class marsyas_EXPORT AimSAI: public MarSystem
00049 {
00050 private:
00051 void myUpdate(MarControlPtr sender);
00052
00053
00054 void ResetInternal();
00055
00056
00057 void InitializeInternal();
00058
00059
00060 bool is_initialized;
00061
00062
00063 mrs_real initialized_israte;
00064 mrs_natural initialized_inobservations;
00065 mrs_natural initialized_insamples;
00066 mrs_real initialized_frame_period_ms;
00067 mrs_real initialized_min_delay_ms;
00068 mrs_real initialized_max_delay_ms;
00069 mrs_real initialized_buffer_memory_decay;
00070 mrs_natural initialized_max_concurrent_strobes;
00071 mrs_real initialized_strobe_weight_alpha;
00072
00073
00074 bool is_reset;
00075
00076
00077 mrs_real reseted_israte;
00078 mrs_natural reseted_inobservations;
00079 mrs_real reseted_frame_period_ms;
00080
00081
00082 bool is_centre_frequencies_calculated;
00083
00084
00085 mrs_natural centre_frequencies_inobservations;
00086 mrs_natural centre_frequencies_max_frequency;
00087 mrs_natural centre_frequencies_min_frequency;
00088
00089
00090
00091
00092 MarControlPtr ctrl_min_delay_ms_;
00093 MarControlPtr ctrl_max_delay_ms_;
00094 MarControlPtr ctrl_strobe_weight_alpha_;
00095
00096
00097 MarControlPtr ctrl_buffer_memory_decay_;
00098
00099
00100 MarControlPtr ctrl_frame_period_ms_;
00101
00102
00103 MarControlPtr ctrl_max_concurrent_strobes_;
00104
00105
00106 std::vector<StrobeList> active_strobes_;
00107
00108
00109 int min_strobe_delay_idx_;
00110
00111
00112 int max_strobe_delay_idx_;
00113
00114
00115 double sai_decay_factor_;
00116
00117
00118 std::vector<double> strobe_weights_;
00119
00120
00121 std::vector<int> next_strobes_;
00122
00123
00124 realvec sai_temp_;
00125
00126 int fire_counter_;
00127 int frame_period_samples_;
00128
00129
00130
00131 std::vector<std::vector<int> > strobes_;
00132 void findStrobes(realvec& in);
00133
00134
00135
00136
00137
00138 std::vector<double> centre_frequencies_;
00139
00140
00141
00142
00143
00144
00145 mrs_natural channel_count_;
00146
00147
00148 public:
00149 AimSAI(std::string name);
00150
00151 ~AimSAI();
00152 MarSystem* clone() const;
00153 void addControls();
00154
00155 void myProcess(realvec& in, realvec& out);
00156 };
00157
00158 }
00159
00160 #endif