@ -11,26 +11,52 @@ namespace Heck {
public :
void init ( Instrument : : AbstractInstrument & instr )
{
// Instr
instrument . reset ( & instr ) ;
// Env
decay_ . Init ( Constants : : SAMPLERATE ) ;
decay_ . SetTime ( dsp : : ADENV_SEG_ATTACK , .0001 ) ;
decay_ . SetTime ( dsp : : ADENV_SEG_DECAY , 0.1 ) ;
decay_ . SetMax ( 1 ) ;
decay_ . SetMin ( 0 ) ;
decay_ . SetCurve ( - 18 ) ;
// Vol
ctl_volume_ = 0. ;
// Filter
ladder_ . Init ( Constants : : SAMPLERATE ) ;
ladder_ . SetFilterMode ( daisysp : : LadderFilter : : FilterMode : : LP24 ) ;
ladder_ . SetRes ( 0.7 ) ;
ladder_ . SetInputDrive ( 1.3 ) ;
// Drive
od_ . Init ( ) ;
}
float nextsample ( )
{
float sig = instrument - > nextsample ( ) ;
float vol_env_sig = decay_ . Process ( ) ;
sig * = vol_env_sig ;
sig = ladder_ . Process ( sig ) ;
sig = od_ . Process ( sig ) ;
sig = vca_ ( sig , ctl_volume_ ) ;
return sig ;
}
void trigger ( )
{
decay_ . Trigger ( ) ;
instrument - > trigger ( ) ;
}
void decay ( float val )
{
decay_ . SetTime ( dsp : : ADENV_SEG_DECAY , 0.01 + val * 8. ) ;
}
void volume ( float vol )
{
ctl_volume_ = vol ;
@ -69,6 +95,7 @@ namespace Heck {
std : : shared_ptr < Instrument : : AbstractInstrument > instrument { } ;
private :
dsp : : AdEnv decay_ { } ;
dsp : : LinearVCA vca_ { } ;
dsp : : LadderFilter ladder_ { } ;
dsp : : Overdrive od_ { } ;