Browse Source

Trigger the track env (which trigger the instrument)

pros:
* same env on each track
* instrument can be drone, but can also react to trig

cons:
* instrument can only shorten the decay, its limited by the track env
main
heck 7 months ago
parent
commit
97654d7898
  1. 4
      src/main_perkons.cc
  2. 27
      src/track.hh

4
src/main_perkons.cc

@ -293,7 +293,7 @@ namespace Heck {
switch (msg.type) {
case ld::MidiMessageType::NoteOn: {
if (msg.channel >= 0 && msg.channel < Constants::TRACK_COUNT) {
tracks[msg.channel].instrument->trigger();
tracks[msg.channel].trigger();
}
} break;
case ld::MidiMessageType::ControlChange: {
@ -312,7 +312,7 @@ namespace Heck {
tracks[cc.channel].instrument->ctl(2, val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_PARAM2:
tracks[cc.channel].instrument->ctl(3, val_normalized);
tracks[cc.channel].decay(val_normalized);
break;
case Constants::MIDI_Mapping::TRACK_FILTER:
tracks[cc.channel].filter(val_normalized);

27
src/track.hh

@ -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_{};

Loading…
Cancel
Save