OpenWareLaboratory
DryWetProcessor.h
Go to the documentation of this file.
1 #ifndef __DryWetProcessor_h__
2 #define __DryWetProcessor_h__
3 
4 #include <utility>
5 #include "SignalProcessor.h"
6 
7 template<class Processor>
8 class DryWetSignalProcessor : public Processor {
9 protected:
11  float mix_amount;
12 public:
13  template <typename... Args>
14  DryWetSignalProcessor(FloatArray buffer, Args&&... args) :
15  Processor(std::forward<Args>(args)...), mix_buffer(buffer), mix_amount(0) {}
16  void setMix(float amount){
17  mix_amount = amount;
18  }
19  float getMix(){
20  return mix_amount;
21  }
22  void process(FloatArray input, FloatArray output){
23  mix_buffer.copyFrom(input);
24  Processor::process(input, output);
25  output.multiply(mix_amount);
27  output.add(mix_buffer);
28  }
29  template <typename... Args>
30  static DryWetSignalProcessor<Processor>* create(size_t blocksize, Args&&... args){
31  FloatArray buffer = FloatArray::create(blocksize);
32  return new DryWetSignalProcessor<Processor>(buffer, std::forward<Args>(args)...);
33  }
36  Processor::destroy(obj);
37  }
38 };
39 
40 template<class Processor>
41 class DryWetMultiSignalProcessor : public Processor {
42 protected:
44  float mix_amount;
45 public:
46  template <typename... Args>
47  DryWetMultiSignalProcessor(AudioBuffer* buffer, Args&&... args) :
48  Processor(std::forward<Args>(args)...), mix_buffer(buffer), mix_amount(0) {}
49  void setMix(float amount){
50  mix_amount = amount;
51  }
52  float getMix(){
53  return mix_amount;
54  }
55  void process(AudioBuffer& input, AudioBuffer& output){
56  mix_buffer->copyFrom(input);
57  Processor::process(input, output);
58  output.multiply(mix_amount);
60  output.add(*mix_buffer);
61  }
62  template <typename... Args>
63  static DryWetMultiSignalProcessor<Processor>* create(size_t channels, size_t blocksize, Args&&... args){
64  AudioBuffer* buffer = AudioBuffer::create(channels, blocksize);
65  return new DryWetMultiSignalProcessor<Processor>(buffer, std::forward<Args>(args)...);
66  }
69  Processor::destroy(obj);
70  }
71 };
72 
73 #endif // __DryWetProcessor_h__
void multiply(float scalar)
Definition: AudioBuffer.h:13
static AudioBuffer * create(int channels, int samples)
void add(float scalar)
Definition: AudioBuffer.h:17
static void destroy(AudioBuffer *buffer)
void copyFrom(AudioBuffer &other)
Definition: AudioBuffer.h:25
DryWetMultiSignalProcessor(AudioBuffer *buffer, Args &&... args)
static void destroy(DryWetMultiSignalProcessor< Processor > *obj)
void setMix(float amount)
static DryWetMultiSignalProcessor< Processor > * create(size_t channels, size_t blocksize, Args &&... args)
void process(AudioBuffer &input, AudioBuffer &output)
void process(FloatArray input, FloatArray output)
static void destroy(DryWetSignalProcessor< Processor > *obj)
void setMix(float amount)
DryWetSignalProcessor(FloatArray buffer, Args &&... args)
static DryWetSignalProcessor< Processor > * create(size_t blocksize, Args &&... args)
This class contains useful methods for manipulating arrays of floats.
Definition: FloatArray.h:12
void multiply(FloatArray operand2, FloatArray destination)
Element-wise multiplication between arrays.
Definition: FloatArray.cpp:290
void add(FloatArray operand2, FloatArray destination)
Element-wise sum between arrays.
Definition: FloatArray.cpp:231
static void destroy(FloatArray array)
Destroys a FloatArray created with the create() method.
Definition: FloatArray.cpp:472
static FloatArray create(int size)
Creates a new FloatArray.
Definition: FloatArray.cpp:466
void copyFrom(SimpleArray< T > source)
Copies the content of another array into this array.
Definition: SimpleArray.h:86