1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html 2 3 #ifndef SPECTMORPH_MORPH_LINEAR_MODULE_HH 4 #define SPECTMORPH_MORPH_LINEAR_MODULE_HH 5 6 #include "smmorphplan.hh" 7 #include "smmorphoutput.hh" 8 #include "smmorphoperatormodule.hh" 9 #include "smmorphlinear.hh" 10 #include "smmorphsourcemodule.hh" 11 12 namespace SpectMorph 13 { 14 15 class MorphLinearModule : public MorphOperatorModule 16 { 17 MorphOperatorModule *left_mod; 18 MorphOperatorModule *right_mod; 19 MorphOperatorModule *control_mod; 20 SimpleWavSetSource left_source; 21 bool have_left_source; 22 SimpleWavSetSource right_source; 23 bool have_right_source; 24 float morphing; 25 bool db_linear; 26 27 MorphLinear::ControlType control_type; 28 29 Audio audio; 30 AudioBlock audio_block; 31 32 struct MySource : public LiveDecoderSource 33 { 34 MorphLinearModule *module; 35 36 // temporary data for morphing (avoid malloc by putting it here) 37 AudioBlock left_block; 38 AudioBlock right_block; 39 40 void interp_mag_one (double interp, uint16_t *left, uint16_t *right); 41 void retrigger (int channel, float freq, int midi_velocity, float mix_freq); 42 Audio* audio(); 43 AudioBlock *audio_block (size_t index); 44 } my_source; 45 46 public: 47 MorphLinearModule (MorphPlanVoice *voice); 48 ~MorphLinearModule(); 49 50 void set_config (MorphOperator *op); 51 LiveDecoderSource *source(); 52 }; 53 54 } 55 56 #endif 57