1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html 2 3 #ifndef SPECTMORPH_MORPH_WAV_SOURCE_MODULE_HH 4 #define SPECTMORPH_MORPH_WAV_SOURCE_MODULE_HH 5 6 #include "smmorphoperatormodule.hh" 7 #include "smwavset.hh" 8 #include "smproject.hh" 9 #include "smmorphwavsource.hh" 10 #include <memory> 11 12 namespace SpectMorph 13 { 14 15 class MorphWavSourceModule; 16 17 class MorphWavSourceModule : public MorphOperatorModule 18 { 19 class InstrumentSource : public LiveDecoderSource 20 { 21 Audio *active_audio = nullptr; 22 std::shared_ptr<WavSet> wav_set; 23 int object_id; 24 Project *project; 25 public: 26 MorphWavSourceModule *module = nullptr; 27 28 void retrigger (int channel, float freq, int midi_velocity, float mix_freq) override; 29 Audio *audio() override; 30 AudioBlock *audio_block (size_t index) override; 31 32 void update_project (Project *project); 33 void update_object_id (int object_id); 34 }; 35 36 float position = 0; 37 MorphWavSource::PlayMode play_mode; 38 MorphWavSource::ControlType position_control_type; 39 MorphOperatorModule *position_mod = nullptr; 40 41 InstrumentSource my_source; 42 43 public: 44 MorphWavSourceModule (MorphPlanVoice *voice); 45 ~MorphWavSourceModule(); 46 47 void set_config (MorphOperator *op); 48 LiveDecoderSource *source(); 49 }; 50 51 } 52 53 #endif 54