21#ifndef __CALF_MULTICHORUS_H
22#define __CALF_MULTICHORUS_H
30template<
class T, u
int32_t Voices>
77 float range = 1.f + (1.f - overlap) * (
voices - 1);
78 float scaling = 1.f / range;
87 unsigned int ipart = voice_phase.
ipart();
110template<
class T,
class MultiLfo,
class Postprocessor,
int MaxDelay=4096>
142 template<
class OutIter,
class InIter>
143 void process(OutIter buf_out, InIter buf_in,
int nsamples,
bool active,
float level_in = 1.,
float level_out = 1.) {
151 mdepth = mdepth >> 2;
152 T scale =
lfo.get_scale();
153 for (
int i=0;
i<nsamples;
i++) {
156 float in = *buf_in++ * level_in;
159 unsigned int nvoices =
lfo.get_voices();
162 for (
unsigned int v = 0;
v < nvoices;
v++)
164 int lfo_output =
lfo.get_value(
v);
166 int dv = mds + (mdepth * lfo_output >> (3 + 1));
169 delay.get_interp(fd, ifv, (dv & 0xFFFF)*(1.0/65536.0));
176 *buf_out++ = (sdry + (active ? swet : 0)) * level_out;
186 cfloat
z = 1.0 / exp(cfloat(0.0,
freq));
190 mdepth = mdepth >> 2;
191 T scale =
lfo.get_scale();
192 unsigned int nvoices =
lfo.get_voices();
193 for (
unsigned int v = 0;
v < nvoices;
v++)
195 int lfo_output =
lfo.get_value(
v);
197 int dv = mds + (mdepth * lfo_output >> (3 + 1));
199 cfloat zn = std::pow(
z, fldp);
200 h += zn + (zn *
z - zn) * cfloat(dv / 65536.0 - fldp);
205 float v = std::abs(cfloat(
gs_dry.get_last()) + cfloat(scale *
gs_wet.get_last()) *
h);
Definition audio_fx.h:160
float min_delay
Definition audio_fx.h:163
float get_mod_depth() const
Definition audio_fx.h:173
int min_delay_samples
Definition audio_fx.h:162
int mod_depth_samples
Definition audio_fx.h:162
void set_min_delay(float min_delay)
Definition audio_fx.h:169
float mod_depth
Definition audio_fx.h:163
float get_min_delay() const
Definition audio_fx.h:166
void set_mod_depth(float mod_depth)
Definition audio_fx.h:176
Definition fixed_point.h:38
T ipart() const
return integer part
Definition fixed_point.h:174
U lerp_by_fract_int(U v1, U v2) const
Definition fixed_point.h:211
int lfo_active
Definition audio_fx.h:54
float rate
Definition audio_fx.h:55
gain_smoothing gs_dry
Definition audio_fx.h:56
fixed_point< unsigned int, 20 > phase
Definition audio_fx.h:58
fixed_point< unsigned int, 20 > dphase
Definition audio_fx.h:58
void setup(int sample_rate)
Definition audio_fx.h:88
void set_rate(float rate)
Definition audio_fx.h:62
float dry
Definition audio_fx.h:55
float wet
Definition audio_fx.h:55
int sample_rate
Definition audio_fx.h:54
gain_smoothing gs_wet
Definition audio_fx.h:56
simple_delay< MaxDelay, T > delay
Definition multichorus.h:114
MultiLfo lfo
Definition multichorus.h:116
void set_rate(float rate)
Definition multichorus.h:131
float freq_gain(float freq, float sr) const
Definition multichorus.h:182
Postprocessor post
Definition multichorus.h:117
multichorus()
Definition multichorus.h:119
void process(OutIter buf_out, InIter buf_in, int nsamples, bool active, float level_in=1., float level_out=1.)
Definition multichorus.h:143
virtual void setup(int sample_rate)
Definition multichorus.h:135
void reset()
Definition multichorus.h:127
int get_value(uint32_t voice) const
Get LFO value for given voice, returns a values in range of [-65536, 65535] (or close).
Definition multichorus.h:83
void set_voices(uint32_t value)
Definition multichorus.h:64
chorus_phase phase
Current LFO phase.
Definition multichorus.h:38
uint32_t voices
Current number of voices.
Definition multichorus.h:44
T scale
Current scale (output multiplier).
Definition multichorus.h:46
sine_table< int, 4096, 65535 > sine
Definition multichorus.h:34
void step()
Definition multichorus.h:95
sine_multi_lfo()
Definition multichorus.h:52
int32_t voice_offset
Per-voice offset unit (the value that says how much the voices are offset with respect to each other ...
Definition multichorus.h:48
void reset()
Definition multichorus.h:101
uint32_t get_voices() const
Definition multichorus.h:60
T get_scale() const
Definition multichorus.h:98
chorus_phase vphase
LFO phase per-voice increment.
Definition multichorus.h:42
chorus_phase dphase
LFO phase increment.
Definition multichorus.h:40
void set_overlap(float overlap)
Definition multichorus.h:70
uint32_t voice_depth
LFO Range scaling for non-100% overlap.
Definition multichorus.h:50
Definition primitives.h:425
#define M_PI
Definition compat.h:149
unsigned z
Definition inflate.c:1589
unsigned v[N_MAX]
Definition inflate.c:1584
register unsigned i
Definition inflate.c:1575
static PuglViewHint int value
Definition pugl.h:1708
JHUFF_TBL long freq[]
Definition jchuff.h:50
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
int int32_t
Definition mid.cpp:97
unsigned int uint32_t
Definition mid.cpp:100
fixed_point< unsigned int, 20 > chorus_phase
Definition multichorus.h:28
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
typedef int(UZ_EXP MsgFn)()