|
|
@ -8,22 +8,15 @@ namespace Heck { |
|
|
|
Grainlet::Grainlet() |
|
|
|
{ |
|
|
|
init(); |
|
|
|
grainlet.Init(samplerate); |
|
|
|
} |
|
|
|
|
|
|
|
void Grainlet::init() |
|
|
|
{ |
|
|
|
volEnv.Init(samplerate); |
|
|
|
volEnv.SetTime(dsp::ADENV_SEG_ATTACK, .0001); |
|
|
|
volEnv.SetTime(dsp::ADENV_SEG_DECAY, 0.1); |
|
|
|
volEnv.SetMax(1); |
|
|
|
volEnv.SetMin(0); |
|
|
|
volEnv.SetCurve(-18); |
|
|
|
grainlet.Init(samplerate); |
|
|
|
} |
|
|
|
|
|
|
|
void Grainlet::trigger() |
|
|
|
{ |
|
|
|
volEnv.Trigger(); |
|
|
|
} |
|
|
|
|
|
|
|
void Grainlet::ctl(unsigned int ctl_nr, float val) |
|
|
@ -33,7 +26,7 @@ namespace Heck { |
|
|
|
grainlet.SetFreq(scalen_min_max(val, 40, 400)); |
|
|
|
} break; |
|
|
|
case 1: { |
|
|
|
volEnv.SetTime(dsp::ADENV_SEG_DECAY, 0.01 + val * 8.); |
|
|
|
|
|
|
|
} break; |
|
|
|
case 2: { |
|
|
|
grainlet.SetFormantFreq(scalen_min_max(val, 400, 2000)); |
|
|
@ -58,8 +51,6 @@ namespace Heck { |
|
|
|
{ |
|
|
|
float out{}; |
|
|
|
out = grainlet.Process(); |
|
|
|
float volEnv_sig = volEnv.Process(); |
|
|
|
out *= volEnv_sig; |
|
|
|
return out; |
|
|
|
} |
|
|
|
|
|
|
|