This is ug.airabsorb.c in view mode; [Download] [Up]
/* filter to simulate air absorption */ #include "mm.head.h" #include "ug.head.h" #define IN 1 #define X 2 #define Y 3 #define LX 4 #define LY 5 #define R 6 #define SCALE 7 #define C1 8 #define C2 9 #define XM1 10 #define XM2 11 #define YM1 12 #define YM2 13 airabsorb UGHEAD{ UGINIT; float d, bw ; double darg, is1 = -Pi/Srate; if( STARTNOTE ) { VAL(LX) = VAL(LY) = -HUGE ; } UGLOOP{ if( (VAL(X) != VAL(LX)) || (VAL(Y) != VAL(LY)) ){ VAL(LX) = VAL(X) ; VAL(LY) = VAL(Y) ; darg = VAL(X)*VAL(X) + VAL(Y)*VAL(Y) ; d = sqrt( darg ) ; if( d > 0. ) bw = 600000./d ; else bw = Srate ; if( bw > Srate ) bw = Srate ; VAL(R) = exp( bw*is1 ) ; VAL(SCALE) = 1. - VAL(R) ; VAL(C1) = 2.*VAL(R) ; VAL(C2) = -( VAL(R)*VAL(R) ) ; } VAL(OUT) = VAL(SCALE)*( VAL(IN) - VAL(R)*VAL(XM2) ) + VAL(C1)*VAL(YM1) + VAL(C2)*VAL(YM2) ; VAL(YM2) = VAL(YM1) ; VAL(YM1) = VAL(OUT) ; VAL(XM2) = VAL(XM1) ; VAL(XM1) = VAL(IN) ; UGEND(0) } }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.