This is smsMk.m in view mode; [Download] [Up]
#import <musickit/musickit.h> #import <sys/file.h> #import "SmsInstrument.h" void main(int ac, char *av[]) { int i,partCount; id aSFPerformer,smsIns; double fSamplingRate = 22050; int inFd,outFd; id scoreInfo,noteSenders; NXStream *inStream,*outStream; if (ac != 3) { fprintf(stderr, "Usage: smsMk <input score file> <output snd file>.\n"); exit(1); } inFd = open(av[1],O_RDONLY,0660); if (inFd == -1) { fprintf(stderr,"Can't open %s\n.",av[1]); exit(1); } else fprintf(stderr,"Input file: %s\n",av[1]); outFd = open(av[2], O_RDWR | O_CREAT | O_TRUNC, 0660); if (outFd == -1) { fprintf(stderr,"Can't create %s\n.",av[2]); exit(1); } else fprintf(stderr,"Output file: %s\n",av[2]); inStream = NXOpenFile(inFd,NX_READONLY); outStream = NXOpenFile(outFd,NX_READWRITE); aSFPerformer = [[ScorefilePerformer alloc] init]; [aSFPerformer setStream:inStream]; [aSFPerformer activate]; scoreInfo = [aSFPerformer info]; if (scoreInfo) { /* Configure performance as specified in info. */ if ([scoreInfo isParPresent:MK_samplingRate]) fSamplingRate = [scoreInfo parAsDouble:MK_samplingRate]; } smsIns = [[SmsInstrument alloc] init]; [smsIns setSamplingRate:fSamplingRate stream:outStream]; noteSenders = [aSFPerformer noteSenders]; partCount = [noteSenders count]; for (i = 0; i < partCount; i++) [[noteSenders objectAt:i] connect:[smsIns noteReceiver]]; [noteSenders free]; [Conductor setClocked:NO]; /* User process runs as fast as it can. */ fprintf(stderr,"synthesizing...\n"); [Conductor startPerformance]; /* Start sending Notes, loops till done.*/ fprintf(stderr,"...done\n"); NXClose(outStream); exit(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.