
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