 };
 
 volatile DU_ADSR_Values adsr_values;
-volatile bool gate;
+volatile bool gate, retrigger;
 
 static const unsigned char label[4] = {'A', 'D', 'S', 'R'};
 

  virtual void setup()
  {
    gate_time = 0;
    gt_attach_interrupt(GT3, gate_isr, CHANGE);
  }

  virtual void loop()
  {
    if(gate_time)
    {
      if(gate)

void gate_isr()
{
  gate = function->gt_read(GT3);
  if(!gate)
    retrigger = true;
}

void timer_isr()
