This is DSP.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "DSP.h" #define READ_TAG 1 #define DATA_SIZE (32*1024) #define DMASIZE 4096 #define TWOPOW23 8388608 #define TWOPOW15 32768 static port_t cmd_port; @implementation DSP - setTitles:aTitle { titles = aTitle ; [self start:self]; min[0] = 0; max[0] = 2730; min[1] = - TWOPOW23; max[1] = TWOPOW23-1; min[2] = - TWOPOW23; max[2] = TWOPOW23-1; min[3] = - TWOPOW23; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Time Lag"]; [[titles selectCellWithTag:1] setStringValue:"Filter Coef1"]; [[titles selectCellWithTag:2] setStringValue:"Filter Coef2"]; [[titles selectCellWithTag:3] setStringValue:"Filter Coef3"]; return self; } -start:sender { int s_err; int i ; netname_look_up(name_server_port,"","sound", &dev_port); DSPMKEnableSmallBuffers(); DSPMKInitWithSoundOut(0); owner_port = DSPGetOwnerPort(); cmd_port = DSPGetHostMessagePort(); SNDReadDSPfile("FIR.lod", &Effect, NULL); s_err = SNDBootDSP(dev_port, owner_port, Effect); if (s_err != SND_ERR_NONE) { fprintf(stderr,"Cannot boot dsp : %s\n", SNDSoundError(s_err)); exit(1); } printf("DSP booted\n"); return self; } - update:sender { float value; int tag,j; int DSPCommand; tag = [[sender selectedCell] tag]; DSPCommand = 20 + tag; value = [[sender selectedCell] floatValue]; j = (int) ( min[tag] + (max[tag] - min[tag]) * value ) ; snddriver_dsp_write(cmd_port,&j,1,sizeof(int),SNDDRIVER_HIGH_PRIORITY); snddriver_dsp_host_cmd(cmd_port,DSPCommand,SNDDRIVER_MED_PRIORITY); return self; } - effect:sender { int tag,i; tag = [[sender selectedCell] tag]; switch(tag) { case 0 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("FIR.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 1; max[0] = 2730; min[1] = - TWOPOW23; max[1] = TWOPOW23-1; min[2] = - TWOPOW23; max[2] = TWOPOW23-1; min[3] = - TWOPOW23; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Time Lag"]; [[titles selectCellWithTag:1] setStringValue:"Filter Coef1"]; [[titles selectCellWithTag:2] setStringValue:"Filter Coef2"]; [[titles selectCellWithTag:3] setStringValue:"Filter Coef3"]; break; case 1 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("IIR.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 1; max[0] = 40; min[1] = - TWOPOW23; max[1] = TWOPOW23-1; min[2] = - TWOPOW23 *.7; max[2] = 0; min[3] = 0; max[3] = TWOPOW23/2; [[titles selectCellWithTag:0] setStringValue:"Time Lag"]; [[titles selectCellWithTag:1] setStringValue:"Filter Coef1"]; [[titles selectCellWithTag:2] setStringValue:"Filter Coef2"]; [[titles selectCellWithTag:3] setStringValue:"Gain"]; break; case 2 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("AllPass.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 1; max[0] = 2047; min[1] = 0; max[1] = TWOPOW23-1; min[2] = 0; max[2] = TWOPOW23-1; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Time_lag"]; [[titles selectCellWithTag:1] setStringValue:"Coeff"]; [[titles selectCellWithTag:2] setStringValue:""]; [[titles selectCellWithTag:3] setStringValue:""]; break; case 3 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("Mult.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 0; max[0] = 1000000; min[1] = 0; max[1] = TWOPOW23-1; min[2] = 0; max[2] = TWOPOW23-1; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Freq Coar."]; [[titles selectCellWithTag:1] setStringValue:"Direct"]; [[titles selectCellWithTag:2] setStringValue:"Modulation"]; [[titles selectCellWithTag:3] setStringValue:""]; break; case 4 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("Shift.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 0; max[0] = 200000; min[1] = 0; max[1] = TWOPOW23-1; min[2] = 0; max[2] = TWOPOW23-1; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Shift"]; [[titles selectCellWithTag:1] setStringValue:"Mix"]; [[titles selectCellWithTag:2] setStringValue:""]; [[titles selectCellWithTag:3] setStringValue:""]; break; case 5 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("Phasing.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 0; max[0] = 2000; min[1] = 0; max[1] = 4000; min[2] = 0; max[2] = TWOPOW23 * 0.01; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Frequ"]; [[titles selectCellWithTag:1] setStringValue:"Time_lag"]; [[titles selectCellWithTag:2] setStringValue:"Dev"]; [[titles selectCellWithTag:3] setStringValue:"Mod"]; break; case 6 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("Stereo.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = 0; max[0] = 2047; min[1] = 0; max[1] = TWOPOW23-1; min[2] = 0; max[2] = 2047; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"Lag R"]; [[titles selectCellWithTag:1] setStringValue:"Coeff R"]; [[titles selectCellWithTag:2] setStringValue:"Lag L"]; [[titles selectCellWithTag:3] setStringValue:"Coeff L"]; break; case 7 : snddriver_dsp_host_cmd(cmd_port,30,SNDDRIVER_MED_PRIORITY); i = SNDReadDSPfile("perso.lod", &Effect, NULL); if(i != 0) return; SNDBootDSP(dev_port, owner_port, Effect); min[0] = -100; max[0] = 100; min[1] = 0; max[1] = 10000; min[2] = 0; max[2] = TWOPOW23-1; min[3] = 0; max[3] = TWOPOW23-1; [[titles selectCellWithTag:0] setStringValue:"+-100"]; [[titles selectCellWithTag:1] setStringValue:"0_10000"]; [[titles selectCellWithTag:2] setStringValue:"float"]; [[titles selectCellWithTag:3] setStringValue:"float"]; break; case 8 : snddriver_dsp_host_cmd(cmd_port,0,SNDDRIVER_MED_PRIORITY); break; default : break; } } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.