Пример #1
0
HarmEnhancer::HarmEnhancer(Parameters *param, float *Rmag, float hfreq, float lfreq, float gain)
{
	this->param = param;
    inputl = (float *) malloc (sizeof (float) * 44100+100);//param->PERIOD);
    inputr = (float *) malloc (sizeof (float) * 44100+100);//param->PERIOD);

    set_vol(0,gain);
    realvol = gain;
    itm1l = 0.0f;
    itm1r = 0.0f;
    otm1l = 0.0f;
    otm1r = 0.0f;

    hpffreq = hfreq;
    lpffreq = lfreq;
    hpfl = new AnalogFilter(param,3, hfreq, 1, 0);
    hpfr = new AnalogFilter(param,3, hfreq, 1, 0);
    lpfl = new AnalogFilter(param,2, lfreq, 1, 0);
    lpfr = new AnalogFilter(param,2, lfreq, 1, 0);

    limiter = new Compressor (param,inputl, inputr);
    limiter->Compressor_Change_Preset(0,4);
    calcula_mag(Rmag);
}
Пример #2
0
static void
runexciter (LADSPA_Handle instance, unsigned long sample_count,
	    snd_seq_event_t * events, unsigned long event_count)
{

  exciter_t *exc = (exciter_t *) instance;

  LADSPA_Data *const pinputl = exc->inputl;
  LADSPA_Data *const pinputr = exc->inputr;
//  LADSPA_Data dry = *(exc->dry);
  LADSPA_Data vol = *(exc->outvolume);
  LADSPA_Data pan = *(exc->panning);
  LADSPA_Data mag_1 = *(exc->mag_1);
  LADSPA_Data mag_2 = *(exc->mag_2);
  LADSPA_Data mag_3 = *(exc->mag_3);
  LADSPA_Data mag_4 = *(exc->mag_4);
  LADSPA_Data mag_5 = *(exc->mag_5);
  LADSPA_Data mag_6 = *(exc->mag_6);
  LADSPA_Data mag_7 = *(exc->mag_7);
  LADSPA_Data mag_8 = *(exc->mag_8);
  LADSPA_Data mag_9 = *(exc->mag_9);
  LADSPA_Data mag_10 = *(exc->mag_10);
  LADSPA_Data ffreq = *(exc->ffreq);

  unsigned long event_pos = 0;
  unsigned long pos;
  unsigned long count;

  int i;

//  memset (exc->efxoutl, 0, sizeof (LADSPA_Data) * sample_count);
//  memset (exc->efxoutr, 0, sizeof (LADSPA_Data) * sample_count);

  for (pos = 0, event_pos = 0; pos < sample_count; pos += STEP_SIZE)
    {

      while (event_pos < event_count)
	{

	  switch (events[event_pos].type)
	    {

	    case SND_SEQ_EVENT_NOTEON:

	      for (i = 0; i < POLY; i++)
		{
		  if (events[event_pos].data.note.velocity != 0)
		    {
		      if (exc->rc.note_active[i] == 0)
			{
			  exc->rc.note_active[i] = 1;
			  exc->rc.rnote[i] = events[event_pos].data.note.note;
			  exc->rc.gate[i] = 1;
			  MiraChord (exc);
			  calcula_mag (exc);
			  if (exc->rc.cc)
			    {
			      lo_send (exc->m_host,
				       exc->osc_configure_path, "ss",
				       "schord", exc->rc.NombreAcorde);
			      exc->rc.cc = 0;
			    }
			  break;
			}

		    }
		  if (events[event_pos].data.note.velocity == 0)
		    {
		      if ((exc->rc.note_active[i])
			  && (exc->rc.rnote[i] ==
			      events[event_pos].data.note.note))
			{
			  exc->rc.note_active[i] = 0;
			  exc->rc.gate[i] = 0;
			  break;
			}

		    }
		}


	      break;
	    case SND_SEQ_EVENT_NOTEOFF:

	      for (i = 0; i < POLY; i++)
		{
		  if ((exc->rc.note_active[i])
		      && (exc->rc.rnote[i] ==
			  events[event_pos].data.note.note))
		    {
		      exc->rc.note_active[i] = 0;
		      exc->rc.gate[i] = 0;
		      break;
		    }

		}

	      break;
	    case SND_SEQ_EVENT_CONTROLLER:

	      if (events[event_pos].data.control.param == 10)
		{
		  pan = (float) events[event_pos].data.control.value / 128.0;
		  break;
		}

	      if (events[event_pos].data.control.param == 7)
		{
		  vol = (float) events[event_pos].data.control.value / 128.0;
		  break;
		}

	      if (events[event_pos].data.control.param == 48)
		{
		  mag_1 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 49)
		{
		  mag_2 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 50)
		{
		  mag_3 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 51)
		{
		  mag_4 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 52)
		{
		  mag_5 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 53)
		{
		  mag_6 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 54)
		{
		  mag_7 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 55)
		{
		  mag_8 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 56)
		{
		  mag_9 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 57)
		{
		  mag_10 =
		    (float) ((events[event_pos].data.control.value -
			      64.0) / 64.0);
		  break;
		}
	      if (events[event_pos].data.control.param == 58)
		{
		  ffreq =
		    (float) 21.0 +
		    (float) (events[event_pos].data.control.value * 10000.0 /
			     127.0);
		  break;
		}

	    }

	  event_pos++;
	}


      count =
	(sample_count - pos) > STEP_SIZE ? STEP_SIZE : sample_count - pos;

      if (exc->rmag_1 != mag_1)
	{
	  exc->rmag_1 = mag_1;
	  calcula_mag (exc);
	}

      if (exc->rmag_2 != mag_2)
	{
	  exc->rmag_2 = mag_2;
	  calcula_mag (exc);
	}

      if (exc->rmag_3 != mag_3)
	{
	  exc->rmag_3 = mag_3;
	  calcula_mag (exc);
	}

      if (exc->rmag_4 != mag_4)
	{
	  exc->rmag_4 = mag_4;
	  calcula_mag (exc);
	}

      if (exc->rmag_5 != mag_5)
	{
	  exc->rmag_5 = mag_5;
	  calcula_mag (exc);
	}

      if (exc->rmag_6 != mag_6)
	{
	  exc->rmag_6 = mag_6;
	  calcula_mag (exc);
	}

      if (exc->rmag_7 != mag_7)
	{
	  exc->rmag_7 = mag_7;
	  calcula_mag (exc);
	}

      if (exc->rmag_8 != mag_8)
	{
	  exc->rmag_8 = mag_8;
	  calcula_mag (exc);
	}

      if (exc->rmag_9 != mag_9)
	{
	  exc->rmag_9 = mag_9;
	  calcula_mag (exc);
	}

      if (exc->rmag_10 != mag_10)
	{
	  exc->rmag_10 = mag_10;
	  calcula_mag (exc);
	}


      if (exc->rfreq != ffreq)
	{
	  exc->rfreq = ffreq;
	  setfreq (exc, &exc->lhpf, exc->rfreq);
	  setfreq (exc, &exc->rhpf, exc->rfreq);
	}

      out_exciter (exc, pinputl, pinputr, count);

    }

}