This is ZeroFrequency.m in view mode; [Download] [Up]
/* TunerApp.m -- copyright 1992, 1993, 1994 by C.D.Lane */ #import "ZeroFrequency.h" #define ERROR (0.25) /* just guestimated for this algorithm */ @implementation ZeroFrequency : Frequency - (double) computeFrequency:sample { short *pointer = (short *) [(Sound *) sample data]; unsigned int start, end = 0, i = 0, transitions = 0, size = [sample sampleCount]; while(i < size && pointer[end = i++] == 0); while(i < size && !((pointer[end] > 0 && pointer[i] < 0) || (pointer[end] < 0 && pointer[i] > 0))) ++i; end = i++; if(i >= size) return FREQUENCY_UNSTABLE; for(start = i; i < size; i++) { if((pointer[end] > 0 && pointer[i] < 0) || (pointer[end] < 0 && pointer[i] > 0)) { transitions++; end = i; } } if(start > end) return FREQUENCY_UNSTABLE; return (transitions * [sample samplingRate]) / (2 * ((end - start) + 1)); } - (double) toleranceAtFrequency:(double) freq; { return(ERROR / freq); } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.