This is SoundSamplePane.m in view mode; [Download] [Up]
//
// This is just a sample pane for Pastry. This source is in the public
// domain. Someone with knowledge of the SoundKit can write a much nicer
// sound inspector pane.
//
#import "SoundSamplePane.h"
static NXAtom types[2] = {NULL};
@implementation SoundSamplePane
- _loadNib
{
char buf[MAXPATHLEN+1];
// Load a nib file from the bundle
[[NXBundle bundleForClass: [self class]]
getPath: buf
forResource: "Sound"
ofType: "nib"];
[NXApp loadNibFile: buf
owner: self
withNames: NO
fromZone: [self zone]];
view = [window setContentView:[[View alloc] init]];
[window free];
window = nil;
return self;
}
+ initialize
{
if (!types[0]) {
types[0] = NXSoundPboardType;
types[1] = NULL;
}
return self;
}
+ (const NXAtom *)types
{
return types;
}
- free
{
[sound free];
[view free];
return [super free];
}
- (View *)view
{
if (!view)
[self _loadNib];
return view;
}
- updateFromStream:(NXStream *)stream withType:(NXAtom)type
{
// This seems like kind of a hacked way to get sound from a stream
// that was written from the pasteboard data, but I don't know
// enough about the sound kit to init a sound straight from the
// stream. I just use Sound's -initFromPasteboard: method.
Pasteboard *p = [Pasteboard newUnique];
if (!view)
[self _loadNib];
[p declareTypes:types num:1 owner:self];
[p writeType:type fromStream:stream]; //! We should handle exceptions
[sound free];
sound = [[Sound alloc] initFromPasteboard:p];
[p freeGlobally];
[sound setDelegate:self];
[durationField setDoubleValue:[sound duration]];
[statusField setStringValue:"not playing"];
return self;
}
- play:sender
{
if (!playButton)
playButton = sender;
if (sound) {
[playButton setEnabled:NO];
[statusField setStringValue:"playing"];
[sound play:self];
}
return self;
}
- didPlay:sender
{
[playButton setEnabled:YES];
[statusField setStringValue:"not playing"];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.