ftp.nice.ch/pub/next/audio/editor/edsnd.1.42.s.tar.gz#/FFTView.h

This is FFTView.h in view mode; [Download] [Up]

/* FFTView.h -- Interface for FFTView class
 *
 * This is a subclass of View that displays spectral data for a sound
 * via an FFT.  The FFTView handles all the computation and graphics;
 * it does not handle Sound object creation or soundfile operations.
 * External objects control the number of points in the FFT, the 
 * sound to be viewed, and the starting point within that sound.
 * The latter is expressed as a time point.  The FFTView also
 * manages a hairline cursor (manipulated by the mouse) and can
 * report the frequency and amplitude at the current cursor
 * location.
 *
 * In a typical usage, an Application (or other object) would
 * feed sounds, start times, and FFT window sizes to the FFTView,
 * and then cause computation and plotting via a 'display' message.
 *
 * jwp@silverton.Princeton.edu, 12/89
 * 02/21/90:  Added support for DPSDoUserPath()
 */

#import <appkit/View.h>

@interface FFTView : View
{
        id sound;               /* The sound we're looking at */
        int npoints;            /* Number of points (power of 2) */
        float inskip;           /* Start time of frame */
	id delegate;		/* Delegate for this view (if any) */
	BOOL dBflag;		/* dB display? */

        float *sframe;          /* Current frame of samples */
        float *coefs;           /* Output data */
	float *scoefs;		/* Scaled output data */
	float srate;		/* Sampling rate of sound */
	int startsamp;		/* First sample of frame */
        float cursorpixel;      /* Cursor location (as pixel column) */
	float cursorpoint;	/* Cursor location (as FFT point) */

	float *PSdata;		/* User path data (allocated in setNpoints) */
	char *PSops;		/* User path operators */

        BOOL needsFFT;          /* Do we need to do an FFT? */
	BOOL needsScaling;	/* Do we need to do a scaling? */
        BOOL validData;         /* Do we have good data in sframe? */
}

/* Public methods
 *
 * To create an instance:
 *      + newFrame:             -- Create and initialize a new instance
 *				   (see View.h for more info)
 */
+ newFrame:(const NXRect *)frameRect;

/* To set up the FFT:
 *      - setSound:		-- Attach a sound to this FFTView
 *      - setNpoints:     	-- Set number of points in FFT window
 *      - setInskip:		-- Set start time of frame
 *	- advanceFrame:		-- Advance by one frame of data
 *	- dBdisplay:		-- Turn on/off dB display
 */
- setSound:aSound;
- setNpoints: (int)n;
- setInskip: (float)t;
- advanceFrame:sender;		/* Note: this is target/action method */
- dBdisplay:(BOOL)flag;

/* To retrieve info about the FFT:
 *	- sound			-- Returns pointer to attached sound
 *	- (int)npoints		-- Returns size of FFT window
 *	- (float)inskip		-- Returns start time
 *	- (BOOL)dBdisplay	-- Returns dBflag
 */
- sound;
- (int)npoints;
- (float)inskip;
- (BOOL)dBdisplay;

/* Cursor information methods:
 *	- getCursorFreq:Amp:	-- Retrieve the frequency and amplitude
 *				   at the current cursor location (arguments
 *				   are pointers to floats)
 *	- setCursorFreq:	-- Set the cursor to point to a particular
 *				   frequency
 */
- getCursorFreq:(float *)freq Amp:(float *)amp;
- setCursorFreq:(float)freq;

/* Miscellaneous lower-level methods:
 *	- setDelegate:		-- Set the delegate for cursor update messages
 *	- delegate		-- Returns pointer to the delegate
 *	- needsFFT:		-- Set/reset needsFFT flag (this method
 *				   used to force or suppress calculation of
 *				   FFT.  Not normally necessary).
 *	- (BOOL)needsFFT	-- Returns current value of needsFFT flag
 */
- setDelegate:anObject;
- delegate;
- needsFFT:(BOOL)flag;
- (BOOL)needsFFT;


/* Private methods
 *
 * Drawing methods:
 *
 *      - drawSelf::            -- Do FFT (if necessary) and draw it
 */
- drawSelf:(NXRect *)rects :(int)rectCount;

/* Cursor/mouse management:
 *      - mouseDown:		-- Handle a mousedown event
 *      - acceptsFirstResponder	-- Returns YES (to get mouse events)
 */
- mouseDown:(NXEvent *)event;
- (BOOL)acceptsFirstResponder;

@end


/* The following dummy interface is used to declare the delegate
 * methods for this object.
 *
 * 	- cursorMoved:		-- Notify delegate that cursor has moved
 */
@interface DummyFFTViewDelegate : Object
- cursorMoved:sender;
@end

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