ftp.nice.ch/pub/next/developer/resources/libraries/gamekit_proj.NI.sa.tar.gz#/gamekit_proj/Headers/gamekit/GKSound.h

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

// A GKSound adds a single function to the Sound object:  It won't
// allow itself to be played "too much".  It know when it was last
// played and if you attempt to play it too soon after, it ignores
// the playback message.  Also, you tell it which GKSoundStream to
// play back on.  Because of this special playback method, it breaks
// all the delegate methods of the play notification.  (I can't use
// super's -play: since I am completely overriding what it does...
// if I had source to the Sound object, I suppose that I could re-
//implement what super does, but the object as is can't be subclassed
// the way I need and still retain it's old functionality.  I blame
// NeXT for this, as it seems to be a poor design that doesn't allow
// proper subclassing+retaining functionality.)
//
// This object will convert itself to 16-bit linear 22050 kHz after
// load and init so that it will work on the NXSoundStreams.  If you
// edit (and fragment) the sound, be sure to compact it before playing!
// if you change the sound's length in any way via editing, you should
// be sure to set up the time/percent again, as they aren't changed
// due to edits.  This is because (1) you should only change it if
// you're going by percent, and you may be going by absolute playback
// time, and I don't track which you used to set it up (easy to overcome)
// and (2) there's tons of ways to alter a sound and I didn't feel
// like overriding every method since games seldom edit their sounds!

#import <appkit/appkit.h>
#import <soundkit/soundkit.h>

@interface GKSound:Sound
{
	id nextPlay;	// A DAYTime that estimates when sound OK to play again
	id streamGroup;	// The GKSoundStream which we use for playback
	id timeToPlay;	// how much of the sound can be unplayed and
					// still allow us to play it again (DAYTime)
	id now;			// DAYTime used to hold current time; we keep it
					// around so that we aren't constantly alloc'ing it
					// since dynamic allocation is expensive timewise.
}

- setPercentToPlay:(double)percent; // how much to play before next play
									// percent is in range [0,1].
- setTimeToPlay:aTime;		// how long to play sound before next play
- setPlayStream:aStream;	// a GKSoundStream for playback
- convert;					// attempt conversion to 16bit 22.05kHz mono sound

- _initGKSound;				// private method to set up ivars

@end

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