This is LPCreate.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "LPCreate.h" #import "Dispatcher.h" #import <appkit/Application.h> #import <appkit/Window.h> #import <stdio.h> #import <appkit/View.h> #import <appkit/Cell.h> #import <appkit/OpenPanel.h> #import <strings.h> #import <sound/sound.h> #import <appkit/ScrollView.h> #import <appkit/Text.h> #import <streams/streams.h> #import <libc.h> #import <sys/wait.h> @implementation LPCreate + new { self = [super new]; [NXApp loadNibSection:"LPCreate.nib" owner:self]; [LPCpoles setIntValue:[NXApp poles]]; [Plowcps setFloatValue:[NXApp lowcps]]; [Phighcps setFloatValue:[NXApp highcps]]; [Pframe setIntValue:[NXApp ptchframe]]; [LPCframes setIntValue:[NXApp frames]]; [Pinter setIntValue:[NXApp frames]]; [self show:self]; return self; } - getLPCFile:sender { id openP; const char *types[2]; types[0] = "lpc"; types[1] = 0; openP = [OpenPanel new]; if ([openP runModalForTypes:types]) { strcpy(lpcFilename, [openP filename]); [LPCfield setStringValue:lpcFilename]; } return self; } - go:sender { int frames, poles, frameS, id1, id2, status, fd; float inskip, dur, lowcps, highcps; char cmd[256], temp[36], type[2]; FILE *stream; NXStream *diags; frames = [LPCframes intValue]; if (!frames) frames = 250; [Pinter setIntValue:frames]; poles = [LPCpoles intValue]; if (!poles) poles = [NXApp poles]; inskip = [LPCinskip floatValue]; if (!strcmp([LPCdur stringValue], "all")) { dur = -1; } else { dur = [LPCdur floatValue]; } strcpy(lpcFilename, [LPCfield stringValue]); if (!strlen(lpcFilename)) { [self badFile:"LPC"]; return self; } strcpy(soundFilename, [Soundfield stringValue]); if (!strlen(soundFilename)) { [self badFile:"Sound"]; return self; } strcpy(pchFilename, [Pitchfield stringValue]); if (!strlen(pchFilename)) { [self badFile:"Pitch analysis"]; return self; } sprintf(cmd, "%s -o %s -p %d -f %d ", [NXApp lpc], lpcFilename, poles, frames); if (inskip > 0) { sprintf(temp, "-i %f ", inskip); strcat(cmd, temp); } if (dur > 0) { sprintf(temp, "-d %f ", dur); strcat(cmd, temp); } strcat(cmd, soundFilename); printf("calling lpc....\n"); printf("cmd: %s\n", cmd); system(cmd); sprintf(cmd, "%s %s %d", [NXApp stabilize], lpcFilename, poles); printf("calling stablilize.....\n"); printf("cmd: %s\n", cmd); system(cmd); frameS = [Pframe intValue]; if (!frameS) frameS = 350; lowcps = [Plowcps floatValue]; if (!lowcps) lowcps = 100.0; highcps = [Phighcps floatValue]; if (!highcps) highcps = 1000.0; inskip = [Pinskip floatValue]; if (!strcmp([Pdur stringValue], "all")) { dur = 99; } else { dur = [LPCdur floatValue]; } strcpy(pchFilename, [Pitchfield stringValue]); type[0] = 'w'; type[1] = '\0'; printf("calling ptrack.....\n"); if (!(id1 = fork())) { fd = open("/tmp/output", O_CREAT|O_RDWR, 0644); dup2(fd, fileno(stderr)); sprintf(cmd, "%s -q ", [NXApp ptrack]); stream = popen(cmd, type); fprintf(stream, "%s\nn\n%s\n%d\n%d\n%f\n%f\n%f\n%f\n", soundFilename, pchFilename, frameS, frames, lowcps, highcps, inskip, dur); fclose(stream); while ((wait((union wait *)&status) != -1)) ; close(fd); exit(1); } while ((wait((union wait *)&status) != -1)) ; diags = NXMapFile("/tmp/output", NX_READONLY); [[diagScroll docView] readText:diags]; NXCloseMemory(diags, NX_FREEBUFFER); if (!(id2 = fork())) { printf("Calling merge : %s\n", [NXApp merge]); fd = open("/tmp/output", O_CREAT|O_WRONLY|O_TRUNC, 0644); dup2(fd, fileno(stdout)); stream = popen([NXApp merge], type); fprintf(stream, "%s\n%s\n%d\n1\n1\n999\n", lpcFilename, pchFilename, poles); fclose(stream); while ((wait((union wait *)&status) != -1)) ; close(fd); exit(1); } while ((wait((union wait *)&status) != -1)) ; diags = NXMapFile("/tmp/output", NX_READONLY); [[diagScroll docView] selectAll:self]; [[diagScroll docView] cut:self]; [[diagScroll docView] readText:diags]; [[diagScroll docView] setSel:0:0]; [[diagScroll docView] paste:self]; NXCloseMemory(diags, NX_FREEBUFFER); printf("done!\n"); return self; } - doLPC:sender { int frames, poles; float inskip, dur; char cmd[256], temp[36]; frames = [LPCframes intValue]; if (!frames) frames = 250; [Pinter setIntValue:frames]; poles = [LPCpoles intValue]; if (!poles) poles = 24; inskip = [LPCinskip floatValue]; if (!strcmp([LPCdur stringValue], "all")) { dur = -1; } else { dur = [LPCdur floatValue]; } strcpy(lpcFilename, [LPCfield stringValue]); if (!strlen(lpcFilename)) { [self badFile:"LPC"]; return self; } strcpy(soundFilename, [Soundfield stringValue]); if (!strlen(soundFilename)) { [self badFile:"Sound"]; return self; } strcpy(pchFilename, [Pitchfield stringValue]); if (!strlen(pchFilename)) { [self badFile:"Pitch Analysis"]; return self; } sprintf(cmd, "%s -o %s -p %d -f %d ", [NXApp lpc], lpcFilename, poles, frames); if (inskip > 0) { sprintf(temp, "-i %f ", inskip); strcat(cmd, temp); } if (dur > 0) { sprintf(temp, "-d %f ", dur); strcat(cmd, temp); } strcat(cmd, soundFilename); printf("calling lpc....\n"); printf("cmd: %s\n", cmd); system(cmd); sprintf(cmd, "%s %s %d", [NXApp stabilize], lpcFilename, poles); printf("calling stablilize.....\n"); printf("cmd: %s\n", cmd); system(cmd); return self; } - doPtrack:sender { int frames, frameS, id1, status; float inskip, dur, lowcps, highcps; char type[2], cmd[256]; FILE *stream; frames = [LPCframes intValue]; frameS = [Pframe intValue]; if (!frameS) frameS = 350; lowcps = [Plowcps floatValue]; if (!lowcps) lowcps = 100.0; highcps = [Phighcps floatValue]; if (!highcps) highcps = 1000.0; inskip = [Pinskip floatValue]; if (!strcmp([Pdur stringValue], "all")) { dur = 99; } else { dur = [LPCdur floatValue]; } strcpy(soundFilename, [Soundfield stringValue]); if (!strlen(soundFilename)) { [self badFile:"Sound"]; return self; } strcpy(pchFilename, [Pitchfield stringValue]); if (!strlen(pchFilename)) { [self badFile:pchFilename]; return self; } type[0] = 'w'; type[1] = '\0'; printf("calling ptrack.....\n"); if (!(id1 = fork())) { sprintf(cmd, "%s -q ", [NXApp ptrack]); stream = popen("/Net/dobro/musr/bin/ptrack -q ", type); fprintf(stream, "%s\nn\n%s\n%d\n%d\n%f\n%f\n%f\n%f\n", soundFilename, pchFilename, frameS, frames, lowcps, highcps, inskip, dur); fclose(stream); while ((wait((union wait *)&status) != -1)) ; exit(1); } while ((wait((union wait *)&status) != -1)) ; return self; } - doMerge:sender { int id1, status, poles; char type[2]; FILE *stream; NXStream *output; strcpy(lpcFilename, [LPCfield stringValue]); if (!strlen(lpcFilename)) { [self badFile:"LPC"]; return self; } strcpy(pchFilename, [Pitchfield stringValue]); if (!strlen(pchFilename)) { [self badFile:"Pitch Analysis"]; return self; } poles = [LPCpoles intValue]; if (!poles) { poles = [NXApp poles]; } type[0] = 'w'; type[1] = '\0'; if (!(id1 = fork())) { output = NXOpenFile(id1, NX_READWRITE); stream = popen([NXApp merge], type); fprintf(stream, "%s\n%s\n%d\n1\n1\n999\n", lpcFilename, pchFilename, poles); fclose(stream); NXClose(output); while ((wait((union wait *)&status) != -1)) ; exit(1); } while ((wait((union wait *)&status) != -1)) ; return self; } - viewLPC:sender { strcpy(lpcFilename, [LPCfield stringValue]); if (!strlen(lpcFilename)) return self; [NXApp viewFile:lpcFilename]; return self; } - viewPCH:sender { strcpy(pchFilename, [Pitchfield stringValue]); if (!strlen(pchFilename)) return self; [NXApp viewPCHfile:pchFilename]; return self; } - playSound:sender { int err; SNDSoundStruct *s; if (!strlen(soundFilename)) return self; err = SNDReadSoundfile(soundFilename, &s); if (!err) { err = SNDStartPlaying(s, 1, 5, 0, 0,(SNDNotificationFun)SNDFree); if (!err) SNDWait(1); } return self; } - doHZ:sender { float val; char cmd[256]; val = [HZfield floatValue]; sprintf(cmd, "%s %f\n", [NXApp hz], val); system(cmd); return self; } - getPitchFile:sender { id openP; const char *types[2]; types[0] = "pch"; types[1] = 0; openP = [OpenPanel new]; if ([openP runModalForTypes:types]) { strcpy(pchFilename, [openP filename]); [Pitchfield setStringValue:pchFilename]; } return self; } - getSoundFile:sender { id openP; const char *types[2]; char *t, *s; types[0] = "snd"; types[1] = 0; openP = [OpenPanel new]; if ([openP runModalForTypes:types]) { strcpy(soundFilename, [openP filename]); [Soundfield setStringValue:soundFilename]; t = rindex(soundFilename, '/'); s = rindex(t, '.'); if (!strlen(lpcFilename)) { strncpy(lpcFilename, soundFilename, (int)(s - soundFilename)); strcat(lpcFilename, ".lpc"); [LPCfield setStringValue:lpcFilename]; } if (!strlen(pchFilename)) { strncpy(pchFilename, soundFilename, (int)(s - soundFilename)); strcat(pchFilename, ".pch"); [Pitchfield setStringValue:pchFilename]; } } return self; } - show:sender { [myWin makeKeyAndOrderFront:self]; return self; } - badFile:(char *)type { NXRunAlertPanel("Alert", "Invalid %s filename\n", "Ok", NULL, NULL, type); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.