ftp.nice.ch/pub/next/unix/audio/belly-flop.N.b.tar.gz#/soon/noi.c

This is noi.c in view mode; [Download] [Up]

#include "include/ugens.h"
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

noi(p,n_args)
 
float *p;

{
	int i,nsamps,unit;
	float val,out[2],q[9],dur,rise,decay,*f1,*f2,*f3,amp,phase,
	      sm1, sm2, sm3, fr1, fr2, fr3, ph1, ph2, ph3, i1, i2, i3,
	      q1[5], q2[5], q3[5], fevp();
	int len,risef,decayf,j,z,wave;

/* p0=start, p1=dur, p2=pitch, p3=amp, p4=riset, p5=decayt, p6=reson mult */
/* assumes function 1 is waveform and function 2 is envelope*/

	wave = 1; risef = 2; decayf = 3;
	unit = 0;  /* writing to file 0*/
	nsamps = setnote(p[0],p[1],unit);

	evset(p[1],p[4],p[5],risef,q);

	f1 = floc(wave);
	f2 = floc(risef);
	f3 = floc(decayf);
	len = fsize(wave);

	z = SR/p[2];
	j = ph1 = ph2 = ph3 = 0;

	rsnset(p[2], p[2]*p[6], 2., 0., q1);
	rsnset(3.001*p[2], 3.*p[2]*p[6], 2., 0., q2);
	rsnset(3.98*p[2], 4.*p[2]*p[6], 2., 0., q3);

	amp = p[3];

	for(i = 0; i < nsamps; i++) {
	        if (!j--) {
		  j = z;
		  i1 = ( fr1 = p[2] * ( 1. + (rrand() * .015)) ) * fsize(1) / SR;
		  rsnset(fr1, fr1*p[6], 2., 1., q1);
		  i2 = ( fr2 = 3.001 * p[2] * ( 1. + (rrand() * .01)) ) * fsize(1) / SR;
		  rsnset(fr2, fr2*p[6], 2., 1., q2);
		  i3 = ( fr3 = 3.98 * p[2] * ( 1. + (rrand() * .02)) ) * fsize(1) / SR;
		  rsnset(fr3, fr3*p[6], 2., 1., q3);

		}
		val = rrand();
		sm1 = reson(val, q1);
		sm2 = reson(val, q2);
		sm3 = reson(val, q3);
		val = amp * fevp(i,f2,f3,q);
		out[0] = (sm1 + (.4 * sm2) + (.3 * sm3)) * val;
		ADDOUT(out,unit); 
	}
	endnote(unit);
}

float fevp(nsample,f1,f2,q)
long nsample;
float *f1,*f2,*q;
{
    register int jloc;
    float far = (float)(nsample)/ *q;

    if( far > *(q+1)) {
        jloc = (far - *(q+1)) / *(q+4) * *(q+3);
        return(*(f2+jloc));
    }
    else
        if(far >= *(q+2)) return(1.);
    else    {
        jloc = far * *(q+3)/ *(q+2);
        return(*(f1+jloc));
    }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.