This is Evp.m in view mode; [Download] [Up]
#import "Evp.h" @implementation Evp : Object { float qzero,q1,q2,q3,q4; float *risef,*decayf; } + create { id newInstance; newInstance = [self new]; return newInstance; } -dur:(float)aDur rise:(float)aRise decay:(float)aDecay risefunction:(float *)aFunction decayfunction:(float *) bFunction risesize:(int)aSize sr:(int)aSR { float ris,dec; aRise= (aRise > 0.) ? aRise : -aRise * aDur; aDecay = (aDecay > 0.) ? aDecay : -aDecay * aDur; qzero = aDur * (float)aSR; q1 = (aDur-aDecay)/aDur; q2 = aRise/aDur; q3 = aSize; q4 = aDecay/aDur; risef = aFunction; decayf = bFunction; } -(float)getval:(int)nsample { register jloc; float far = (float)(nsample)/ qzero; if( far > q1) { jloc = (1. - ((far - q1)/ q4)) * q3; return(*(decayf+jloc)); } else if(far >= q2) return(1.); else { jloc = far * q3/ q2; return(*(risef+jloc)); } } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.