NTS-1 as Effects Processor

And, for illustrative purposes, the code.

//
#include "usermodfx.h"
#include <math.h>

static float lpan,rpan;

void MODFX_INIT(uint32_t platform, uint32_t api)
{
  lpan = 0.5;
  rpan = 0.5;
}

void MODFX_PROCESS(const float *main_xn, float *main_yn,
		   const float *sub_xn, float *sub_yn,
		   uint32_t frames)
{

  for (uint32_t i = 0; i < frames; i++)
    {
      float inL = main_xn[i*2];
      float inR = main_xn[i*2 + 1];

      main_yn[i*2] = (inL * sinf (lpan * PI / 2)) + (inR * sinf (rpan * PI / 2));
      main_yn[i*2+1] = (inL * cosf (lpan * PI / 2)) + (inR * cosf (rpan * PI / 2));
    }
}

void MODFX_PARAM(uint8_t index, int32_t value)
{
  const float valf = q31_to_f32(value);
  switch (index)
    {
    case k_user_modfx_param_time:
      lpan = valf;
      break;
    case k_user_modfx_param_depth:
      rpan = valf;
      break;
    default:
      break;
    }
}
5 Likes