1 #ifndef __VoiceAllocator_h__
2 #define __VoiceAllocator_h__
4 template<
class SynthVoice,
int VOICES>
15 return 440 * exp2f((note - 69) / 12);
18 return 12 * log2f(freq / 440) + 69;
22 return voice[0]->getPitchBendRange();
29 for(
int i=0; i<VOICES; ++i)
36 for(
int i=0; i<VOICES; ++i)
43 for(
int i=0; i<VOICES; ++i)
47 return voice[0]->getTuning();
50 for(
int i=0; i<VOICES; ++i)
54 for(
int i=0; i<VOICES; ++i)
55 voice[i]->gate(
false);
59 for(
int i=0; i<VOICES; ++i)
72 for(
int i=0; i<VOICES; ++i)
90 float semitones = msb + lsb/100.0f;
150 template<
class Allocator,
class SynthVoice,
int VOICES>
157 template <
typename... Args>
159 Allocator(std::forward<Args>(args)...),
buffer(
buffer) {}
162 float sample = this->voice[0]->generate();
163 for(
int i=1; i<VOICES; ++i)
164 sample += this->voice[i]->
generate();
168 this->voice[0]->generate(output);
169 for(
int i=1; i<VOICES; ++i){
170 this->voice[i]->generate(
buffer);
184 template<
class Allocator,
class SynthVoice,
int VOICES>
191 template <
typename... Args>
193 Allocator(std::forward<Args>(args)...),
buffer(
buffer) {}
198 for(
int i=0; i<VOICES; ++i)
199 sample += this->voice[i]->
process(input);
203 for(
int i=0; i<VOICES; ++i){
204 this->voice[i]->process(input,
buffer);
218 template<
class Allocator,
class SynthVoice,
int VOICES>
225 template <
typename... Args>
227 Allocator(std::forward<Args>(args)...),
buffer(
buffer) {}
230 this->voice[0]->generate(output);
231 for(
int i=1; i<VOICES; ++i){
232 this->voice[i]->generate(*
buffer);
246 template<
class Allocator,
class SynthVoice,
int VOICES>
253 template <
typename... Args>
255 Allocator(std::forward<Args>(args)...),
buffer(
buffer) {}
259 for(
int i=0; i<VOICES; ++i){
260 this->voice[i]->process(input, *
buffer);
@ MIDI_RPN_PITCH_BEND_RANGE
@ MIDI_RPN_MODULATION_DEPTH_RANGE
static AudioBuffer * create(int channels, int samples)
static void destroy(AudioBuffer *buffer)
This class contains useful methods for manipulating arrays of floats.
void add(FloatArray operand2, FloatArray destination)
Element-wise sum between arrays.
static void destroy(FloatArray array)
Destroys a FloatArray created with the create() method.
static FloatArray create(int size)
Creates a new FloatArray.
uint8_t getControllerValue()
uint8_t getControllerNumber()
Base class for MIDI processors such as AbstractSynth.
virtual void modulate(MidiMessage msg)
virtual void process(MidiMessage msg)
Base class for signal generators such as Oscillators.
Base class for signal processors such as Filters.
virtual ~VoiceAllocatorMultiSignalGenerator()
static void destroy(MyClass *obj)
static MyClass * create(size_t channels, size_t blocksize)
void generate(AudioBuffer &output)
VoiceAllocatorMultiSignalGenerator(AudioBuffer *buffer, Args &&... args)
static MyClass * create(size_t channels, size_t blocksize)
virtual ~VoiceAllocatorMultiSignalProcessor()
VoiceAllocatorMultiSignalProcessor(AudioBuffer *buffer, Args &&... args)
static void destroy(MyClass *obj)
void process(AudioBuffer &input, AudioBuffer &output)
virtual ~VoiceAllocatorSignalGenerator()
VoiceAllocatorSignalGenerator(FloatArray buffer, Args &&... args)
static void destroy(MyClass *obj)
float generate()
Produce the next consecutive sample.
void generate(FloatArray output)
Produce a block of samples.
static MyClass * create(size_t blocksize)
virtual ~VoiceAllocatorSignalProcessor()
static void destroy(MyClass *obj)
float process(float input)
virtual void process(MidiMessage msg)
VoiceAllocatorSignalProcessor(FloatArray buffer, Args &&... args)
static MyClass * create(size_t blocksize)
void process(FloatArray input, FloatArray output)
void setSustain(bool value)
SynthVoice * voice[VOICES]
void sustain(MidiMessage msg)
SynthVoice * getVoice(size_t index)
virtual void sustainOff()
void setPitchBendRange(float range)
Set pitch bend range in semitones.
float getPitchBendRange()
void setVoice(size_t index, SynthVoice *obj)
void controlChange(MidiMessage msg)
void setDynamicRange(float range)
Set the MIDI velocity dynamic range in dB, default 72dB.
void setModulationDepthRange(float range)
Set modulation depth range, from 0 to 1.0.
static float frequencyToNote(float freq)
void rpn(uint16_t id, uint8_t msb, uint8_t lsb, MidiMessage msg)
void setTuning(float frequency)
static float noteToFrequency(float note)
void setParameter(uint8_t parameter_id, float value)