This is MyApplication.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import <musickit/musickit.h> #import <musickit/synthpatches/Pluck.h> #import "MyApplication.h" @implementation MyApplication - setTempoFromSlider:sender { [Conductor lockPerformance]; [cond setTempo:[sender doubleValue]]; [Conductor unlockPerformance]; return self; } - appDidInit:sender { /* Invoked when first message is sent to app */ aNote = [[Note alloc] init]; /* A note we'll use over and over */ [Orchestra setTimed:YES]; /* Use the DSP 'clock' */ [Orchestra new]; /* Create Orchestra for all DSPs */ MKSetDeltaT(1.0); /* Scheduler advance */ [Conductor setFinishWhenEmpty:NO]; /* Keep going forever */ cond = [Conductor defaultConductor]; return self; } - play { [pluck noteOn:aNote]; /* Do it */ [cond sel:@selector(play) to:self withDelay:1.0 argCount:0]; return self; } - startStop:sender { if ([Conductor inPerformance]) { [Conductor lockPerformance]; [Conductor finishPerformance]; [Conductor unlockPerformance]; [pluck dealloc]; /* Must dealloc by hand, 'cause we alloced by hand */ [Orchestra close]; } else { [Orchestra open]; pluck = [Orchestra allocSynthPatch:[Pluck class]]; [cond sel:@selector(play) to:self withDelay:0 argCount:0]; [Orchestra run]; [Conductor startPerformance]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.