Exemplo n.º 1
0
void ft_run(LADSPA_Handle h, unsigned long sc)
{
  LADSPA_Data *ibuff0 = FTST(h)->ports[FT_IA_INP0];
  LADSPA_Data freq0 = *FTST(h)->ports[FT_IC_FREQ0];
  LADSPA_Data freq1 = *FTST(h)->ports[FT_IC_FREQ1];
  LADSPA_Data var0 = *FTST(h)->ports[FT_IC_VAR0];
  LADSPA_Data var1 = *FTST(h)->ports[FT_IC_VAR1];
  LADSPA_Data svar0 = *FTST(h)->ports[FT_IC_SVAR0];
  LADSPA_Data svar1 = *FTST(h)->ports[FT_IC_SVAR1];
  LADSPA_Data *obuff0 = FTST(h)->ports[FT_OA_OUT0];
  LADSPA_Data a = FTST(h)->a;
  LADSPA_Data b = FTST(h)->b;
  LADSPA_Data c = FTST(h)->c;
  LADSPA_Data d = FTST(h)->d;
  LADSPA_Data r1 = FTST(h)->r1;
  LADSPA_Data r2 = FTST(h)->r2;
  LADSPA_Data r3 = FTST(h)->r3;
  LADSPA_Data r4 = FTST(h)->r4;
  LADSPA_Data r5 = FTST(h)->r5;
  LADSPA_Data r6 = FTST(h)->r6;
  LADSPA_Data r7 = FTST(h)->r7;
  LADSPA_Data r8 = FTST(h)->r8;
  LADSPA_Data p0 = FTST(h)->p0;
  LADSPA_Data p1 = FTST(h)->p1;
  double sum = FTST(h)->sum;
  double in;
  double sr = FTST(h)->sr;
  unsigned int i, j;

  a = d / (svar0 + d);

  for (i = 0; i < sc; i++) {
    in = ibuff0[i];
/*
    j = (unsigned int)(p0);
    r2 = p0 - (float)j;
    r1 = table[j] * (1. - r2) + table[j+1] * r2;
    p0 = fmod(p0 += freq0 / sr * (double)TSZ, (double)TSZ);
*/

  r1 = table[(unsigned int)(RANDOM() * TSZ)];

/* low pass filter
    r1 = a * in + (1.f - a) * r1;
*/

    obuff0[i] = r1;
  }

  FTST(h)->sum = sum;
  FTST(h)->a = a;
  FTST(h)->b = b;
  FTST(h)->c = c;
  FTST(h)->d = d;
  FTST(h)->r1 = r1;
  FTST(h)->r2 = r2;
  FTST(h)->r3 = r3;
  FTST(h)->r4 = r4;
  FTST(h)->r5 = r5;
  FTST(h)->r6 = r6;
  FTST(h)->r7 = r7;
  FTST(h)->r8 = r8;
  FTST(h)->p0 = p0;
  FTST(h)->p1 = p1;
}
Exemplo n.º 2
0
void ft_connect(LADSPA_Handle h, unsigned long p, LADSPA_Data *buff) {
  FTST(h)->ports[p] = buff;
}
Exemplo n.º 3
0
void ft_activate(LADSPA_Handle h) {
  FTST(h)->d = 1.f/44100.f;
  FTST(h)->r1 = 0.f;
}
Exemplo n.º 4
0
/*
 *	 dooper() will execute a constant operation in a node and return
 *	 the node to be the result of the operation.
 */
static EXPR *dooper P1 (EXPR *, ep)
{
    EXPRTYPE type = ep->nodetype;

    ep->nodetype = ep->v.p[0]->nodetype;
    switch (ep->v.p[0]->nodetype) {
#ifdef FLOAT_SUPPORT
#ifndef FLOAT_BOOTSTRAP
	RVAL    f;
#endif	/* FLOAT_BOOTSTRAP */

    case en_fcon:
#ifndef FLOAT_BOOTSTRAP
	FASSIGN (f, ep->v.p[0]->v.f);
	switch (type) {
	case en_uminus:
	    FASSIGN (ep->v.f, f);
	    FNEG (ep->v.f);
	    break;
	case en_test:
	    ep->v.i = FTST (f) ? (IVAL) 1 : (IVAL) 0;
	    ep->nodetype = en_icon;
	    break;
	case en_not:
	    ep->v.i = FTST (f) ? (IVAL) 0 : (IVAL) 1;
	    ep->nodetype = en_icon;
	    break;
	case en_cast:
	    if (is_real_floating_type (ep->etp)) {
		ep->v.f = f;
	    } else if (is_bool (ep->etp)) {
		ep->v.u = (UVAL) (f ? 1 : 0);
		ep->nodetype = en_icon;
	    } else {
		FTOL (ep->v.i, f);
		ep->v.i = strip_icon (ep->v.i, ep->etp);
		ep->nodetype = en_icon;
	    }
	    break;
	case en_add:
	    FADD3 (ep->v.f, f, ep->v.p[1]->v.f);
	    break;
	case en_sub:
	    FSUB3 (ep->v.f, f, ep->v.p[1]->v.f);
	    break;
	case en_mul:
	    FMUL3 (ep->v.f, f, ep->v.p[1]->v.f);
	    break;
	case en_div:
	    if (FTST (ep->v.p[1]->v.f)) {
		FDIV3 (ep->v.f, f, ep->v.p[1]->v.f);
	    } else {
		ep->nodetype = en_div;
	    }
	    break;
	case en_eq:
	    ep->v.i = (IVAL) FEQ (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	case en_ne:
	    ep->v.i = (IVAL) FNE (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	case en_land:
	    ep->v.i = (IVAL) (FTST (f) && FTST (ep->v.p[1]->v.f));
	    ep->nodetype = en_icon;
	    break;
	case en_lor:
	    ep->v.i = (IVAL) (FTST (f) || FTST (ep->v.p[1]->v.f));
	    ep->nodetype = en_icon;
	    break;
	case en_lt:
	    ep->v.i = (IVAL) FLT (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	case en_le:
	    ep->v.i = (IVAL) FLE (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	case en_gt:
	    ep->v.i = (IVAL) FGT (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	case en_ge:
	    ep->v.i = (IVAL) FGE (f, ep->v.p[1]->v.f);
	    ep->nodetype = en_icon;
	    break;
	default:
	    CANNOT_REACH_HERE ();
	    break;
	}
	break;
	
#endif /* FLOAT_BOOTSTRAP */
#endif /* FLOAT_SUPPORT */
    case en_icon:
	if (is_unsigned_type (ep->v.p[0]->etp)) {
	    UVAL    u = ep->v.p[0]->v.u;

	    switch (type) {
	    case en_uminus:
		/*
		 *       unary minus on an unsigned is normally a mistake so we must
		 *       fool the compiler into not giving a warning.
		 */
		ep->v.u = (UVAL) (-(IVAL) u);
		break;
	    case en_test:
		ep->v.u = (u ? (UVAL) 1 : (UVAL) 0);
		break;
	    case en_not:
		ep->v.u = (u ? (UVAL) 0 : (UVAL) 1);
		break;
	    case en_compl:
		ep->v.u = (UVAL) strip_icon ((IVAL) ~u, ep->etp);
		break;
	    case en_cast:
		if (is_bool (ep->etp)) {
		    ep->v.u = (UVAL) (u ? 1 : 0);
#ifdef FLOAT_SUPPORT
		} else if (is_real_floating_type (ep->etp)) {
		    ep->nodetype = en_fcon;
		    UTOF (ep->v.f, u);
		    break;
#endif /* FLOAT_SUPPORT */
		} else {
		    ep->v.u = (UVAL) strip_icon ((IVAL) u, ep->etp);
		}
		break;
	    case en_add:
		ep->v.u = u + ep->v.p[1]->v.u;
		break;
	    case en_sub:
		ep->v.u = u - ep->v.p[1]->v.u;
		break;
	    case en_mul:
		ep->v.u = u * ep->v.p[1]->v.u;
		break;
	    case en_div:
		if (ep->v.p[1]->v.u == (UVAL) 0) {
		    ep->nodetype = en_div;
		} else {
		    ep->v.u = u / ep->v.p[1]->v.u;
		}
		break;
	    case en_mod:
		if (ep->v.p[1]->v.u == (UVAL) 0) {
		    ep->nodetype = en_mod;
		} else {
		    ep->v.u = u % ep->v.p[1]->v.u;
		}
		break;
	    case en_and:
		ep->v.u = u & ep->v.p[1]->v.u;
		break;
	    case en_or:
		ep->v.u = u | ep->v.p[1]->v.u;
		break;
	    case en_xor:
		ep->v.u = u ^ ep->v.p[1]->v.u;
		break;
	    case en_eq:
		ep->v.u = (UVAL) (u == ep->v.p[1]->v.u);
		break;
	    case en_ne:
		ep->v.u = (UVAL) (u != ep->v.p[1]->v.u);
		break;
	    case en_land:
		ep->v.u = (UVAL) (u && ep->v.p[1]->v.u);
		break;
	    case en_lor:
		ep->v.u = (UVAL) (u || ep->v.p[1]->v.u);
		break;
	    case en_lt:
		ep->v.u = (UVAL) (u < ep->v.p[1]->v.u);
		break;
	    case en_le:
		ep->v.u = (UVAL) (u <= ep->v.p[1]->v.u);
		break;
	    case en_gt:
		ep->v.u = (UVAL) (u > ep->v.p[1]->v.u);
		break;
	    case en_ge:
		ep->v.u = (UVAL) (u >= ep->v.p[1]->v.u);
		break;
	    case en_lsh:
		ep->v.u = u << ep->v.p[1]->v.u;
		break;
	    case en_rsh:
		ep->v.u = u >> ep->v.p[1]->v.u;
		break;
	    default:
		CANNOT_REACH_HERE ();
		break;
	    }
	} else {