SpectMorph
smlivedecoder.hh
1 // Licensed GNU LGPL v3 or later: http://www.gnu.org/licenses/lgpl.html
2 
3 #ifndef SPECTMORPH_LIVEDECODER_HH
4 #define SPECTMORPH_LIVEDECODER_HH
5 
6 #include "smwavset.hh"
7 #include "smsinedecoder.hh"
8 #include "smnoisedecoder.hh"
9 #include "smlivedecodersource.hh"
10 #include "smpolyphaseinter.hh"
11 #include <vector>
12 
13 namespace SpectMorph {
14 
16 {
17  struct PartialState
18  {
19  float freq;
20  float phase;
21  };
22  std::vector<PartialState> pstate[2], *last_pstate;
23 
24  WavSet *smset;
25  Audio *audio;
26 
27  IFFTSynth *ifft_synth;
28  NoiseDecoder *noise_decoder;
29  LiveDecoderSource *source;
30  PolyPhaseInter *pp_inter;
31 
32  bool sines_enabled;
33  bool noise_enabled;
34  bool debug_fft_perf_enabled;
35  bool original_samples_enabled;
36 
37  size_t frame_size, frame_step;
38  size_t zero_values_at_start_scaled;
39  size_t loop_start_scaled;
40  size_t loop_end_scaled;
41  int loop_point;
42  float current_freq;
43  float current_mix_freq;
44  float latency_ms;
45 
46  size_t have_samples;
47  size_t block_size;
48  size_t pos;
49  size_t env_pos;
50  size_t frame_idx;
51  double original_sample_pos;
52 
53  size_t latency_zero_samples;
54  int noise_seed;
55 
56  Rapicorn::AlignedArray<float,16> *sse_samples;
57 public:
58  LiveDecoder (WavSet *smset);
60  ~LiveDecoder();
61 
62  void enable_noise (bool ne);
63  void enable_sines (bool se);
64  void enable_debug_fft_perf (bool dfp);
65  void enable_original_samples (bool eos);
66  void set_noise_seed (int seed);
67  void set_latency_ms (float latency_ms);
68 
69  void precompute_tables (float mix_freq);
70  void retrigger (int channel, float freq, int midi_velocity, float mix_freq);
71  void process (size_t n_values,
72  const float *freq_in,
73  const float *freq_mod_in,
74  float *audio_out);
75 
76  static size_t compute_loop_frame_index (size_t index, Audio *audio);
77 // later: bool done();
78 };
79 
80 }
81 #endif
Definition: smpolyphaseinter.hh:11
Audio sample containing many blocks.
Definition: smaudio.hh:79
Definition: smwavset.hh:29
Definition: smlivedecodersource.hh:10
Definition: smifftsynth.hh:15
Definition: smaudio.hh:15
Definition: smlivedecoder.hh:15
Decoder for the noise component (stochastic component) of the signal.
Definition: smnoisedecoder.hh:16