1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
2 
3 #ifndef SPECTMORPH_MORPH_OUTPUT_MODULE_HH
4 #define SPECTMORPH_MORPH_OUTPUT_MODULE_HH
5 
6 #include "smmorphoperatormodule.hh"
7 #include "smmorphplanvoice.hh"
8 #include "smeffectdecoder.hh"
9 
10 namespace SpectMorph {
11 
12 class MorphOutputModule : public MorphOperatorModule
13 {
14   std::vector<MorphOperatorModule *> out_ops;
15   std::vector<EffectDecoder *>       out_decoders;
16   TimeInfo                           block_time;
17 
18   bool  m_portamento;
19   float m_portamento_glide;
20   float m_velocity_sensitivity;
21 
22 public:
23   MorphOutputModule (MorphPlanVoice *voice);
24   ~MorphOutputModule();
25 
26   void set_config (MorphOperator *op);
27   void process (const TimeInfo& time_info, size_t n_samples, float **values, size_t n_ports, const float *freq_in = nullptr);
28   void retrigger (const TimeInfo& time_info, int channel, float freq, int midi_velocity);
29   void release();
30   bool done();
31 
32   bool  portamento() const;
33   float portamento_glide() const;
34   float velocity_sensitivity() const;
35   TimeInfo compute_time_info() const;
36 };
37 
38 }
39 
40 #endif
41