This is Wave.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "Wave.h"
#define LOG10 2.3025
#define MAXVALUE 0.9
@implementation Wave
- setFftView:anObject
{
fftView = anObject;
return self;
}
+ newFrame:(NXRect *) frameRect
{
self = [super newFrame:frameRect];
anOrch = [Orchestra new];
[anOrch open] ;
[anOrch setFastResponse:YES];
// Create one oscillator with table lookup.
osc = [anOrch allocUnitGenerator:[OscgafiUGxyxy class]];
stereoOut = [anOrch allocUnitGenerator:[Out2sumUGx class]];
outPatchpoint = [anOrch allocPatchpoint:MK_xPatch];
tableLook = [anOrch allocSynthData:MK_yData length:tableLength];
ampinp = [anOrch allocPatchpoint:MK_yPatch];
freqinp = [anOrch allocPatchpoint:MK_xPatch];
[osc setOutput:outPatchpoint];
[osc setAmpInput:ampinp];
[osc setIncInput:freqinp];
DSPTable = (DSPDatum*) calloc(tableLength,sizeof(DSPDatum));
// [self sine:self];
[osc setTable:tableLook length:tableLength];
[freqinp setToConstant:DSP_FLOAT_TO_INT([osc incAtFreq:100.])];
[ampinp setToConstant:DSP_FLOAT_TO_INT(.1)];
[osc run];
[stereoOut run];
[tableLook run];
[outPatchpoint run];
[freqinp run];
[ampinp run];
[stereoOut setInput:outPatchpoint];
[anOrch run];
DPSSetTracking(0); //Tells the window server to coalesce mouse dragged events
return self;
}
- mouseDown:(NXEvent *) anEvent
{
[fftView storeCurrent:self];
[super mouseDown:anEvent];
return self;
}
- sawTooth:sender
{
int i;
for(i=0;i<tableLength;i++)
{
FuncTable[i] = (float)i/tableLength;
DSPTable[i] = DSP_FLOAT_TO_INT(MAXVALUE*(2*FuncTable[i] -1));
}
[tableLook setData:DSPTable];
[self display];
[fftView receiveData:FuncTable length:tableLength];
return self;
}
- triangle:sender
{
{
int i;
for(i=0;i<tableLength;i++)
{
FuncTable[i] = ((i < tableLength/2) ? (float)i/tableLength*2
: 1. - (float)(i - tableLength /2) / tableLength * 2 );
DSPTable[i] = DSP_FLOAT_TO_INT(MAXVALUE*(2*FuncTable[i]-1));
}
[tableLook setData:DSPTable];
[self display];
[fftView receiveData:FuncTable length:tableLength];
return self;
}
}
- sine:sender
{
int i;
for(i=0;i<tableLength;i++)
{
FuncTable[i] = .5 + 0.5*sin((float)i/tableLength*2*M_PI) ;
DSPTable[i] = DSP_FLOAT_TO_INT(MAXVALUE*(2*FuncTable[i]-1));
}
[tableLook setData:DSPTable];
[self display];
[fftView receiveData:FuncTable length:tableLength];
return self;
}
- square:sender
{
int i;
for(i=0;i<tableLength;i++)
{
FuncTable[i] = (float)(i < tableLength/2) ;
DSPTable[i] = DSP_FLOAT_TO_INT(MAXVALUE*(2*FuncTable[i]-1));
}
[tableLook setData:DSPTable];
[self display];
[fftView receiveData:FuncTable length:tableLength];
return self;
}
- afterDrag:(float*)data length:(int)aLength offset:(int)anOffset
{
int i;
for(i=anOffset;i<anOffset + aLength;i++)
{
DSPTable[i] = DSP_FLOAT_TO_INT (MAXVALUE*(2*data[i] - 1));
}
[tableLook setData:(DSPTable+anOffset) length:aLength offset:anOffset];
return self;
}
- afterUp:(float*)data length:(int)aLength
{
fprintf(stderr,"AFTER UP!\n");
[fftView receiveData:data length:aLength];
return self;
}
-sendFreq:sender
{
float fin;
fin = 10 * exp ([sender floatValue] * LOG10);
[freqinp setToConstant:DSP_FLOAT_TO_INT([osc incAtFreq:fin])];
}
-sendAmp:sender
{
float fin;
fin = .1 * exp ([sender floatValue]);
[ampinp setToConstant:DSP_FLOAT_TO_INT(fin)];
}
- setSound:sender
{
int i;
for(i=0;i<tableLength;i++)
DSPTable[i] = DSP_FLOAT_TO_INT(MAXVALUE*(2*FuncTable[i]-1));
[tableLook setData:DSPTable length:tableLength offset:0];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.