
2 changed files with 125 additions and 69 deletions
@ -0,0 +1,81 @@ |
|||
#ifndef HECK_PERKONS_TRACK_HH |
|||
#define HECK_PERKONS_TRACK_HH |
|||
|
|||
#include "daisysp.h" |
|||
#include "instr_abstract.hh" |
|||
|
|||
namespace dsp = daisysp; |
|||
|
|||
namespace Heck { |
|||
struct Track { |
|||
public: |
|||
void init(Instrument::AbstractInstrument& instr) |
|||
{ |
|||
instrument.reset(&instr); |
|||
ctl_volume_ = 0.; |
|||
|
|||
ladder_.Init(Constants::SAMPLERATE); |
|||
ladder_.SetFilterMode(daisysp::LadderFilter::FilterMode::LP24); |
|||
ladder_.SetRes(0.7); |
|||
ladder_.SetInputDrive(1.3); |
|||
|
|||
od_.Init(); |
|||
} |
|||
|
|||
float nextsample() |
|||
{ |
|||
float sig = instrument->nextsample(); |
|||
sig = ladder_.Process(sig); |
|||
sig = od_.Process(sig); |
|||
sig = vca_(sig, ctl_volume_); |
|||
return sig; |
|||
} |
|||
|
|||
void volume(float vol) |
|||
{ |
|||
ctl_volume_ = vol; |
|||
} |
|||
|
|||
void filter(float val) |
|||
{ |
|||
float ladder_freq = 80 + (val * 9000); |
|||
ladder_.SetFreq(val * ladder_freq); |
|||
} |
|||
|
|||
void drive(float amt) |
|||
{ |
|||
od_.SetDrive(0.35 + amt * 0.15); |
|||
} |
|||
|
|||
// range: 0-1
|
|||
void filtermode(float val) |
|||
{ |
|||
ctl_filtermode_ = val; |
|||
|
|||
// MID
|
|||
if (ctl_filtermode_ < 0.33) { |
|||
ladder_.SetFilterMode(daisysp::LadderFilter::FilterMode::BP24); |
|||
} |
|||
// HIGH
|
|||
if (ctl_filtermode_ >= 0.33 && ctl_filtermode_ < 0.66) { |
|||
ladder_.SetFilterMode(daisysp::LadderFilter::FilterMode::HP24); |
|||
} |
|||
// LOW
|
|||
if (ctl_filtermode_ >= 0.66) { |
|||
ladder_.SetFilterMode(daisysp::LadderFilter::FilterMode::LP24); |
|||
} |
|||
} |
|||
|
|||
std::shared_ptr<Instrument::AbstractInstrument> instrument{}; |
|||
|
|||
private: |
|||
dsp::LinearVCA vca_{}; |
|||
dsp::LadderFilter ladder_{}; |
|||
dsp::Overdrive od_{}; |
|||
|
|||
float ctl_volume_{}; |
|||
float ctl_filtermode_{}; |
|||
}; |
|||
|
|||
} // namespace Heck
|
|||
#endif |
Loading…
Reference in new issue