2021-08-10

Extra mode for the pan and fade modules

Added an extra mode (lin2) to the Pan, XFade and XFadeStereo modules. It just has twice the output amplitude as the Linear mode. I’ve added it as the last mode to keep older patches compatible.

Published as pre-release. 2021.8.10.0

StereoPan has no modes at all currently, it works a bit differently:

      PPosition  :=        FParams[ p_position ];
      PPosModAmt :=        FParams[ p_posmodamt];
      InType     := Round( FParams[ p_intype  ]);

      for zz := 0 to Polyphony - 1
      do begin
        Control := 1.0 + Clip( PPosition + SignalForInputType( FInputs[ i_control][ zz], InType) * PPosModAmt, -1.0, 1.0);
        In1     := FInputs[ i_in1][ zz];
        In2     := FInputs[ i_in2][ zz];
        Sum     := In1 + In2;
        A1      := Bounce( Control, False);
        A2      := Clip  ( 1.0 - Control, 0.0, 1.0);
        A3      := Clip  ( Control - 1.0, 0.0, 1.0);
        A4      := Bounce( Control , False);
        FOutputs[ o_out1][ zz] := A1 * In1 + A2 * Sum;
        FOutputs[ o_out2][ zz] := A3 * Sum + A4 * In2;
      end;

Where Bounce is a sort of a wrapping clip … and it does :

  function  Bounce( const aValue: TSignal; AbsVal: Boolean = False): TSignal; inline;
  begin
    Result := aValue;

    if AbsVal
    then begin
      if   Result < 0.0
      then Result :=       - Result;

      if Result > 1.0
      then Result :=   2.0 - Result;
    end
    else begin
      if   Result < - 1.0
      then Result := - 2.0 - Result
      else if Result > 1.0
      then Result :=   2.0 - Result;
    end;
  end;