You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
BALibrary_parasitstudio/src/AudioEffectAnalogDelay.h

66 lines
1.8 KiB

/*
* AudioEffectAnalogDelay.h
*
* Created on: Jan 7, 2018
* Author: slascos
*/
#ifndef SRC_AUDIOEFFECTANALOGDELAY_H_
#define SRC_AUDIOEFFECTANALOGDELAY_H_
#include <Audio.h>
#include "LibBasicFunctions.h"
namespace BAGuitar {
class AudioEffectAnalogDelay : public AudioStream {
public:
AudioEffectAnalogDelay() = delete;
AudioEffectAnalogDelay(float maxDelay);
AudioEffectAnalogDelay(size_t numSamples);
AudioEffectAnalogDelay(ExtMemSlot *slot); // requires sufficiently sized pre-allocated memory
virtual ~AudioEffectAnalogDelay();
virtual void update(void);
void delay(float milliseconds);
void delay(size_t delaySamples);
void bypass(bool byp) { m_bypass = byp; }
void feedback(float feedback) { m_feedback = feedback; }
void mix(float mix) { m_mix = mix; }
void enable() { m_enable = true; }
void disable() { m_enable = false; }
void processMidi(int channel, int control, int value);
void mapMidiBypass(int control, int channel = 0);
void mapMidiDelay(int control, int channel = 0);
void mapMidiFeedback(int control, int channel = 0);
void mapMidiMix(int control, int channel = 0);
private:
audio_block_t *m_inputQueueArray[1];
bool m_bypass = true;
bool m_enable = false;
bool m_externalMemory = false;
AudioDelay *m_memory = nullptr;
size_t m_maxDelaySamples = 0;
audio_block_t *m_previousBlock = nullptr;
audio_block_t *m_blockToRelease = nullptr;
IirBiQuadFilterHQ *m_iir = nullptr;
// Controls
int m_midiConfig[4][2];
size_t m_delaySamples = 0;
float m_feedback = 0.0f;
float m_mix = 0.0f;
void m_preProcessing(audio_block_t *out, audio_block_t *dry, audio_block_t *wet);
void m_postProcessing(audio_block_t *out, audio_block_t *dry, audio_block_t *wet);
size_t m_callCount = 0;
};
}
#endif /* SRC_AUDIOEFFECTANALOGDELAY_H_ */